1. 引言
Spring Boot
是基于 Spring Framework
- 轻量级、快速开发的框架
- 简化企业 Java 应用开发
- 开箱即用配置
- 内嵌式 WEB 服务器
- 约定大于配置等特性
- 使得 构建和部署Spring 变得更加简单
Spring Boot
是对于开发人员
- 通过注解驱动、自动配置方式提供开发效率
- 支持微服务架构,并提供了服务的生态系统
官方地址: https://spirng.io/
2. Spring Boot 2 升级到 Spring Boot 3 新特性
- 前置条件:
JDK 17
或 更高版本 (JDK 21 分代 ZGC 和 虚拟线程 -> 为云原生而做,为了打败 Go 语言)Maven 3.5 +
或Gradle 7.5 +
1.函数式接口
Spring MVC 5.2
以后我们使用函数式的方式, 定义 Web 的请求处理流程
- 旧: @Controller + @RequestMapping 耦合式(路由、业务耦合)
- 新:函数式 Web、分离式(路由、业务分离)
2.Problemdetails
- 遵循
RFC7807
规范: https://www.rfc-editor.org/rfc/rfc7807 - 说明:
RFC7807
定义了一种用于 HTTP 响应传递错误信息的通用格式。Problemdetails 包含有关发生错误的详细信息,如:错误类型、状态码、错误标题、详细描述等,这样的结构化错误信息有助于客户端和开发人员更好的理解处理发生的问题。
3.支持 AOT
AOT
: 提前编译 (Ahead-of-Time), 程序执行前,全部被编译成机器码。JIT
:即时编译 (Just-in-Time), 程序边编译边运行。
4.支持 GraalVM
- 地址:https://www.graalvm.org/
- 说明:GraalVM 是一个高性能的 JDK, 旨在加速用 java 和 其他 JVM 语言编写的应用程序的执行, 同时还提供 JavaScript、Python 和 许多其他流行语言的运行时
- 在 HotSpot JVM 使用上了 GraaI 即时编译器(JIT)
- 作为预先编译(AOT) 的本地可以执行文件运行(本地镜像)
- 多语言的使用能力使得单个应用程序中混合多种语言编程,同时消除了外部调用语音脚本的成本: .c、 .cpp、.go、.py、.js、.java 即时编译成机器码。
3. Spring Boot Initializr 初始化
- 使用
IDEA
进行初始化项目, 设置 Server URL:https://start.aliyun.com/
阿里云应用脚手架地址,因为使用 Spring 官网已经不支持 JDK8.
- 选择 2.6.3 稳定版, 选择相关依赖包 Web。
- 初始化项目后,目录结构。
- 包引入的相关依赖
- 修改: 版本号修改为
1.0.0-SNAPSHOT
- 添加: 配置
aliyun maven 仓库
- 修改: 版本号修改为
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.calvin</groupId>
<artifactId>spring-boot-example-01</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>spring-boot-example-01</name>
<description>spring-boot-example-01</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.13</version>
</parent>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.6.13</spring-boot.version>
</properties>
<repositories>
<!-- 使用阿里云仓库 -->
<repository>
<id>central</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<layout>default</layout>
<!-- 开启使用发布版的构建下载 -->
<releases>
<enabled>true</enabled>
</releases>
<!-- 不开启使用快照版的构建下载 -->
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- spring-boot-dependencies 专门管理相关的版本依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<!-- 打包跳过测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.calvin.springboot.example.AppExample01</mainClass>
<!-- 没有主清单属性,需要注释以下代码-->
<!-- <skip>true</skip> -->
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>