前提
本文档将帮助您把应用程序迁移到 Spring Boot 2.0。
在你开始之前
首先,Spring Boot 2.0需要Java 8或更高版本。Java 6 和 7 不再受支持。
在 Spring Boot 2.0 中,许多配置属性被重新命名/删除,开发人员需要更新application.properties/ application.yml相应的配置。为了帮助你,Spring Boot 发布了一个新spring-boot-properties-migrator模块。一旦作为依赖添加到项目中,这不仅将分析应用程序的环境并在启动时打印诊断信息,而且还会在运行时为您暂时迁移属性。这是您的应用程序迁移期间必须具备的条件:
1<dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-properties-migrator</artifactId> 4</dependency>
注意:完成迁移后,请确保从项目的依赖关系中删除此模块。
构建您的 Spring Boot 应用程序
Spring Boot Maven 插件
如今暴露为属性的插件配置属性都以一个spring-boot前缀开始,以保持一致性并避免与其他插件发生冲突。
例如,以下命令prod使用命令行启用配置文件
1mvn spring-boot:run -Dspring-boot.run.profiles=prod
Surefire 默认值
自定义包含/排除模式已与最新的 Surefire 默认设置保持一致。如果您依赖我们的,请相应地更新您的插件配置。他们曾经如下:
1<plugin> 2 <groupId>org.apache.maven.plugins</groupId> 3 <artifactId>maven-surefire-plugin</artifactId> 4 <configuration> 5 <includes> 6 <include>**/*Tests.java</include> 7 <include>**/*Test.java</include> 8 </includes> 9 <excludes> 10 <exclude>**/Abstract*.java</exclude> 11 </excludes> 12 </configuration> 13</plugin>
PS: 如果您使用 JUnit 5,则应将 Surefire 降级到 2.19.1。该**/*Tests.java版本不包含此模式,因此如果您依赖该模式,请确保将其添加到您的配置中。
Spring Boot Gradle 插件
Spring Boot 的 Gradle 插件在很大程度上已被重写,以实现许多重大改进。您可以在其参考文献和API文档中阅读关于插件功能的更多信息。
依赖管理
Spring Boot 的 Gradle 插件不再自动应用依赖管理插件。相反,Spring Boot 的插件现在可以通过导入正确版本的spring-boot-dependencies BOM 来应用依赖管理插件。这使您可以更好地控制配置依赖性管理的方式和时间。
对于大多数使用依赖管理插件的应用程序来说就足够了:
1apply plugin: 'org.springframework.boot' 2apply plugin: 'io.spring.dependency-management' // <-- add this to your build.gradle
注意:依赖管理插件仍然是 spring-boot-gradle-plugin 的传递依赖项,所以不需要在 buildscript 配置中将其列为类路径依赖项。
建立可执行的 Jars 和 Wars
该bootRepackage任务已被替换bootJar,并bootWar分别建立可执行的 Jars 和 Wars 的任务。jar和war任务不再参与。
配置更新
BootRun,BootJar和BootWar任务现在都使用mainClassName的属性来配置主类的名称。这使得三个特定于引导的任务相互一致,并将其与 Gradle 自己的应用程序插件进行对齐。
Spring Boot 特性
默认代理策略
Spring Boot 默认使用 CGLIB 代理,包括 AOP 支持。如果你需要基于代理的代理,你需要设置spring.aop.proxy-target-class为false。
SpringApplication
Web 环境
Spring Boot 应用程序现在可以在更多模式下运行,因此spring.main.web-environment现在不推荐使用属性来支持spring.main.web-application-type更多的控制。
如果您想确保应用程序不启动 Web 服务器,则必须将该属性更改为:
1spring.main.web-application-type=none
注意:还有一个setWebApplicationType上SpringApplication,如果你想这样做编程。
Spring Boot 应用程序事件更改
我们已经添加了一个新事件ApplicationStartedEvent。 ApplicationStartedEvent在上下文刷新之后但在任何应用程序和命令行参数被调用之前发送。 ApplicationReadyEvent在任何应用程序和命令行参数被调用后发送。它表示应用程序已准备好为请求提供服务。
请参阅更新的参考文档。
Banner
在我们限制 Spring Boot 使用的根名称空间的数量的过程中,与标志相关的属性已被重定位到spring.banner。
外部化配置
轻松的绑定
有关宽松绑定的规则已经收紧。我们假设一个现有的acme.my-project.my-name属性:
-
所有前缀必须是 kebab格式(小写,连字符分隔)acme.myProject或acme.my_project无效 - 您必须acme.my-project在此处使用。
-
属性名称可以使用 kebab-case(my-name),camel