第 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 JPAJPAspring-boot-starter-data-jpa
Spring Data RESTREST Repositoriesspring-boot-starter-data-rest
Spring Framework MVCWebspring-boot-starter-web
Spring SecuritySecurityspring-boot-starter-security
H2 Embedded SQL DBH2h2
表 1: 典型 Spring Boot 启动器依赖

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 集成。

安装流程:

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 部署流程

典型部署步骤如下:

  1. 安装 cf CLI 并登录 Cloud Foundry 实例
  2. 创建数据库服务(如 MySQL)
  3. 推送应用 jar 包
  4. 绑定服务与环境变量
  5. 启动应用

可通过 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 的高级特性与最佳实践。

文章导航

独立页面

这是书籍中的独立页面。

书籍首页

评论区