Springboot 3.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版本,以Jakarta EE 9为基准并支持Jakarta EE 10。同时借助于GraalVM支持了AOT和Native Image。

官网:Spring | Home

1.2、Springboot3.0特性介绍

  1. 删除的支持

    • ActiveMq

    • EhCache 2

    • Hazelcast 3

    • Atomikos

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

  3. 最低依赖的要求

  4. 兼容问题

    首先要想到的就是Jakarta EE 9 的兼容问题,确保你的项目中的第三方依赖库和你的代码都兼容了Jakarta EE 9,另外还要检查Spring 框架正在使用的第三方依赖jar是否兼容Spring 6

1.3、Springboot3.0 升级以后问题

这将意味着什么?

1.老的开发环境不能运行,需要安装新的开发环境

2.老项目维护成本更高 变成错误的写法: javax.servlet.* ,可参考:Tomcat 中文官网 下载 安装

3.历时约5年全面升级,新机遇开始到来

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

2.1、安装 jdk17

下载地址: 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

2.2、修改 idea 的 jdk 环境

2.3、修改 idea 的 maven

File ->Settings -> Build,Execution,Deployment -> Maven (建议使用3.8.x)

、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.0</version>
        <relativePath/> <!-- lookup 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开发。

官网地址 :Redirecting...

操作步骤:

4.1.1、创建Springboot 工程

和上面一样步骤省略

4.1.2、一个在线的REST HTTP服务

"https://jsonplaceholder.typicode.com"。

我们可以对这些资源进行增删查改的操作,本例选用todos资源。

4.1.3、编写客户端和服务端之间的数据传值对象(DTO)

https://jsonplaceholder.typicode.com/todos

根据在线资源服务的数据结构编写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 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。

4.1.5、注入声明式客户端

通过给 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);
}
4.1.6、controller 加入方法
@RequestMapping("/hello")
public Object hello(Integer id){
   return todoClient.getTodo(id);
}

HTTP interfaces使用起来比RestTemplate和WebClient要简单很多,使用声明式类似于OpenFeign的方式进行远程的HTTP资源的调用,但不需要额外引用Spring Cloud OpenFeign,极大的简化了代码和提高了开发效率。

4.2、GraalVM

4.2.1、GraalVM介绍

既然是VM,那肯定也是一个虚拟机,那它跟JVM有关系吗?有一定关系,GraalVM 可以完全取代上面提到的那几种虚拟机,比如 HotSpot。把你之前运行在 HotSpot 上的代码直接平移到 GraalVM 上,不用做任何的改变,甚至都感知不到,项目可以完美的运行。但是 GraalVM 还有更广泛的用途,不仅支持 Java 语言,还支持其他语言。这些其他语言不仅包括嫡系的 JVM 系语言,例如 Kotlin、Scala,还包括例如 JavaScript、Nodejs、Ruby、Python 等,如图。

GraalVM官网: GraalVM

4.2.2、GraalVM Native Image 介绍

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

4.2.3、软件安装

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 去执行./文件名字

访问效果

4.3、自动配置修改

复习自动配置原理

1、在启动类中贴有@SpringBootApplication注解

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

3、在这个注解头上导入一个类AutoConfigurationImportSelector

4、在这个类中有一个getCandidateConfigurations()

这个方法之前是加载的 META-INF/spring.factories 信息, 现在在3.0 中加载META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

化是渐化,变是顿变:一窥 OpenAI Sora 相关技术的演进

编者按&#xff1a; 近期&#xff0c;OpenAI 发布通用视觉大模型 Sora &#xff0c;这也是继文本模型ChatGPT和图片模型Dall-E之后&#xff0c;又一极具颠覆性的大模型产品&#xff0c;人们重新思考了生成式 AI 在视觉内容创作领域的应用前景&#xff0c;内容创作工作流有望被颠…

ETH网络中的区块链

回顾BTC网络的区块链系统 什么是区块链&#xff1f;BTC网络是如何运行的&#xff1f;BTC交易模式 - UXTO ETH网络中的区块链 ETH网络的基石依旧是 区块链。上面 什么是区块链&#xff1f; 的文章依旧适用。 相比BTC网络&#xff0c;ETH网络的账户系统就相对复杂&#xff0c;所…

【论文阅读-PRIVGUARD】Day4:3节

3 PRIVANALYZER&#xff1a;强制执行隐私政策的静态分析 本节介绍PRIVANALYZER&#xff0c;这是一个用于强制执行由PRIVGUARD追踪的隐私政策的静态分析器**。我们首先回顾LEGALEASE政策语言&#xff0c;我们使用它来正式编码政策&#xff0c;然后描述如何静态地强制执行它们**…

储能:第十四届中国国际储能展览会在杭州国际博览中心召开

数字储能网讯&#xff1a;由中国化学与物理电源行业协会主办&#xff0c;中国化学与物理电源行业协会储能应用分会和中国储能网联合承办的第十四届中国国际储能大会暨展览会将于2024年3月10-12日在杭州国际博览中心召开&#xff0c;大会主题为“共建储能生态链&#xff0c;共创…

Java毕业设计-基于springboot开发的农机设备电招平台系统-毕业论文+答辩PPT(有源代码)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、后台功能模块2.1管理员功能模块2.2 农机机主功能模块2.3 使用者功能模块 四、毕设内容和源代码获取总结 Java毕业…

从理论到落地,大模型评测体系综合指南

