05.如何使用Spring Boot - Maven

本节将更详细地介绍如何使用 Spring Boot。 它涵盖了诸如构建系统、自动配置以及如何运行应用程序等内容。 此外,还介绍了一些 Spring Boot 的最佳实践。 尽管 Spring Boot 没有什么特别之处(它只是您可以使用的另一个库) ,但是有一些建议可以使您的开发过程更容易一些 。

如果你之前没有使用过 Spring Boot,那么在看这部分内容之前,你应该先阅读下入门指南

构建系统

强烈建议您选择一个支持依赖管理的构建系统,该系统可以使用发布到 Maven 中央库的依赖。 我们建议你选择 Maven 或 Gradle。Spring Boot 也支持其他构建系统,例如 Ant,但是它们并没有得到特别好的支持。

因为公司目前只用Maven,所以Gradle和Ant的方式不做翻译了

依赖管理

Spring Boot 的每个版本都提供了它所支持的经过精心策划的依赖项列表。 实际上,您不需要为构建配置中的任何依赖项提供版本信息,因为 Spring Boot 已经为您管理了这些依赖项。 当您升级 Spring Boot 时,这些依赖关系也会随之升级。

如果需要的话,您仍然可以指定一个版本并覆盖 Spring Boot 提供的版本。

这个精选列表包含所有可以用于 Spring Boot 的 Spring 模块,以及第三方库的精选列表。 该列表是一个可用于 Maven 和 Gradle的标准的材料账单(spring-boot-dependencies)。

Spring Boot 的每个版本都与 Spring 框架的基本版本高度关联, 建议您不要指定它的版本

Maven

Maven 用户可以通过继承 spring-boot-starter-parent 项目来获得合理的默认值。 父项目具有以下特点:

  • 默认的编译级别是 Java 1.8
  • 编码格式为 UTF-8
  • spring-boot-dependencies pom 继承而来的依赖管理部分,用于管理公共依赖项的版本。 这种依赖项管理允许您在自己的 pom 中引入依赖时忽略<version>标记。
  • 带有 repackage 执行 id 的 repackage 目标的执行
  • 可感知的资源过滤
  • 合理的插件配置( exec plugin, Git commit ID, shade
  • application.propertiesapplication.yml 进行合理的资源筛选,包括特定的配置文件(例如,application-dev.propertiesapplication-dev.yml )

注意,因为 application.propertiesapplication.yml 文件接受 Spring 风格的占位符( ${…} ) ,所以 Maven 过滤标识被更改为使用 @..@ 占位符 (可以通过设置一个名为 resource.delimiter的 Maven 属性来覆盖该属性)。

继承 Starter 父类

若要将项目配置为从 spring-boot-starter-parent 继承,请将 parent 设置如下:

1
2
3
4
5
6
<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
</parent>

您应该只需要通过这个依赖指定 Spring Boot 版本号。如果导入其他 starter 依赖,您可以省略版本号

使用该设置,还可以通过重写自己项目中的属性来重写单个依赖项。 例如,要升级到另一个 Spring Data 版本,可以在 pom.xml 中添加以下内容:

1
2
3
<properties>
<spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>

检查spring-boot-dependencies pom文件获取受支持的属性列表

使用没有父 POM 的 Spring Boot

并不是每个人都喜欢继承 spring-boot-starter-parent POM, 您可能需要使用自己的企业标准父级,或者您可能更喜欢显式声明所有 Maven 配置。

如果你不想使用 spring-boot-starter-parent ,你可以通过 scope=import 的方式来从依赖管理(不是插件管理)中受益,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

如上所述,前面的示例程序不允许使用属性重写单个依赖项。 要实现相同的结果,您需要在 spring-boot-dependencies 依赖之前在项目的 dependencyManagement 中添加一个条目。 例如,要升级到另一个 Spring Data 发布系列,可以在 pom.xml 中添加以下元素:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<dependencyManagement>
<dependencies>
<!-- Override Spring Data release train provided by Spring Boot -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-releasetrain</artifactId>
<version>Fowler-SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

在前面的例子中,我们指定了一个BOM,任务依赖类型都可以以相同的方式来重写

使用 Spring Boot Maven 插件

Spring Boot 包含一个 Maven 插件,可以将项目打包为一个可执行 jar。 如果你想使用这个插件,可以把它添加到你的插件部分,如下面的例子所示:

1
2
3
4
5
6
7
8
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

如果你使用 Spring Boot starter 父 pom,你只需要添加插件,没有必要配置它,除非您想要更改在父级中定义的设置