有道无术,术尚可求,有术无道,止于术。
本系列Spring Boot版本3.0.3
源码地址:https://gitee.com/pearl-organization/study-spring-boot3
文章目录
- 前言
- 安装JDK 17
- 创建Spring Boot 项目
- 方式1:网页在线生成
- 方式2:使用IDEA
- 项目结构
- Maven Wrapper
- pom.xml
- java目录
- resources目录
- test目录
前言
本篇主要介绍使用spring initializr
快速创建一个Spring Boot 3.0
项目以及工程结构说明。
安装JDK 17
Oracle JDK 17 发布地址
Oracle JDK 17 下载地址
OpenJDK 17 发布地址
OpenJDK 17 下载地址
Spring Boot 3.0
需要Java 17
作为最低版本。如果当前正在使用Java 8
或Java 11
,在开发Spring Boot 3.0
应用程序之前,需要升级JDK
。
相信很多人现在都还是用的JDK 8
,使用Spring Boot 3.0
的话,还是很有必要去熟悉每个版本JAVA
的增强特性,后续会出专栏详细介绍每个版本的变化,而Java 17
的相对上一版本的JEP
(JDK增强提案)如下:
306: Restore Always-Strict Floating-Point Semantics # 恢复始终严格模式(Always-Strict)的浮点语义
356: Enhanced Pseudo-Random Number Generators # 增强型伪随机数生成器
382: New macOS Rendering Pipeline # 新增macOS渲染管道
391: macOS/AArch64 Port # 支持将JDK移植到macOS或AArch64
398: Deprecate the Applet API for Removal # 移除过时的Applet API
403: Strongly Encapsulate JDK Internals # 强封装JDK内部API
406: Pattern Matching for switch (Preview) # switch 匹配模式(预览版本)
407: Remove RMI Activation # 移除RMI(远程方法调用)激活机制
409: Sealed Classes # 密封类
410: Remove the Experimental AOT and JIT Compiler # 移除实验性AOT和JIT编译器
411: Deprecate the Security Manager for Removal # 弃用待移除的安全管理器(Security Manager)
412: Foreign Function & Memory API (Incubator) # 外部函数和内存API(孵化器)孵化阶段
414: Vector API (Second Incubator) # Vector API第二孵化阶段
415: Context-Specific Deserialization Filters #上下文特定的反序列化过滤器
这里就不介绍下载安装的方法了,相信懂的都懂😛😛😛
创建Spring Boot 项目
Spring Initializr
是官方提供的一个用来初始化一个Spring boot
项目的工具,不仅完美支持IDEA
和Eclipse
,而且能自动生成启动类和单元测试代码,给开发人员带来极大的便利。
方式1:网页在线生成
打开Spring Initializr官方页面,可以在网页在线生成Spring Boot
项目代码,整个页面主要分三大部分:
在最左边,填写项目信息,说明如下:
- Project:项目构建工具,可以选择
Gradle
、Maven
,Spring
自己所有的项目都是使用Gradle
- Language:选择开发语言
- Spring Boot:选择
Spring Boot
版本 - Project Metadata:项目信息
- Group:项目组织
- Artifact:项目唯一标识符
- Name:项目名称
- Description:项目描述
- Package name:包名
- Packaging:打包方式
- Java:
JDK
版本
最右边点击添加依赖可以选择项目需要的依赖包:
在最下方,分别是生成、预览、分享功能,点击生成后,代码自动下载到本地,然后使用开发工具导入就可以了~
方式2:使用IDEA
IDEA
和Eclipse
继集成了Spring Initializr
,可以直接在开发工具中创建工程,一般都是使用该方式。
首先创建一个工程或模块:
选择Spring Initializr
来初始化项目:
然后填写项目信息,比如模块名、构建工具等:
接着下一步选择Spring Boot
版本、添加依赖:
点击Next
,核对模块名、模块位置是否正确:
点击Finish
,很快项目就自动创建好了:
项目结构
接下来,我们了解下生成项目的各个目录和文件。
├── .mvn
│ └── wrapper
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
├── main
│ ├── java
│ └── resources
└── test
├── java
└── resources
Maven Wrapper
安装好Maven
后,可以使用mvn
命令进行编译打包,项目中直接使用当前系统的Maven
环境,这种方式存在一个问题,如果没有安装Maven
,或者下载别人的项目和自身本地Maven
环境版本不兼容时,就得重新安装Maven
。
为了解决上述问题,每个项目可以指定其本身所依赖的独立Maven
环境,简单来说,就是给该项目装一个单独的Maven
,只作用于本项目,这就是Maven Wrapper
。
.mvn
、 mvnw
、mvnw.cmd
这几个文件都属于Maven Wrapper
。.mvn
存放Maven Wrapper
安装文件、配置;mvnw
、mvnw.cmd
是Linux
和Windows
系统执行相关Maven
命令的脚本。
一般也用不到,所以可以直接删除这几个文件:
pom.xml
pom.xml
应该都比较熟悉了,Maven
配置文件,用以描述项目的各种信息,主要看下Spring Boot
生成的相关内容。
首先是parent
,继承了Spring Boot
提供的父 POM
,在spring-boot-starter-parent
中又继承了spring-boot-dependencies
。在spring-boot-dependencies
中,定义了很多依赖包的版本。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
接着是dependencies
声明项目本身所需要的依赖,因为spring-boot-dependencies
中已定义好很多版本,所以常用的不需要写版本号,在实际开发时,尽量使用Spring Boot
已定义好的版本,因为这些是进行了版本兼容测试的。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
build
构建模块中,添加了官方提供的Maven
插件spring-boot-maven-plugin
,提供了构建Docker
镜像、打包为可执行JAR
包等功能。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
相关命令如下所示:
java目录
java
目录存放源代码文件:
自动生成了创建了一个启动类,该类是程序启动的入口,运行main
方法程序启动,@SpringBootApplication
是启动类核心注解,标记当前类为启动类,启动时,会从该注解中获取很多当前程序信息,后面会进行源码解读。
@SpringBootApplication
public class SpringBoot3BaseDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBoot3BaseDemoApplication.class, args);
}
}
resources目录
resources
目录来存放一些资源文件,其中最重要的是application.properties
,所有Spring Boot
应用的配置都写在这里,static
存放静态资源,比如css\js
等,templates
用于存放模板文件。
test目录
test
是进行单元测试的目录