1956年夏&#xff0c;“人工智能” 这一概念被提出。距今已有近70年的发展历史。中国科学院将其划分为六个阶段&#xff1a;起步发展期&#xff08;1956年—1960s&#xff09;&#xff0c;反思发展期&#xff08;1960s-1970s&#xff09;,应用发展期&#xff08;1970s-1980s),低…

数据库 与 数据仓库

OLTP 与 OLAP OLTP(On Line Transaction Processing&#xff0c;联机事务处理) 系统主要针对具体业务在数据库联机下的日常操作&#xff0c;适合对少数记录进行查询、修改&#xff0c;例如财务管理系统、ERP系统、交易管理系统等。该类系统侧重于基本的、日常的事务处理&#…

CentOS 7开启Web服务

之前有写过用kali开启web服务方法&#xff0c;这次写个用cendos7开启服务的步骤&#xff01; 1、安装httpd yum install -y httpd 若显示安装失败&#xff0c;报错原因为找不到httpd的安装包&#xff0c;可参考这篇文件更新yum源&#xff1a;CentOS 7更换yum源|详细步骤-CSDN…

(每日持续更新)jdk api之PipedInputStream基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…

双通道 40V 160mΩ车规级高侧电源开关带诊断功能反向电池保护功能

概述 PC8916是双通道、高功率具有集成NMOS功率FET的开关&#xff0c;以及电荷泵。该设备集成了高级 保护功能&#xff0c;例如负载电流限制&#xff0c;通过功率限制进行过载主动管理带可配置闭锁的超温停机。全面诊断和高精度电流感应这些功能实现了对负载的智能控制。有源漏…

零售经营“新赛道” ——基于手机银行APP专区调研的客群精细化运营分析报告

随着银行业竞争的不断深入及新客户增量日渐“到顶”&#xff0c;各家银行的客群竞争逐渐由“跑马圈地”进入“精耕细作”的新阶段&#xff0c;在客群精准化服务方面不断深入。目前&#xff0c;国内主要商业银行均已在手机银行上建立了相应的用户专区&#xff08;或对应版本APP&…

敏捷开发模型:一种灵活、协作和持续的软件开发方法

敏捷开发模型&#xff1a;一种灵活、协作和持续的软件开发方法 引言 在软件开发领域&#xff0c;随着市场需求的不断变化和技术的迅速发展&#xff0c;传统的瀑布模型逐渐暴露出其局限性。为了应对这些挑战&#xff0c;敏捷开发模型应运而生。敏捷开发模型强调灵活、协作和持…

EasyRecovery2024免费无需付费版电脑数据恢复软件

一、功能概述 EasyRecovery数据恢复软件是一个功能全面的数据恢复工具&#xff0c;其主要功能包括&#xff1a; 文件恢复&#xff1a;能够恢复各种文件类型&#xff0c;如文档、图片、视频、音频等&#xff0c;满足用户多样化的数据恢复需求。分区恢复&#xff1a;当硬盘分区…

Bert-as-service 实战

参考&#xff1a;bert-as-service 详细使用指南写给初学者-CSDN博客 GitHub - ymcui/Chinese-BERT-wwm: Pre-Training with Whole Word Masking for Chinese BERT&#xff08;中文BERT-wwm系列模型&#xff09; 下载&#xff1a;https://storage.googleapis.com/bert_models/…

推荐一个屏幕上鼠标高亮显示的小工具

在视频录制等特定场景下&#xff0c;很多人希望在点击鼠标时能够在屏幕上及时进行显示&#xff0c;便于别人发现&#xff0c;提高别人的注意力。 因此&#xff0c;很多录屏软件中都内含显示鼠标点击功能。那如果不支持该怎么办呢&#xff1f;其实&#xff0c;也是可以通过其他工…

JavaScript-关于事件、事件流(捕获、冒泡)、事件源、常用事件

1.如何注册事件(如何绑定事件) ​ 何为注册事件&#xff0c;就是给元素添加事件&#xff0c;其方式有传统注册事件、方法监听注册事件。 0、1级事件&#xff08;传统注册事件&#xff09;不允许多个响应程序 我们在元素内或js内使用on的方式就是传统注册事件&#xff0c;这种形…

lv20 QT 常用控件 2

1 QT GUI 类继承简介 布局管理器 输出控件 输入控件 按钮 容器 2 按钮示例 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QCheckBox> #include <QLineEdit> #include <QPushButton>class Widget : public QWidget {Q_OBJECTpublic…

第1篇 Linux Docker安装rabbitmq

Docker安装RabbitMq 1、搜索rabbitmq镜像 docker search rabbitmq2、下载rabbitmq镜像 docker pull rabbitmq3、运行rabbitmq服务 docker run -d --name rabbitmq --restart always -p 15672:15672 -p 5672:5672 rabbitmq4、访问rabbitmq http://192.168.1.x:15672 5、rab…

彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进

视觉三维重建 定位定姿 稠密重建 surface reconstruction 纹理贴图。三维重建技术是计算机视觉的重要技术之一&#xff0c;基于视觉的三维重建技术通过深度数据获取、预处理、点云配准与融合、生成物体表面等过程&#xff0c;把真实场景刻画成符合计算机逻辑表达的数学模型。…

数据结构—>带你深入了解单链表(基础篇)

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青-CSDN博客 前面我们学习了顺序表&#xff0c;今天我们来学习与顺序表类似的单链表 1.&#x1f3…