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

news2024/9/22 9:52:35

前言

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的密钥库和密钥库密码,你可以这样做:​​​​​​​

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配置,可以这样做:


@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的新特性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2102861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web前端全栈Vue3项目实战:‌从零到一的完整指南

Web前端全栈Vue3项目实战:‌从零到一的完整指南 在当今的前端开发领域,‌Vue.js 凭借其简洁、‌易学且高效的特点,‌成为了众多开发者的首选框架。‌随着 Vue 3 的发布,‌其在性能、‌类型支持以及组合式 API 等方面的提升&#…

Influxdb简介

InfluxDB 是一个开源的、专门为处理时序数据(Time Series Data)设计的数据库管理系统。它由 InfluxData 开发,旨在高效地存储和查询大量的时序数据,如监控数据、传感器数据、日志、指标和事件等。

图论(1)

一、无序对的定义 无序对中的两元素不分先后 无序积是无序对的集合 无序对里面的元素交换位置还是之前的无序对 二、图 三、图的表示 1、图的表示法 有集合表示法、画图表示法、矩阵表示法 集合表示法:把所有边写在一个集合里,所有点写在一个集合里…

C语言:常用技巧汇总

一、字符串存储在数组中 int main() {char* arr[7] {"xiaoming","zhangsan","李四"};printf("%s\n", arr[0]);printf("%s\n", arr[2]);return 0; } 二、scanf()函数用法 2.1 scanf()输入字符串 int main() {char arr[10…

沸点 | LDBC 第18届 TUC 会议召开,专家孙宇熙受邀参加并发表演讲

图数据管理领域国际权威组织LDBC(Linked Data Benchmark Council)于8月30日至31日在广州举办了第18届LDBC TUC会议。作为图数据库领域的创新引领者,嬴图受邀参加此次盛会,国际高性能计算与存储系统专家、大数据专家、图专家及嬴图…

国赛数模C题模型(五)

熵权法 原理介绍 熵权法:(1)熵:指标的信息熵。信息熵描述所有可能发生事件的不确定性。 ​ (2)权:指标的权重,描述指标的重要程度。 ​ (3)熵权法&#xff1…

Java实现加密(六)国密SM2算法

目录 一、SM2 简介1.1 概述1.2 国密与国际密的对应关系1.3 优势1.4 ECC加密算法 vs RSA加密算法二、SM2 应用场景2.1 数据加密2.2 密钥协商2.3 数字签名三、Java 实现 SM2 的两种方式3.1 Maven 依赖3.2 实现方式一1)SM2Utils.java2)SignatureSM2Util.java3)Param.java4)测试…

界面控件DevExpress中文教程:如何使用AI扩展Excel计算?

DevExpress WinForms拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…

人工智能 | Mistral 大语言模型

Mistral AI Mistral AI team Mistral AI 是一家销售人工智能产品的法国公司。它由 Meta Platforms 和 Google DeepMind 的前员工于 2023 年 4 月创立。该公司于 2023 年 10 月筹集了 3.85 亿欧元,2023 年 12 月估值超过 20 亿美元 Mistral.AI 愿景与使命 我们是一…

Linux动态链接库

一、背景 我们使用Linux的过程中,例如安装程序或者部署一些如Python等,可能会遇到过如下动态链接库(共享库)报错: ImportError: libcrypto.so.10: cannot open shared object file: No such file or directory $"./lib/python3.8/lib/python3.8/ss…

同三维TM6-6 有线6级联会议麦克风详情介绍

同三维TM6-6 有线6级联会议麦克风 信息通讯类智能阵列麦克风 有线传输,强抗干扰、可级联、长续航、低延时 6个麦克风级联,通过3.5音频线级联, 可以同时使用3.5mm LINE IN/OUT、USB有线连接PC端,每条音频线是3米,可应用在视频会…

使用vscode编辑matlab完美解决方法

vscode里面的matlab插件都不好用,需要搭配互补一下 1先安装MATLAB 这个插件可以进行代码高亮、格式化、跳转,F5运行所有代码,或者选中要运行的代码,右键单独运行, 优点:运行速度很快,和matlab里…

idea新建父工程和添加导入新模块的步骤

如何在idea中新建一个父工程&#xff0c;然后在父工程下新建多个微服务模块&#xff1f; 一、新建父工程 1.1 新建New Project 1.2 删掉多余文件 创建好后&#xff0c;把多余的文件删掉&#xff0c;变成这样 1.3 修改pom文件 添加<packaging>pom</packaging>…

【Webpack】基本使用方法

参考视频&#xff1a; 30 分钟掌握 Webpack_哔哩哔哩_bilibili 什么是webpack 简单来说就是一个 打包工具&#xff0c; 可以将互相依赖的html、css、js以及图片字体等资源文件&#xff0c;经过处理打包成一个可执行的项目文件 &#x1f330;看例子 环境初始化 在需要使用…

ai智能写作助手批量生成文章,提升工作效率!

在当今快节奏的工作环境中&#xff0c;时间就是金钱&#xff0c;效率就是生命。对于需要大量产出文章的工作者来说&#xff0c;如何在有限的时间内创作出高质量的内容&#xff0c;成为了一个亟待解决的问题。而AI智能写作助手的出现&#xff0c;为这一问题提供了解决方案。本文…

godot开发初体验

点击加号可以创建一个新的场景 点击其它节点可以添加节点 想对某个节点添加子节点可以右键这个节点,然后点击添加子节点 在左下角的文件系统中,可以右键某个场景,并将其设置为主场景,主场景作为程序的入口 点击项目->项目设置-> 输入映射,可以添加一个新的动作,在添加新动…

游戏应用|空地模型实景融合,还原《黑神话:悟空》游戏场景

古色斑驳&#xff0c;巍峨险峻&#xff0c;是历史的低语&#xff0c;诉说着千百年的沧桑与辉煌&#xff1b;飞檐翘角&#xff0c;雕梁画栋&#xff0c;凝聚着时代的文明与智慧。在数字化浪潮下&#xff0c;我们利用实景三维技术&#xff0c;翻开了中华古建筑这本伟大的史诗。 P…

快速入门Go:Go + gin + MongoDB

Go 进阶:Go + gin + MongDB 极速搭建EcommerceSys电商系统 前言 本章节适合有一定基础的 Golang 初学者,通过简单的项目实践来加深对 Golang 的基本语法和 Web 开发的理解。 本文章持续更新中,请关注… 项目结构 项目流程图 技术栈(待补充)项目结构项目路由 (待补充) …

合宙LuatOS开发板Core_Air780EP使用说明

Core-Air780EP 开发板是合宙通信推出的基于 Air780EP 模组所开发的&#xff0c; 包含电源&#xff0c;SIM卡&#xff0c;USB&#xff0c;天线&#xff0c;音频等必要功能的最小硬件系统。 以方便用户在设计前期对 Air780EP模块进行性能评估&#xff0c;功能调试&#xff0c;软…

zeus病毒应急响应

目录 介绍步骤 介绍 Zeus病毒&#xff0c;也叫Zbot病毒&#xff0c;是一种具有高潜伏性的木马病毒&#xff0c;受影响系统为微软Windows&#xff0c;主要被用来盗窃用户银行信息。 Zeus最早于2007年被发现&#xff0c;当时它被用来盗取美国某公司的资料信息。到2009年&#x…