Spring Boot 3.3新特性解析:CDS支持与Base64配置

前言

Spring Boot 3.3.0 已经发布,其中包含对 CDS支持与Base64配置。

CDS(Class Data Sharing)是一项JVM功能,允许在多个JVM实例之间共享类元数据,从而减少应用程序的启动时间和内存占用。Spring Boot 3.3提供了对CDS的支持,使得开发者可以更容易地创建与CDS兼容的应用布局。

在Spring Boot 3.3中,开发者可以在property和YAML配置文件中以Base64格式加载资源,这一特性对于处理如SSL证书等资源极为有用。

CDS支持

SpringBoot 3.3中通过CDS支持可以显著提高程序的启动时间和降低内存占用。以下是关于这一特性的具体介绍:

1. CDS的概念:

类数据共享(Class Data Sharing,简称CDS)是JVM提供的一项功能,旨在减少Java应用程序的启动时间和内存占用。通过在多个JVM实例之间共享类元数据,CDS可以避免在每个JVM启动时重新加载和验证这些类。

2. CDS的特点:

  • 减少启动时间:CDS通过在应用程序首次启动时提取类数据,并将这些数据存储在一个归档文件中,从而避免了后续启动时重复加载和验证这些类的需要。这意味着除了首次启动外,后续的启动时间将大大缩短,因为JVM可以直接从归档文件中读取已加载的类信息,而不必再次执行这一耗时的过程。

  • 降低内存占用:由于类元数据在多个JVM实例之间共享,因此每个实例不需要单独存储这些数据,从而减少了整体的内存占用。这对于运行多个实例的服务器来说尤其有益,可以有效降低内存资源的消耗。

  • 提升应用性能:除了直接的性能提升外,减少启动时间和内存占用还可以间接提高应用程序的性能。快速启动意味着应用程序可以更快地响应请求,而较低的内存占用则留给了其他性能关键部分更多的资源。

  • 简化开发流程:Spring Boot 3.3中的CDS支持简化了使用CDS的流程。开发者可以通过简单的配置和命令行参数来启用CDS,无需进行复杂的设置或维护工作。

此外,在使用CDS时,需要注意以下几点以确保最佳性能和稳定性:

  • 当应用程序的类数据发生变化时(例如,更新了依赖库),需要重新生成归档文件以确保一致性。

  • CDS可能与某些JVM优化策略不兼容,因此在使用时需要进行充分的测试,以确保没有负面影响。

  • CDS的使用效果可能因应用程序的不同而有所差异,因此建议在进行性能调优时考虑多种因素。

3. CDS的应用:

使用CDS涉及两个基本步骤:训练和使用。在训练阶段,需要执行应用程序并提取其类数据,生成一个归档文件(如.jsa文件)。这个过程通常只需要执行一次,除非应用程序有更新。使用阶段则是在启动应用程序时,通过指定-XX:SharedArchiveFile参数来加载之前生成的归档文件,从而加速JVM的启动过程。

4. CDS的效果:

CDS能够显著提高应用程序的启动速度,并且由于共享类数据减少了每个JVM实例所需的内存,因此也有助于减少整体的内存占用。这对于需要快速启动和低内存消耗的应用程序尤其重要。

5. CDS的操作:

要启用CDS,首先需要使用特定的命令行参数来提取应用程序的类数据。例如,可以使用以下命令来提取类数据到一个名为application.jsa的文件:

复制代码
java -Djarmode=tools -jar my-app.jar extract --destination application

然后,在启动应用程序时,指定-XX:SharedArchiveFile参数来加载这个归档文件:

复制代码
java -XX:SharedArchiveFile=application.jsa -jar my-app.jar

这样,JVM就会使用预加载的类数据,从而加快启动速度。

6. CDS的注意:

虽然CDS可以带来性能提升,但也存在一些限制和注意事项。例如,如果应用程序的类数据发生了变化(如更新了依赖库),则需要重新生成归档文件。此外,CDS可能与某些JVM优化策略不兼容,因此在使用时需要仔细测试以确保没有负面影响。

