SpringBoot 3.4 你必须知道7个新特性-Spring专区论坛-技术-SpringForAll社区

SpringBoot 3.4 你必须知道7个新特性

Spring Boot 3.4 引入了多项显著特性,旨在提升开发者的生产力、性能以及集成能力。本文将详细解释这些特性,并通过完整的代码示例和逐步指导,对比新旧实现方式。

图片[1]-SpringBoot 3.4 你必须知道7个新特性-Spring专区论坛-技术-SpringForAll社区

重点特性:

  1. 增强的 Spring AI 集成

  2. 改进的可观测性与 Micrometer 2.0

  3. 更好的虚拟线程支持

  4. 动态配置与新绑定特性

  5. 声明式安全策略的简化

  6. 声明式 REST 客户端增强

  7. 改进的 Testcontainers 集成

1. 增强的 Spring AI 集成

Spring Boot 3.4 提供了与 Spring AI 更紧密的集成,简化了 AI 服务的消费,特别是在创建和管理生成式 AI 管道方面。

旧方式(Spring Boot 3.4 之前):
开发者需要手动配置外部 AI 库,并为模型集成编写样板代码。

@Configuration
public class AIConfig {

    @Bean
    public OpenAiService openAiService() {
        String apiKey = System.getenv("OPENAI_API_KEY");
        return new OpenAiService(apiKey);
    }
}

@RestController
@RequestMapping("/ai")
public class AIController {

    private final OpenAiService openAiService;

    public AIController(OpenAiService openAiService) {
        this.openAiService = openAiService;
    }

    @PostMapping("/generate")
    public String generateText(@RequestBody String prompt) {
        // Manual handling of requests
        CompletionRequest request = CompletionRequest.builder()
                .prompt(prompt)
                .maxTokens(100)
                .build();
        return openAiService.createCompletion(request).getChoices().get(0).getText();
    }
}

步骤:

  1. 安装 OpenAI 依赖。

  2. 创建配置 Bean。

  3. 手动处理 API 调用。

新方式(Spring Boot 3.4):
Spring Boot 3.4 提供了对 AI 的一流支持,包括自动配置和简化使用。

@SpringBootApplication
public class AiApplication {

    public static void main(String[] args) {
        SpringApplication.run(AiApplication.class, args);
    }
}

@RestController
@RequestMapping("/ai")
public class AIController {

    private final AiService aiService;

    public AIController(AiService aiService) {
        this.aiService = aiService;
    }

    @PostMapping("/generate")
    public String generateText(@RequestBody String prompt) {
        return aiService.generate(prompt, new AiOptions().maxTokens(100));
    }
}

步骤:

  1. 添加 spring-ai-starter 依赖。

  2. 直接使用预配置的 AiService

  3. 专注于业务逻辑,无需编写样板代码。

对比:

图片[2]-SpringBoot 3.4 你必须知道7个新特性-Spring专区论坛-技术-SpringForAll社区

2. 改进的可观测性与 Micrometer 2.0

旧方式(3.4 之前):
Spring Boot 的可观测性虽然不错,但与 Prometheus 或 Grafana 等监控工具的集成需要额外配置,尤其是高级指标。

@Configuration
public class MetricsConfig {

    @Bean
    public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
        return registry -> registry.config().commonTags("application", "my-service");
    }
}
步骤:
  1. 添加 micrometer-core 依赖。

  2. 配置 MeterRegistryCustomizer 以定义指标标签。

  3. 手动将指标导出到 Prometheus 或其他系统。

新方式(Spring Boot 3.4):
借助 Micrometer 2.0,Spring Boot 3.4 简化了指标导出,并增强了对直方图、百分位数计算和 OpenTelemetry 的支持。

management:
  metrics:
    export:
      prometheus:
        enabled: true
    distribution:
      percentiles-histogram: true
      percentiles: 0.5, 0.9, 0.99
步骤:
  1. 添加 spring-boot-starter-actuator

  2. 在 application.yml 中启用 prometheus 指标导出。

  3. 无需自定义代码即可使用高级百分位直方图。

对比:

图片[3]-SpringBoot 3.4 你必须知道7个新特性-Spring专区论坛-技术-SpringForAll社区

3. 更好的虚拟线程支持

旧方式(3.4 之前):
Java 中的虚拟线程在 Spring Boot 中并未完全优化。开发者需要手动启用实验性支持并调整线程池。

@Configuration
public class ExecutorConfig {

    @Bean
    public ExecutorService virtualThreadExecutor() {
        return Executors.newVirtualThreadPerTaskExecutor();
    }
}

步骤:

  1. 手动添加 Executors.newVirtualThreadPerTaskExecutor()

  2. 覆盖 Spring 中的默认线程池。

新方式(Spring Boot 3.4):
对虚拟线程的原生支持使其在 Web 和响应式应用中更易使用。

 
spring:
  threads:
    virtual: enabled
@RestController
public class DemoController {

    @GetMapping("/compute")
    public CompletableFuture<String> compute() {
        return CompletableFuture.supplyAsync(() -> "Hello from Virtual Threads!");
    }
}

步骤:

  1. 通过单个属性启用虚拟线程。

  2. 在应用中无缝使用。

对比:

图片[4]-SpringBoot 3.4 你必须知道7个新特性-Spring专区论坛-技术-SpringForAll社区

4. 动态配置与新绑定特性

