Spring Framework升級
SpringBoot2.2
的底層Spring Framework
版本升級為5.2
。
JMX默認禁用
默認情況下不再啟用JMX。 可以使用配置屬性spring.jmx.enabled = true啟用此功能。 如果您使用IDE功能來管理應用程序,則可能還要在該位置啟用該標志。
Java 13支持
Spring Boot 2.2增加了對Java 13的支持。還支持Java 8和11。
性能提升
通過使用proxyBeanMethods=false
Spring Boot的@Configuration
類,減少了啟動時間和內存使用量。 proxyBeanMethods
是@Configuration
Spring Framework 5.2 M1中引入的新屬性。 proxyBeanMethods
也可作為一個屬性@SpringBootApplication
和@SpringBootConfiguration
。
在使用bootRun
Gradle或spring-boot:run
Maven 在開發時啟動應用程序時,JVM將配置有標志(-Xverify:none
和-XX:TieredStopAtLevel=1
)以對其進行優化以減少啟動時間。在JDK 13上運行時,-Xverify:none
未指定,因為已棄用。
此版本中還進行了其他一些性能改進:
- 綁定大量配置屬性所需的時間已大大減少
- 當Spring Boot
PersistenceUnit
通過掃描JPA實體完全准備一個時,由於它是冗余的,因此Hibernate自己的實體掃描已被禁用 - 自動配置中的注入點已經過改進,僅適用於必須創建bean的情況
- 現在僅在啟用和公開端點的情況下(通過JMX或HTTP)創建與Actuator端點相關的Bean。
- 編解碼器自動配置的條件已得到改善,以便在不再使用編解碼器時不再對其進行配置
- Tomcat的MBean注冊表默認情況下處於禁用狀態,從而將Tomcat的內存占用量減少了大約2MB
延遲初始化
現在可以通過該spring.main.lazy-initialization
屬性啟用全局延遲初始化以減少啟動時間。請注意,使用該功能可能需要付出一定的成本或者代價:
- 在進行任何延遲的初始化時,HTTP請求的處理可能需要更長的時間
- 現在,通常不會在啟動時發生故障,直到以后
通過使用注釋各自的定義,各個bean可以選擇退出延遲初始化@Lazy(false)
。如果無法@Lazy(false)
選擇退出延遲初始化,LazyInitializationExcludeFilter
則可以使用Bean代替。例如,要永遠不要將IntegrationFlow
bean 設置為惰性,可以使用以下代碼:
@Bean static LazyInitializationExcludeFilter integrationLazyInitExcludeFilter() { return LazyInitializationExcludeFilter.forBeanTypes(IntegrationFlow.class); }
JUnit 5
spring-boot-starter-test
現在默認提供JUnit 5。默認情況下,包括JUnit 5的老式引擎以支持現有的基於JUnit 4的測試類,以便您可以在准備好遷移到JUnit 5時進行遷移。也可以在同一模塊中混合使用基於JUnit 4和基於JUnit 5的測試類。這使您可以根據需要逐步遷移到JUnit 5。
請注意,JUnit 4的Maven Surefire插件不支持該listener
屬性。如果您具有類似於以下內容的Maven配置:
<configuration> <properties> <property> <name>listener</name> <value>com.example.CustomRunListener</value> </property> </properties> </configuration>
不能使用,junit-vintage-engine
而需要顯式回滾到JUnit 4:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> </exclusion> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> <exclusion> <groupId>org.mockito</groupId> <artifactId>mockito-junit-jupiter</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
DataSource 健康監控
該DataSource
健康指標包含一個額外的validationQuery
與反對使用的驗證查詢屬性DataSource
。同樣,該hello
屬性提供的查詢結果已重命名為result
。
Freemarker模板配置
此版本更改了Freemarker模板的默認模板文件擴展名。這可以使Spring Boot與Web應用程序的安全配置默認值保持一致。升級時,請將現有模板從重命名*.ftl
為*.ftlh
。
DevTools配置目錄
現在,全局DevTools設置的首選位置是~/.config/spring-boot
。可以使用以下任何文件:
spring-boot-devtools.properties
spring-boot-devtools.yaml
spring-boot-devtools.yml
@ConfigurationPropertiesScan
@ConfigurationProperties
現在可以通過類路徑掃描找到帶注釋的類,以替代使用@EnableConfigurationProperties
或@Component
。添加@ConfigurationPropertiesScan
到您的應用程序以啟用掃描。
在Spring Boot 2.2.0中默認啟用了配置屬性掃描,但是從Spring Boot 2.2.1開始,您必須使用進行選擇
@ConfigurationPropertiesScan
。
@ConstructorBinding
配置屬性現在支持基於構造函數的綁定,該綁定允許帶@ConfigurationProperties
注釋的類不可變。可以通過使用注釋一個@ConfigurationProperties
類或其構造函數之一來啟用基於構造函數的綁定@ConstructorBinding
。現在可以在配置屬性綁定提供的構造函數參數上使用諸如@DefaultValue
和的注釋@DateTimeFormat
。
Spring Boot 2.2中的棄用
- 該
logging.file
屬性已重命名為logging.file.name
。 - 該
logging.path
屬性已重命名為logging.file.path
。 server.connection-timeout
不建議使用該屬性,而應使用服務器特定的屬性,因為它們的行為並不完全相同。server.use-forward-headers
不贊成使用該財產server.forward-headers-strategy
; 以前server.use-forward-headers=true
會使用Web服務器的本機支持。現在,您可以使用實現相同的功能server.forward-headers-strategy=native
。由於每個服務器都有特定的行為,因此我們現在提供一種替代方法,該替代方法依賴於Spring的ForwardedHeaderFilter
:server.forward-headers-strategy=framework
。開發人員應使用最適合其用例的選項。ReactiveWebServerApplicationContext#getWebServerFactory
。agent
Maven插件的屬性已重命名為agents
。- 不贊成使用Joda的時間支持
java.time
。 ApplicationHealthIndicator
贊成的PingHealthIndicator
,就是始終貢獻。ConfigurationBeanFactoryMetadata
贊成ConfigurationPropertiesBean
。ConfigurationPropertiesBindingPostProcessor
贊成@EnableConfigurationProperties
或register
方法的構造函數。ConfigurationPropertiesBindingPostProcessor.VALIDATOR_BEAN_NAME
已移至EnableConfigurationProperties.VALIDATOR_BEAN_NAME
。ConfigurationPropertiesBindingPostProcessorRegistrar
贊成@EnableConfigurationProperties
。WebTestClientBuilderCustomizer
已移至org.springframework.boot.test.web.reactive.server
。
鏈接:https://www.jianshu.com/p/c3d00a8e6598