目 录CONTENT

文章目录

Spring Boot 3.4:你必须知道的7个新特性

在等晚風吹
2025-01-14 / 0 评论 / 0 点赞 / 2 阅读 / 0 字 / 正在检测是否收录...

Spring Boot 3.4:你必须知道的7个新特性

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


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) {
        CompletionRequest request = CompletionRequest.builder()
                .prompt(prompt)
                .maxTokens(100)
                .build();
        return openAiService.createCompletion(request).getChoices().get(0).getText();
    }
}

新方式(Spring Boot 3.4)

借助新版本的自动配置支持,开发者可以专注于业务逻辑,无需手动配置样板代码:

@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));
    }
}

对比

  • 旧方式:需要手动配置 Bean 和处理 API 调用。
  • 新方式:直接使用 spring-ai-starter 提供的 AiService,无需手动配置。

spring-2.png

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

新特性
Micrometer 2.0 提供了更好的直方图、百分位数计算支持,并集成 OpenTelemetry。

旧方式(Spring Boot 3.4 之前)

需要手动配置指标并导出:

@Configuration
public class MetricsConfig {
    @Bean
    public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
        return registry -> registry.config().commonTags("application", "my-service");
    }
}

新方式(Spring Boot 3.4)

直接在 application.yml 中启用 Prometheus 指标导出:

management:
  metrics:
    export:
      prometheus:
        enabled: true
    distribution:
      percentiles-histogram: true
      percentiles: 0.5, 0.9, 0.99

对比

  • 旧方式:需要额外配置 MeterRegistryCustomizer
  • 新方式:通过简单配置文件即可启用高级指标。

spring-3.png

3. 更好的虚拟线程支持

新特性
Spring Boot 3.4 对 Java 虚拟线程的支持更加完善,简化了其在 Web 和响应式应用中的使用。

旧方式(Spring Boot 3.4 之前)

手动配置虚拟线程池:

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

新方式(Spring Boot 3.4)

通过配置文件直接启用虚拟线程:

spring:
  threads:
    virtual: enabled

在代码中无缝使用虚拟线程:

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

spring-4.png

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

新特性
使用更简洁的注解和记录类实现动态配置绑定。

新方式(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) {}

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

新特性
声明式语法简化了安全配置。

新方式(Spring Boot 3.4)

@SecurityPolicy
public class SecurityConfig {
    @Authorize("/admin/**")
    public boolean adminAccess(Authentication auth) {
        return auth.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_ADMIN"));
    }
}

spring-5.png

6. 声明式 REST 客户端增强

新特性
通过注解和 @HttpExchange 简化 REST API 调用。

新方式(Spring Boot 3.4)

@HttpExchange("/users")
public interface UserClient {
    @GetExchange("/{id}")
    User getUser(@PathVariable Long id);

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

spring-6.png

7. 改进的 Testcontainers 集成

新特性
自动管理容器生命周期,简化配置。

新方式(Spring Boot 3.4)

@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);
    }
}

spring-7.png

以上就是 Spring Boot 3.4 的主要特性。如果你正在寻找提升生产力的方法,这些新功能将是你的得力助手! 🎉

0

评论区