SpringBoot3.0
Springboot 3.0
Spring ,Boot3.0强势发布
Spring Boot3.0新特性
Spring Boot3.0+Spring6.0+JDK17+Tomcat10搭建开发环境
Spring Boot3.0技术初探
新技术开拓之路
一、Springboot3.0介绍
1.1、Springboot3.0概述
在2022年11月24日Spring Boot 3.0现已正式发布,它包含了12个月以来151个开发者的5700多次代码提交。这是自4.5年前发布2.0以来,Spring Boot的第一次重大修订。 它也是第一个支持Spring Framework 6.0和GraalVM的Spring Boot GA版本,同时也是第一个基于Java 17的Spring Boot版本,以akartaEE 9为基准并支持Jakarta EE 10。同时借助于GraalVM支持了AOT和Native lmage。
1.2、Springboot3.0特性介绍
删除的支持
- ActiveMqo
- EhCache2
- Hazelcast3
- Atomikos
删除Spring Boot 2.X中丢弃的内容在Spring Boot 2.X中不推荐使用的类、方法以及属性,在Spring Boot 3.0的版本中已经删除了。所以在升级的时候要确保我们没有调用过这些不推荐的内容。
最低依赖的要求
JDK JDK17 Spring Spring Framework 6.0.0 Maven 3.5+ servlet 5.0+ Tomcat 10 lntelliJ IDEA 2021.2.1 兼容问题 首先要想到的就是Jakarta EE 9的兼容问题,确保你的项目中的第三方依赖库和你的代码都兼容了Jakarta EE9,另外还要检查Spring框架正在使用的第三方依赖jar是否兼容Spring 6
1.3、Springboot3.0升级以后问题
这将意味着什么?
- 老的开发环境不能运行,需要安装新的开发环境
- 老项目维护成本更高 变成错误的写法: javax.serviet.* ,可参考:http://tomcat.p2hp.com
- 历时约5年全面升级,新机遇开始到来
二、Spring Boot3.0开发环境搭建
2.1、安装jdk17
下载地址: https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe
注意:安装Java17后,安装目录下没有jre目录如何解决?
1、管理员身份进入cmd 2、进入java17安装目录下 3、运行命令: binljlink.exe –module-path jmods –add-modules java.desktop –output jre
2.2、安装maven
maven版本要在3.5+
三、Spring boot 3.0项目搭建
方式一:通过脚手架方式生成springboot工程,再导入到idea中使用
方式二:手动创建maven工程方式
具体步骤:
3.1、添加parent坐标
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.o</version>
<relativePath/> <!-- 1ookup parent from repository -->
</parent>
3.2、添加web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactid>spring-boot-starter-web</artifactId>
</dependency>
3.3、添加启动类
@springBootApplication
public class App {
public static void main(string[] args) {
SpringApplication.run(App.class,args);
}
}
3.4、遇到问题
在启动的时候出现问题
解决:修改配置
四、Springboot新特性
4.1、HTTP Interfaces新特性
在Spring 6.0之前,我们访问第三方服务或者微服务的http接口主要有这些方式:
- RestTemplate:可同步访问HTTP服务。
- Webclient:可同步或异步访问HTTP服务。
- Feign:在微服务架构中(不限于微服务),用声明式的方式访问HTTP服务。
Spring6.0提供HTTP Interfaces新特性,类似于Spring Data的Repository或者Spring Cloud OpenFeign一样,从而更高效实现WebFlux开发。
操作步骤:
4.1.1、创建Springboot工程
和上面一样步骤省略
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
4.1.2、一个在线的REST HTTP服务
https://jsonplaceholder.typicode.com
4.1.3、编写客户端和服务端之间的数据传值对象(DTO)
@RestController
public class Hellocontroller {
@Autowined
private Todoclient todoClient;
@RequestMapping("/hello")
public Object hello(String msg){
List<TodoClient> list = todoClient.list();
return list;
}
}
根据在线资源服务的数据结构编写DTO
@Data
@AllArgsconstructor
@NoArgsconstructor
public class Todo {
private Long id;
private Long userId;
private string title;
private Boolean completed;
}
4.1.4、编写HTTP客户端
@HttpExchange("/todos ")
public interface Todoc1ient {
@GetExchange(" /itodoId}")
Todo getTodo(@Pathvariab1e Integer todoId);
@GetExchange
List<Todo> getTodos();
@PostExchange
Todo save(@RequestBody Todo todo);
}
这里和Spring WebMVC的用法是很类似的,不过它声明的是远程的资源,和Spring Cloud openFeign一样。
- @HttpExthange:最通用的一个注解,在类级别将会被所有方法继承,如基础路径地址;在方法级别,需要指定具体的method类型。相当于
@RequestMapping
- @GetExchange: HTTP GET请求。相当于@GetMapping·
- @PostExchange: HTTP POST请求。相当@PostMapping。
- @PutExchange: HTTP PUT请求。相当于@PutMapping。
- @DeleteExchange: HTTP DELETE请求。相当于@DeleteMapping.
- @PatchExchange: HTTP PATCH请求。相当于@PatchMapping。
4.1.5、注入声明式客户端
通过给HttpServiceProxyFactory注入携带目标接口 baseUrl的的 webclient,实现 webclient和http interface的关联
@Bean
Todoc1ient demoApi() {
WebClient client = WebClient.builder().baseUr1("https://jsonplaceholder.typicode.com/").bui1d();
HttpserviceProxyFactory factory = HttpServiceProxyFactory.builder(webClientAdapter.forClient(client)).build();
return factory.createclient(Todoc1ient.class);
}
4.2、GraalVM
4.2.1、GraalVM介绍
既然是VM,那肯定也是一个虚拟机,那它跟VM有关系吗?有一定关系,GraalVM可以完全取代上面提到的那几种虚拟机,比如Hotspot。把你之前运行在HotSpot 上的代码直接平移到GraalVM上,不用做任何的改变,甚至都感知不到,项目可以完美的运行。但是GraalVM还有更广泛的用途,不仅支持Java 语言,还支持其他语言。这些其他语言不仅包括嫡系的JVM系语言,例如Kotlin、Scala,还包括例如JavaScript、Nodejs、Ruby、Python等,如图。
GraalVM官网: https://www.graalvm.orgl4.2.2、
4.2.2、GraalVM Native lmage介绍
GraalVM Native Image 是GraalVM提供的一种能够将Spring Boot程序打包成云原生可执行文件的技术,并且比VM占用更少的内存和更快的启动速度,非常适合使用容器部署和在Faas平台使用。 与在VM运行的应用程序不同,GraalVM Native lmage需要提前对代码进行编译处理才能创建可执行文件,GraalVM Nativelmage的运行不需要提供JVM虚拟机。
GraalVM文档地址: https://www.graalvm.org/latest/docs/getting-started/ GralVM Native lmage文档地址: https://www.graalvm.org/latest/reference-manual/native-imagel
4.2.3、软件安装
Windows 1、下载安装包
打开https://github.comlgraalvm/graalvm-ce-builds/releases,按照jdk下载对应安装包
2、下载完解压
3、配置环境变量
4、并设置Java_Home
5、安装Visual Studio Build Tools 打开visualstudio.microsoft.com,下我Visual Studio lnstaller。 选择C++桌面开发,和Windows 11 SDK,然后进行下载和安装,安装后重启操作系统。
6、要使用GraalVM,不能使用普通的windows自带的命令行窗口,得使用VS提供的 x64 Native Tools Command Prompt for VS 2019,如果没有执行C:\Program Files (x86)Microsoft VisualStudio12019\BuildToolslVC\AuxiliarylBuildlivcvars64.bat脚本安装 安装完之后就可以在64 Native Tools Command Prompt for Vs 2019中去使用native-image命令去编译了
7、那么可以执行cl.exe,如果是中文,那就得修改为英文。
8、通过Visual Studio lnstaller来修改,比如:
可能一开始只选择了中文,手动选择英文,去掉中文,然后安装即可。
修改idea的 jdk和 maven目录 jdk就是graalvm的目录, maven是3.8.1目录
进入到项目目录执行mvn -Pnative native:compile
进入到target去执行./文件名字
普通jar包要17s
直接执行exe只要3s
项目要配置maven插件
<build>
<plugins>
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId></exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
4.3、自动配置修改复习自动配置原理
1、在启动类中贴有@SpringBootApplication注解
2、在这个注解的头上贴有EnableAutoConfiguration