第 2 章:训练营 - Spring Boot 和 Cloud Foundry
本章系统介绍了如何使用 Spring Boot 快速构建云原生应用,并通过 Cloud Foundry 实现自动化部署,涵盖开发环境搭建、项目初始化、配置管理及平台集成等核心实践。
什么是 Spring Boot
云原生应用程序是为云环境设计的应用。Spring Boot 通过极简配置和自动化,帮助开发者快速创建可在生产环境运行的 Spring 应用。它基于 Spring 生态和第三方库,提供统一抽象和自动依赖管理,极大降低了开发和运维门槛。
Spring Initializr 入门
Spring Initializr(https://start.spring.io)是 Spring 官方提供的项目生成器,支持通过 Web 或 REST API 快速创建带有所需依赖的 Spring Boot 工程。你可以通过 curl 命令或浏览器访问,定制项目参数并下载模板代码。
例如,使用 curl 获取项目:
curl http://start.spring.io
生成的项目结构如下:
- mvnw
- mvnw.cmd
- pom.xml
- src/
- main/
- java/
- com/example/DemoServiceApplication.java
- resources/
- application.properties
- static/
- templates/
- test/
- java/com/example/DemoServiceApplicationTests.java
Spring Initializr 自动集成了 Maven/Gradle 包装器,确保构建环境一致,便于持续集成。
典型依赖项与启动器
Spring Boot 通过“启动器”依赖简化了常用功能的集成。常见启动器如下:
Spring 项目 | Starter 名称 | Maven artifactId |
---|---|---|
Spring Data JPA | JPA | spring-boot-starter-data-jpa |
Spring Data REST | REST Repositories | spring-boot-starter-data-rest |
Spring Framework MVC | Web | spring-boot-starter-web |
Spring Security | Security | spring-boot-starter-security |
H2 Embedded SQL DB | H2 | h2 |
Spring Boot 统一管理依赖版本,只需指定 Spring Boot 父项目版本即可。
快速构建 RESTful 服务示例
以一个简单的 Cat 实体为例,结合 Spring Data JPA 和 REST,几乎无需手写业务代码即可实现完整的 REST API。核心代码结构如下(伪代码):
// Application 主类
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
// JPA 实体
@Entity
class Cat {
@Id @GeneratedValue
private Long id;
private String name;
// 构造方法、getter、toString...
}
// Repository 自动暴露 REST API
@RepositoryRestResource
interface CatRepository extends JpaRepository<Cat, Long> { }
通过访问 /cats
即可操作数据库,无需额外配置。
测试与持续集成
Spring Boot 默认集成了测试依赖,可通过 MockMvc 进行 REST API 测试。典型测试流程如下(伪代码):
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@AutoConfigureMockMvc
public class DemoApplicationTests {
@Autowired private MockMvc mvc;
@Autowired private CatRepository catRepository;
@Before
public void before() {
// 初始化测试数据
catRepository.save(new Cat("Felix"));
// ...
}
@Test
public void catsReflectedInRead() throws Exception {
mvc.perform(get("/cats"))
.andExpect(status().isOk())
.andExpect(content().contentType("application/hal+json"))
.andExpect(result -> {
// 断言返回数据包含 3 只猫
});
}
}
Spring Tool Suite (STS) 入门
现代 Java 开发推荐使用集成开发环境(IDE)。Spring Tool Suite(STS)是基于 Eclipse 的官方 IDE,内置 Spring Initializr、自动依赖管理、Boot Dashboard 等功能,支持热部署和 Cloud Foundry 集成。
安装流程:
- 访问 Spring Tools 官网 下载并安装
- 选择工作区,首次启动后即可使用
STS 支持直接通过菜单创建 Spring Boot 项目,自动集成依赖和模板代码。
使用 STS 创建 Spring Boot 项目
在 STS 中,选择 File → New → Spring Starter Project
,按向导填写项目信息,选择所需依赖(如 Web),即可生成项目骨架。通过 Run → Run As → Spring Boot App
启动应用,控制台可见日志和端口信息。
Spring 指南与最佳实践
Spring 官方指南(https://spring.io/guides)涵盖了从入门到高级的各类场景,结构统一,便于快速学习和查找。每个指南包含:
- 目标与需求说明
- 步骤详解与代码示例
- GitHub 示例仓库
建议结合实际需求查阅相关指南,提升开发效率。
Spring 配置与依赖注入
Spring 通过 IoC(控制反转)和依赖注入简化对象管理。推荐使用 Java 配置类集中声明 bean,避免在业务代码中硬编码依赖。典型配置如下(伪代码):
@Configuration
public class ApplicationConfiguration {
@Bean(destroyMethod = "shutdown")
DataSource dataSource() {
// 配置 H2 数据源
}
@Bean
CustomerService customerService(DataSource dataSource) {
return new CustomerService(dataSource);
}
}
通过 @ComponentScan 可自动发现并注册组件,进一步简化配置。
使用 JdbcTemplate 简化数据库操作
Spring 的 JdbcTemplate 封装了 JDBC 操作,简化了数据库访问代码。示例:
@Component
public class CustomerService {
private final JdbcTemplate jdbcTemplate;
public CustomerService(JdbcTemplate jdbcTemplate) { ... }
public Collection<Customer> findAll() {
return jdbcTemplate.query("select * from CUSTOMERS", rowMapper);
}
}
Spring AOP 与声明式事务
Spring 支持面向切面编程(AOP),可通过注解方式实现日志、事务等横切关注点。例如:
@Aspect
@Component
public class LoggingAspect {
@Around("execution(* com.example..*Service.*(..))")
public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
// 记录方法调用前后时间
}
}
声明式事务只需在配置类加 @EnableTransactionManagement
,业务方法加 @Transactional
注解即可。
Spring Boot 自动配置与约定优于配置
Spring Boot 通过自动配置极大简化了开发流程。只需加上 @SpringBootApplication
注解,框架会自动根据依赖和环境加载合适的配置。你可以通过配置文件或自定义 bean 覆盖默认行为。
Cloud Foundry 平台简介
Cloud Foundry 是开源的 PaaS 平台,专注于应用和服务的自动化部署与运维。开发者只需关注业务逻辑,平台自动完成环境配置、服务绑定、扩缩容等操作。
Pivotal Web Services(PWS)是 Cloud Foundry 的官方托管服务,支持一键部署、服务市场、日志聚合等功能。
Cloud Foundry 部署流程
典型部署步骤如下:
- 安装 cf CLI 并登录 Cloud Foundry 实例
- 创建数据库服务(如 MySQL)
- 推送应用 jar 包
- 绑定服务与环境变量
- 启动应用
可通过 manifest.yml 文件声明应用配置,实现一键部署。例如:
applications:
- name: bootcamp-customers
buildpack: https://github.com/cloudfoundry/java-buildpack.git
instances: 1
random-route: true
path: target/spring-configuration.jar
services:
- bootcamp-customers-mysql
env:
DEBUG: "true"
SPRING_PROFILES_ACTIVE: cloud
Cloud Foundry Java 客户端与自动化
Cloud Foundry Java 客户端基于 Reactor,支持非阻塞、响应式 API,便于自动化部署和集成测试。典型用法包括:
- 配置连接与认证
- 部署服务与应用
- 绑定服务与环境变量
- 启动与监控应用
伪代码示例:
@Bean
ReactorCloudFoundryClient cloudFoundryClient(...) { ... }
@Bean
DefaultCloudFoundryOperations cloudFoundryOperations(...) { ... }
// 部署应用与服务
servicesDeployer.deployService(...).then(
applicationDeployer.deployApplication(...)
).block();
总结
本章系统梳理了 Spring Boot 的核心理念、项目初始化、配置管理、自动化测试及与 Cloud Foundry 的集成部署流程。通过自动化和平台化,开发者可专注于业务创新,极大提升云原生应用的开发与运维效率。后续章节将深入探讨 Spring Boot 与 Cloud Foundry 的高级特性与最佳实践。