查看原文
其他

Spring Boot 3.3 正式发布,王炸级更新,应用启动实现质的飞跃

编程疏影 路条编程
2024-09-05


Spring Boot 3.3 正式发布,王炸级更新,应用启动实现质的飞跃

最低环境要求:

  • 不同 Spring Boot 版本对 Java 版本、Spring 框架版本、Maven 版本和 Gradle 版本都有特定要求。例如,Spring Boot 3.3.0 要求 Java 17 及以上,Spring 6.1.8+,Maven 3.6.3+,Gradle 7.5+或 8.x。

  • 代码示例:以下是一个使用 Java 17 特性的简单示例,如文本块:

public class Java17TextBlocksExample {
public static void main(String[] args) {
String str = """
This is a multiline
string using Java 17 text blocks.
"""
;
System.out.println(str);
}
}

CDS 支持:

  • CDS(类数据共享)是一种强大的技术,通过在多个 JVM 之间共享预加载的类数据,显著减少了内存占用和应用的启动时间。在高并发的场景下,由于类数据无需在每个 JVM 实例中重复加载,大大提升了系统的整体性能和响应速度。

  • 当应用启动时,CDS 会首先识别并准备好需要共享的类数据。这些类通常是应用中频繁使用且相对稳定的核心类。

  • 性能提升方面,假设在没有 CDS 的情况下,每次启动一个新的 JVM 实例都需要花费 X 毫秒来加载关键类。而有了 CDS 支持,这个加载时间可能会降低到原来的几分之一,比如仅需 0.5X 毫秒甚至更少。

  • 内存方面,原本每个 JVM 可能需要为这些类分配 Y 字节的内存空间,而 CDS 使得多个 JVM 可以共享这部分内存,从而大幅降低了总体内存消耗。

  • 代码示例:创建共享类归档的代码可能如下:

import java.io.IOException;

public class CDSExample {
public static void main(String[] args) {
try {
// 执行生成共享类归档的命令
Process process = Runtime.getRuntime().exec("java -Djarmode=tools -jar test-app.jar extract --destination application");
// 处理命令执行的输出和错误
int exitCode = process.waitFor();
if (exitCode!= 0) {
System.err.println("Command execution failed with exit code: " + exitCode);
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}

此外,还可以使用以下命令来进一步优化 CDS 相关操作:
"java -XX:ArchiveClassesAtExit=application.jsa -Dspring.context.exit=onRefresh -jar test-app.jar"
使用说明:

"-XX:ArchiveClassesAtExit=application.jsa":指定在 JVM 退出时创建一个包含类归档的文件,文件名是 "application.jsa"。

"-Dspring.context.exit=onRefresh":设置 Spring 上下文的退出行为。

Websockets 支持虚拟线程:

  • 虚拟线程是轻量级的用户模式线程实现,能大幅提高硬件利用率和吞吐量。

  • 代码示例:启用虚拟线程的配置如下:

spring.threads.virtual.enabled = true
import java.util.concurrent.ExecutionException;

public class VirtualThreadExample {

public static void main(String[] args) throws ExecutionException, InterruptedException {
// 模拟耗时任务
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
try {
Thread.sleep(5000);
System.out.println("Task completed in virtual thread");
} catch (InterruptedException e) {
e.printStackTrace();
}
});

future.get();
}
}

配置文件支持 Base64:

  • 可以在 property 和 YAML 配置文件中以base64:前缀加载资源为 Base64 格式的值。

  • 代码示例:

spring:
ssl:
bundle:
pem:
mybundle:
keystore:
certificate: "base64:VGhpcyBpcyBhIHN0cmluZw=="
private-key: "base64:VGhpcyBpcyBhIHN0cmluZw=="
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Base64ConfigExample {

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

支持 SBOMs:

  • 新增 SBOM 端点,提供软件组件的详细清单。

  • 代码示例:使用相关 API 获取 SBOM 信息。

import org.springframework.web.client.RestTemplate;

public class SBOMEndpointExample {

public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
String sbomInfo = restTemplate.getForObject("http://your-app/sbom-endpoint", String.class);
System.out.println(sbomInfo);
}
}

可观察性增强:

  • 新增对 Micrometer 的 @SpanTag 注解的支持等。

  • 代码示例:

import io.micrometer.observation.annotation.SpanTag;

public class ObservationExample {

@SpanTag(key = "operation", value = "myOperation")
public void myMethod() {
// 方法逻辑
System.out.println("Executing myMethod");
}

public static void main(String[] args) {
ObservationExample example = new ObservationExample();
example.myMethod();
}
}

Spring Security 增强:

  • 自动配置 JwtAuthenticationConverter。

  • 代码示例:

import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

@EnableWebSecurity
public class SecurityConfig {

public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
// 配置相关安全规则
return http.build();
}
}

服务连接支持增强:

  • 对 Apache ActiveMQ Artemis 和 LDAP 服务连接的优化。

  • 代码示例:配置连接参数。

import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;

public class ActiveMQArtemisConnectionExample {

public static void main(String[] args) {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
// 后续进行连接和操作
}
}

容器镜像增强:

  • 对 Docker Compose 中 Bitnami 容器镜像的支持。

  • 代码示例:在 Docker Compose 文件中配置相关镜像。

version: '3'
services:
my-service:
image: bitnami/your-image:latest
# 其他配置

依赖更新和废除:

  • 众多库的版本更新,如 Spring 库和第三方类库。

  • 代码示例:在项目的依赖管理中更新版本号。

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.3.0</version>
</dependency>
<!-- 其他依赖 -->
</dependencies>

总结:

Spring Boot 3.3.0 引入了一系列令人瞩目的新特性,涵盖了从环境要求到各种功能的增强。这些新特性不仅提升了开发效率,还优化了应用的性能、安全性和可维护性。通过深入了解和合理运用这些新特性,开发者能够构建更强大、高效和可靠的应用程序。


今天就讲到这里,如果有问题需要咨询,大家可以直接留言或扫下方二维码来知识星球找我,我们会尽力为你解答。



作者:路条编程(转载请获本公众号授权,并注明作者与出处)
继续滑动看下一个
路条编程
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存