SpringBoot2.x入门:快速创建一个SpringBoot应用
前提
这篇文章是《SpringBoot2.x入门》专辑的 第2篇 文章,使用的 SpringBoot
版本为 2.3.1.RELEASE
, JDK
版本为 1.8
。
常规的套路会建议使用 Spring
官方提供的工具 Spring Initializr 通过指定配置创建一个 SpringBoot
项目,但是考虑到 Spring Initializr必须联网使用 ,对于项目配置和依赖的控制粒度不够精细,本文会从更一般的情况考虑,详细分析怎么通过 Maven
和 IntelliJ IDEA
(下称 IDEA
)快速创建一个 SpringBoot
应用,包括单模块的 Maven
和多模块的 Maven
应用创建。
依赖分析
必要的插件:
-
Maven
编译插件:maven-compiler-plugin
。 -
SpringBoot
封装的Maven
插件(一般必选,项目最终打包依赖到这个插件, 它的版本建议跟随选用的SpringBoot的版本 ):spring-boot-maven-plugin
。
Maven
编译插件尽可能选用高版本,以适配更高版本的 JDK
。一般会选用的基本依赖如下:
-
lombok
(可选,个人认为能提高开发效率,不过需要安装对应的插件)。 -
junit
(spring-boot-starter-test
):单元测试。 -
spring-boot-starter
:Bean
管理、配置读取等,简单理解就是IOC
容器核心组件和一些扩展。 -
spring-boot-starter-web
:基于spring-boot-starter
扩展,主要集成了SpringMVC
的功能。
多数情况下,选用spring-boot-starter-web即可,版本选取REALEASE版本即可,注意尽可能整套项目使用同一个大版本的SpringBoot。
下面例子用到的各个组件的版本如下:
序号 | 组件 | 版本号 | 描述 |
---|---|---|---|
1 | maven-compiler-plugin |
3.8.1 |
Maven 编译插件 |
2 | spring-boot-starter |
2.3.1.RELEASE |
IOC 容器核心组件 |
3 | spring-boot-maven-plugin |
2.3.1.RELEASE |
SpringBoot 封装的 Maven 插件 |
4 | lombok |
1.18.12 |
– |
创建一个单模块的SpringBoot应用
点击 IDEA
主菜单 File -> Project
进入创建新项目的界面:
选择左侧的 Maven
选项,上方下拉选择好 JDK
版本,勾选 Create from archetype
,然后选中 maven-archetype-webapp
这个骨架的 RELEASE
版本,然后点击 下一步 按钮:
输入项目的 GAV
,选定项目的磁盘目录,然后点击 下一步 按钮:
选定 Maven
的安装路径、配置文件和本地仓库,配置好相应的属性,最后点击完成即可:
创建出来的是一个标准的 Maven
项目,它的结构如下:
spring-boot-guide - src - main - webapp - web.xml - pom.xml
一般可以直接删除 src/main/webapp
目录,在 pom.xml
中增加对应的依赖,最终的 pom.xml
如下:
4.0.0 club.throwable spring-boot-guide 1.0-SNAPSHOT jar spring-boot-guide UTF-8 1.8 1.8 3.8.1 1.18.12 2.3.1.RELEASE org.springframework.boot spring-boot-dependencies ${spring.boot.version} import pom org.projectlombok lombok ${lombok.version} provided org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test spring-boot-guide org.apache.maven.plugins maven-compiler-plugin ${maven.compiler.plugin.version} ${maven.compiler.target ${project.build.sourceEncoding} org.springframework.boot spring-boot-maven-plugin ${spring.boot.version} repackage
有依赖版本变动,只需要直接修改 properties
元素中对应的版本号即可。在 src/main
下新建启动类 java/club/throwable/App.java
:
import lombok.extern.slf4j.Slf4j; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @Slf4j @SpringBootApplication public class App implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(App.class, args); } @Override public void run(String... args) throws Exception { log.info("Hello SpringBoot!"); } }
启动 App
中的 main
函数后输出如下:
spring-boot-starter
模块引入的只是核心容器组件,并没有集成像 Tomcat
这样的 Servlet
容器,启动后不会挂起主线程,所以执行完 CommandLineRunner
中的逻辑就会自行退出主线程。
创建一个多模块的SpringBoot应用
多模块应用的创建基于单模块应用,准确来说就是在一个创建完的单模块应用中添加新的模块( New Module
)。在原来的根项目 spring-boot-guide
右键弹出菜单中选择新建模块:
后续的步骤与上一小节的过程完全相同,不过定义的模块名称必须和根项目的名称不相同,这里定义为 ch0-dependency
,然后调整父 pom.xml
和子 pom.xml
:
-
spring-boot-guide -> pom.xml
4.0.0 club.throwable spring-boot-guide 1.0-SNAPSHOT ch0-dependency pom spring-boot-guide UTF-8 1.8 1.8 3.8.1 1.18.12 2.3.1.RELEASE org.springframework.boot spring-boot-dependencies ${spring.boot.version} import pom org.projectlombok lombok ${lombok.version} provided org.springframework.boot spring-boot-starter-test test spring-boot-guide org.apache.maven.plugins maven-compiler-plugin ${maven.compiler.plugin.version} ${maven.compiler.target ${project.build.sourceEncoding}
-
spring-boot-guide/ch0-dependency -> pom.xml
4.0.0 club.throwable spring-boot-guide 1.0-SNAPSHOT ch0-dependency 1.0-SNAPSHOT jar ch0-dependency org.springframework.boot spring-boot-starter ch0-dependency org.springframework.boot spring-boot-maven-plugin ${spring.boot.version} repackage
注意:
-
spring-boot-maven-plugin
一般情况下只需配置在需要打包的模块中,一般父模块是全局管理的模块,不需要全局定义此插件。 -
maven-compiler-plugin
可以配置在父模块中,让所有子模块都应用此插件。 -
spring-boot-starter-test
和lombok
可以在父模块的dependencies
元素中添加,相当于所有子模块都引入了这两个依赖。
父模块中的 spring-boot-guide
的 src
模块需要丢弃,可以直接剪切到 ch0-dependency
子模块中,如下:
后面再添加其他新的模块,直接重复上述的步骤即可。
代码仓库
这里给出本文搭建的一个多模块的 SpringBoot
应用的仓库地址(持续更新):
(本文完 c-2-d e-a-20200701 8:39 AM)