赞
踩
在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版本,以Jakarta EE 9为基准并支持Jakarta EE 10。同时借助于GraalVM支持了AOT和Native Image。
删除的支持
ActiveMq
EhCache 2
Hazelcast 3
Atomikos
删除Spring Boot 2.X中丢弃的内容 在Spring Boot 2.X中不推荐使用的类、方法以及属性,在Spring Boot 3.0 的版本中已经删除了。所以在升级的时候要确保我们没有调用过这些不推荐的内容。
最低依赖的要求
兼容问题
首先要想到的就是Jakarta EE 9 的兼容问题,确保你的项目中的第三方依赖库和你的代码都兼容了Jakarta EE 9,另外还要检查Spring 框架正在使用的第三方依赖jar是否兼容Spring 6
这将意味着什么?
1.老的开发环境不能运行,需要安装新的开发环境
2.老项目维护成本更高 变成错误的写法: javax.servlet.* ,可参考:Tomcat 中文官网 下载 安装
3.历时约5年全面升级,新机遇开始到来
下载地址: https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe
java 17安装与配置
注意:安装Java17后,安装目录下没有jre目录如何解决?
1 、管理员身份进入cmd
2、进入java17安装目录下
3、运行命令:bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre
File ->Settings -> Build,Execution,Deployment -> Maven (建议使用3.8.x)
方式一:通过脚手架方式生成springboot工程,再导入到idea中使用
方式二:手动创建maven工程方式
具体步骤:
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>3.0.0</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- @SpringBootApplication
- public class App {
- public static void main(String[] args) {
- SpringApplication.run(App.class,args);
- }
- }
在启动的时候出现问题
解决: 修改配置
在Spring 6.0之前,我们访问第三方服务或者微服务的http接口主要有这些方式:
RestTemplate:可同步访问HTTP服务。
WebClient:可同步或异步访问HTTP服务。
Feign:在微服务架构中(不限于微服务),用声明式的方式访问HTTP服务。
Spring6.0提供HTTP Interfaces新特性,类似于Spring Data的Repository或者Spring Cloud OpenFeign一样,从而更高效实现WebFlux开发。
官网地址 :Redirecting...
操作步骤:
和上面一样步骤省略
"https://jsonplaceholder.typicode.com"。
我们可以对这些资源进行增删查改的操作,本例选用todos资源。
https://jsonplaceholder.typicode.com/todos
根据在线资源服务的数据结构编写DTO
- @Data
- @AllArgsConstructor
- @NoArgsConstructor
- public class Todo {
- private Long id;
- private Long userId;
- private String title;
- private Boolean completed;
- }
- @HttpExchange("/todos")
- public interface TodoClient {
-
- @GetExchange("/{todoId}")
- Todo getTodo(@PathVariable Integer todoId);
-
- @GetExchange
- List<Todo> getTodos();
-
- @PostExchange
- Todo save(@RequestBody Todo todo);
- }
这里和Spring WebMVC的用法是很类似的,不过它声明的是远程的资源,和Spring Cloud OpenFeign一样。
@HttpExchange:最通用的一个注解,在类级别将会被所有方法继承,如基础路径地址;在方法级别,需要指定具体的method类型。相当于@RequestMapping。
@GetExchange:HTTP GET请求。相当于@GetMapping。
@PostExchange:HTTP POST请求。相当于@PostMapping。
@PutExchange:HTTP PUT请求。相当于@PutMapping。
@DeleteExchange:HTTP DELETE请求。相当于@DeleteMapping。
@PatchExchange:HTTP PATCH请求。相当于@PatchMapping。
通过给 HttpServiceProxyFactory 注入携带目标接口 baseUrl 的的 webclient,实现 webclient 和 http interface 的关联
- @Bean
- TodoClient demoApi() {
- WebClient client = WebClient.builder().baseUrl("https://jsonplaceholder.typicode.com/").build();
- HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(client)).build();
- return factory.createClient(TodoClient.class);
- }
- @RequestMapping("/hello")
- public Object hello(Integer id){
- return todoClient.getTodo(id);
- }
HTTP interfaces使用起来比RestTemplate和WebClient要简单很多,使用声明式类似于OpenFeign的方式进行远程的HTTP资源的调用,但不需要额外引用Spring Cloud OpenFeign,极大的简化了代码和提高了开发效率。
既然是VM,那肯定也是一个虚拟机,那它跟JVM有关系吗?有一定关系,GraalVM 可以完全取代上面提到的那几种虚拟机,比如 HotSpot。把你之前运行在 HotSpot 上的代码直接平移到 GraalVM 上,不用做任何的改变,甚至都感知不到,项目可以完美的运行。但是 GraalVM 还有更广泛的用途,不仅支持 Java 语言,还支持其他语言。这些其他语言不仅包括嫡系的 JVM 系语言,例如 Kotlin、Scala,还包括例如 JavaScript、Nodejs、Ruby、Python 等,如图。
GraalVM官网: GraalVM
GraalVM Native Image 是GraalVM 提供的一种能够将Spring Boot 程序打包成云原生可执行文件的技术,并且比JVM 占用更少的内存和更快的启动速度,非常适合使用容器部署和在Faas平台使用。
与在JVM运行的应用程序不同,GraalVM Native Image需要提前对代码进行编译处理才能创建可执行文件,GraalVM Native Image 的运行不需要提供JVM虚拟机。
GraalVM 文档地址:Getting Started with GraalVM GraalVM Native Image 文档地址:Native Image
Windows
1、下载安装包
打开Releases · graalvm/graalvm-ce-builds · GitHub,按照 jdk 下载对应安装包
2、下载完解压
3、配置环境变量
4、并设置 Java_Home
5、安装Visual Studio Build Tools
打开visualstudio.microsoft.com,下载Visual Studio Installer。
选择C++桌面开发,和Windows 11 SDK,然后进行下载和安装,安装后重启操作系统。
6、要使用GraalVM,不能使用普通的windows自带的命令行窗口,得使用VS提供的 x64 Native Tools Command Prompt for VS 2019,如果没有执行C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat脚本安装
安装完之后就可以在64 Native Tools Command Prompt for VS 2019中去使用native-image命令去编译了
7、那么可以执行cl.exe,如果是中文,那就得修改为英文。
8、通过Visual Studio Installer来修改,比如:
可能一开始只选择了中文,手动选择英文,去掉中文,然后安装即可。
代码写完之后,就可以在 x64 Native Tools Command Prompt for VS 2019中中,进入到工程目录下,执行mvn -Pnative native:compile 进行编译就可以了,就能在 target 下生成对应的 exe 文件,后续只要运行 exe文件就可以应用了。
9、在项目加入插件
- <properties>
- <java.version>17</java.version>
- <maven.compiler.source>17</maven.compiler.source>
- <maven.compiler.target>17</maven.compiler.target>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-webflux</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>io.projectreactor</groupId>
- <artifactId>reactor-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <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>
10 打开命令窗口
11 把项目拷贝到系统盘然后 cd 到项目目录中
12 执行mvn -Pnative native:compile ,最终打包好的 exe 文件在 target 目录中
Mac 系统**
1、下载 graalvm mac 版本
2、下载解压,配置环境变量
vi .bash_profile
3 、创建项目导入依赖
- <properties>
- <java.version>17</java.version>
- <maven.compiler.source>17</maven.compiler.source>
- <maven.compiler.target>17</maven.compiler.target>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-webflux</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>io.projectreactor</groupId>
- <artifactId>reactor-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <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 、修改 idea 的 jdk 和 maven 目录
jdk 就是 graalvm 的目录 , maven 是 3.8.1目录
5、进入到项目目录执行 mvn -Pnative native:compile
6、进入到 target 去执行./文件名字
访问效果
复习自动配置原理
1、在启动类中贴有@SpringBootApplication注解
2、在这个注解的头上贴有EnableAutoConfiguration
3、在这个注解头上导入一个类AutoConfigurationImportSelector
4、在这个类中有一个getCandidateConfigurations()
这个方法之前是加载的 META-INF/spring.factories 信息, 现在在3.0 中加载META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。