总的来说,通过合理利用CDS,可以有效提升Spring Boot应用程序的性能,尤其是在需要快速部署和大量并发启动场景下。然而,为了确保稳定性和最佳性能,建议在生产环境中使用前进行充分的测试和验证。

支持Base64

在Spring Boot 3.3中,开发者可以在property和YAML配置文件中以Base64格式加载资源,这一特性对于处理如SSL证书等资源极为有用。

以Base64格式加载SSL证书等资源可以通过以下步骤实现:

1). 准备Base64编码的资源:首先,你需要将SSL证书文件转换为Base64编码的字符串。这可以通过使用base64命令或在线工具来完成。例如,如果你有一个名为keystore.jks的证书文件,可以使用以下命令将其转换为Base64编码:​​​​​​​

复制代码
base64 keystore.jks > keystore_base64.txt

2). 配置文件中引用Base64编码的资源:接下来,在Spring Boot的配置文件(如application.yml或application.properties)中,使用${base64:}语法引用Base64编码的资源。例如,要设置SSL的密钥库和密钥库密码,你可以这样做:​​​​​​​

bash 复制代码
ssl:
  key-store: ${base64:keystore_base64.txt}
  key-store-password: ${base64:password}
  # 如果密钥库中的私钥也受密码保护,请添加以下两行
  key-password: ${base64:private_key_password}
  trust-store: ${base64:truststore_base64.txt}
  trust-store-password: ${base64:truststore_password}

3). 加载配置:确保你的配置类加载了这些属性。如果你使用的是Java配置,可以这样做:

java 复制代码
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Value("${ssl.key-store}")
    private String keyStore;

    @Value("${ssl.key-store-password}")
    private String keyStorePassword;

    @Value("${ssl.trust-store}")
    private String trustStore;

    @Value("${ssl.trust-store-password}")
    private String trustStorePassword;

    // 其他配置代码...
}

4). 启动应用程序:现在,当你启动Spring Boot应用程序时,它将自动读取并应用这些Base64编码的资源。

通过这种方式,你可以方便地在Spring Boot 3.3应用程序中以Base64格式加载和使用SSL证书和其他资源。这不仅简化了资源管理,还提高了配置的可读性和安全性。

结语

Spring Boot 3.3 的新特性为开发者带来了更多的便利和性能提升。通过CDS支持、以及配置文件支持Base64等功能,开发者可以更加轻松地构建高效、稳定和安全的应用程序。希望本文的介绍能够帮助您更好地了解和使用Spring Boot 3.3的新特性。

相关推荐
Zzxy12 分钟前
快速搭建SpringBoot项目并整合MyBatis-Plus
java·spring boot
星如雨グッ!(๑•̀ㅂ•́)و✧16 分钟前
WebFlux onErrorContinue 和 onErrorResume使用详解
java·人工智能
电商API&Tina22 分钟前
电商数据采集API接口||合规优先、稳定高效、数据精准
java·javascript·数据库·python·json
zjjsctcdl39 分钟前
springBoot发布https服务及调用
spring boot·后端·https
观测云1 小时前
SpringBootAI 接入观测云 MCP 最佳实践
spring boot·观测云·mcp
zdl6861 小时前
Spring Boot文件上传
java·spring boot·后端
世界哪有真情1 小时前
哇!绝了!原来这么简单!我的 Java 项目代码终于被 “拯救” 了!
java·后端
RMB Player1 小时前
Spring Boot 集成飞书推送超详细教程:文本消息、签名校验、封装工具类一篇搞定
java·网络·spring boot·后端·spring·飞书
重庆小透明1 小时前
【搞定面试之mysql】第三篇 mysql的锁
java·后端·mysql·面试·职场和发展
RuoyiOffice2 小时前
企业请假销假系统设计实战:一张表、一套流程、两段生命周期——BPM节点驱动的表单变形术
java·spring·uni-app·vue·产品运营·ruoyi·anti-design-vue