快來看看SpringBoot2.2發行版你能用到哪些新特性?
SpringBoot2.2新特性的使用文章請訪問作者部落格 blog.yuqiyu.com
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
。
作者個人 部落格
使用開源框架 ApiBoot 助你成為Api介面服務架構師