旧方式(3.4 之前):
将配置绑定到 Java 对象需要样板代码,处理动态属性时较为繁琐。

@ConfigurationProperties(prefix = "my.app")
public class AppProperties {

    private String name;
    private String description;

    // Getters and Setters
}

@Configuration
@EnableConfigurationProperties(AppProperties.class)
public class AppConfig {
}

新方式(Spring Boot 3.4):
动态配置现在支持更少的注解自动绑定。

@ConfigurationPropertiesScan
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}

@ConfigurationProperties(prefix = "my.app")
public record AppProperties(String name, String description) {}

步骤:

  1. 用 @ConfigurationPropertiesScan 替换 @EnableConfigurationProperties

  2. 使用记录类进行简洁的配置绑定。

5. 声明式安全策略的简化

旧方式(3.4 之前):
安全规则需要多个注解或在 SecurityFilterChain 中手动配置。

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    return http
        .authorizeRequests()
        .antMatchers("/admin/**").hasRole("ADMIN")
        .anyRequest().authenticated()
        .and().build();
}

步骤:

  1. 以编程方式定义安全规则。

  2. 手动处理方法级注解。

新方式(Spring Boot 3.4):
声明式策略通过简洁的语法简化了安全配置。

@SecurityPolicy
public class SecurityConfig {

    @Authorize("/admin/**")
    public boolean adminAccess(Authentication auth) {
        return auth.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_ADMIN"));
    }
}
步骤:
  1. 使用 @SecurityPolicy 和 @Authorize 注解方法。

  2. 从 SecurityFilterChain 中移除样板代码。

对比:

图片[5]-SpringBoot 3.4 你必须知道7个新特性-Spring专区论坛-技术-SpringForAll社区

6. 声明式 REST 客户端增强

旧方式(3.4 之前)

使用 RestTemplate 或 WebClient 进行 REST 调用需要样板代码和显式配置。

@Component
public class UserService {

    private final RestTemplate restTemplate;

    public UserService(RestTemplateBuilder restTemplateBuilder) {
        this.restTemplate = restTemplateBuilder.build();
    }

    public User getUser(Long id) {
        return restTemplate.getForObject("/users/" + id, User.class);
    }

    public User createUser(User user) {
        return restTemplate.postForObject("/users", user, User.class);
    }
}
步骤:
  1. 定义 RestTemplate Bean 或使用 RestTemplateBuilder

  2. 为每个 HTTP 调用实现方法。

  3. 手动处理 URI 构建和负载管理。

新方式(Spring Boot 3.4)

声明式 REST 客户端通过注解和 @HttpExchange 简化了 REST API 的消费。

@HttpExchange("/users")
public interface UserClient {

    @GetExchange("/{id}")
    User getUser(@PathVariable Long id);

    @PostExchange
    User createUser(@RequestBody User user);
}

使用:

@Service
public class UserService {

    private final UserClient userClient;

    public UserService(UserClient userClient) {
        this.userClient = userClient;
    }

    public User getUser(Long id) {
        return userClient.getUser(id);
    }

    public User createUser(User user) {
        return userClient.createUser(user);
    }
}
步骤:
  1. 使用 @HttpExchange 和方法级 HTTP 注解(如 @GetExchange@PostExchange)定义接口。

  2. 将接口注入服务。

  3. 直接使用客户端方法。

对比:

图片[6]-SpringBoot 3.4 你必须知道7个新特性-Spring专区论坛-技术-SpringForAll社区

7. 改进的 Testcontainers 集成

旧方式(3.4 之前)

使用 Testcontainers 需要手动集成数据库容器和处理动态属性。

@SpringBootTest
public class MyRepositoryTests {

    static PostgreSQLContainer<?> postgres;

    @BeforeAll
    static void startContainer() {
        postgres = new PostgreSQLContainer<>("postgres:14");
        postgres.start();
        System.setProperty("spring.datasource.url", postgres.getJdbcUrl());
        System.setProperty("spring.datasource.username", postgres.getUsername());
        System.setProperty("spring.datasource.password", postgres.getPassword());
    }

    @AfterAll
    static void stopContainer() {
        postgres.stop();
    }
}
步骤:
  1. 手动启动容器。

  2. 动态设置系统属性以供 Spring 使用。

  3. 测试后手动停止容器。

新方式(Spring Boot 3.4)

Spring Boot 3.4 通过 DynamicPropertySource 自动化了 Testcontainers 配置。

@Testcontainers
@SpringBootTest
public class MyRepositoryTests {

    @Container
    static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:14");

    @DynamicPropertySource
    static void registerProperties(DynamicPropertyRegistry registry) {
        registry.add("spring.datasource.url", postgres::getJdbcUrl);
        registry.add("spring.datasource.username", postgres::getUsername);
        registry.add("spring.datasource.password", postgres::getPassword);
    }
}
步骤:
  1. 使用 @Container 定义容器生命周期。

  2. 使用 @DynamicPropertySource 注册动态属性。

  3. 容器由 @Testcontainers 注解自动管理。

对比:

图片[7]-SpringBoot 3.4 你必须知道7个新特性-Spring专区论坛-技术-SpringForAll社区

以上就是 Spring Boot 3.4 的主要特性介绍。希望这些内容对您有所帮助!

如果您喜欢这篇文章或觉得它有用,请点赞分享支持一下。

请登录后发表评论

    没有回复内容