SpringBoot3.0

SpringBoot3.0

Springboot 3.0

  1. Spring ,Boot3.0强势发布

  2. Spring Boot3.0新特性

  3. Spring Boot3.0+Spring6.0+JDK17+Tomcat10搭建开发环境

  4. Spring Boot3.0技术初探

  5. 新技术开拓之路

一、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。

官网: https://spring.io

1.2、Springboot3.0特性介绍

  1. 删除的支持

    • ActiveMqo
    • EhCache2
    • Hazelcast3
    • Atomikos
  2. 删除Spring Boot 2.X中丢弃的内容在Spring Boot 2.X中不推荐使用的类、方法以及属性,在Spring Boot 3.0的版本中已经删除了。所以在升级的时候要确保我们没有调用过这些不推荐的内容。

  3. 最低依赖的要求

    JDK JDK17
    Spring Spring Framework 6.0.0
    Maven 3.5+
    servlet 5.0+
    Tomcat 10
    lntelliJ IDEA 2021.2.1
  4. 兼容问题 首先要想到的就是Jakarta EE 9的兼容问题,确保你的项目中的第三方依赖库和你的代码都兼容了Jakarta EE9,另外还要检查Spring框架正在使用的第三方依赖jar是否兼容Spring 6

1.3、Springboot3.0升级以后问题

这将意味着什么?

  1. 老的开发环境不能运行,需要安装新的开发环境
  2. 老项目维护成本更高 变成错误的写法: javax.serviet.* ,可参考:http://tomcat.p2hp.com
  3. 历时约5年全面升级,新机遇开始到来

image-20230315212904155

二、Spring Boot3.0开发环境搭建

2.1、安装jdk17

下载地址: https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe

image-20230315212038155

注意:安装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、遇到问题

在启动的时候出现问题

image-20230315213509600

解决:修改配置

image-20230315213545920

四、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开发。

官网地址: https://docs.spring.io/spring-framework/docs/current/reference/htm/Vintegration.html#rest-http-interface

操作步骤:

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等,如图。

image-20230315212643566

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下载对应安装包

image-20230315215129537

2、下载完解压

image-20230315215202348

3、配置环境变量

image-20230315215227711

4、并设置Java_Home

image-20230315215254408

5、安装Visual Studio Build Tools 打开visualstudio.microsoft.com,下我Visual Studio lnstaller。 选择C++桌面开发,和Windows 11 SDK,然后进行下载和安装,安装后重启操作系统。

image-20230315215328674

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命令去编译了

image-20230315215425101

7、那么可以执行cl.exe,如果是中文,那就得修改为英文。

image-20230315215450165

8、通过Visual Studio lnstaller来修改,比如:

image-20230315215510601

可能一开始只选择了中文,手动选择英文,去掉中文,然后安装即可。

修改idea的 jdk和 maven目录 jdk就是graalvm的目录, maven是3.8.1目录

进入到项目目录执行mvn -Pnative native:compile 进入到target去执行./文件名字

image-20230315215828181

image-20230315215812185

普通jar包要17s

image-20230315215909387

直接执行exe只要3s

image-20230315215937970

项目要配置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注解

image-20230315214828068

2、在这个注解的头上贴有EnableAutoConfiguration

image-20230315215002506

image-20230315215019879

image-20230315215058402