1. 程式人生 > 程式設計 >快來看看SpringBoot2.2發行版你能用到哪些新特性?

快來看看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=falseSpring Boot的@Configuration

類,減少了啟動時間和記憶體使用量。 proxyBeanMethods@ConfigurationSpring Framework 5.2 M1中引入的新屬性。 proxyBeanMethods也可作為一個屬性@SpringBootApplication@SpringBootConfiguration

在使用bootRunGradle或spring-boot:runMaven 在開發時啟動應用程式時,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代替。例如,要永遠不要將IntegrationFlowbean 設定為惰性,可以使用以下程式碼:

@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的ForwardedHeaderFilterserver.forward-headers-strategy=framework。開發人員應使用最適合其用例的選項。
  • ReactiveWebServerApplicationContext#getWebServerFactory
  • agentMaven外掛的屬性已重新命名為agents
  • 不贊成使用Joda的時間支援java.time
  • ApplicationHealthIndicator贊成的PingHealthIndicator,就是始終貢獻。
  • ConfigurationBeanFactoryMetadata贊成ConfigurationPropertiesBean
  • ConfigurationPropertiesBindingPostProcessor贊成@EnableConfigurationPropertiesregister方法的建構函式。
  • ConfigurationPropertiesBindingPostProcessor.VALIDATOR_BEAN_NAME已移至EnableConfigurationProperties.VALIDATOR_BEAN_NAME
  • ConfigurationPropertiesBindingPostProcessorRegistrar贊成@EnableConfigurationProperties
  • WebTestClientBuilderCustomizer已移至org.springframework.boot.test.web.reactive.server

作者個人 部落格

使用開源框架 ApiBoot 助你成為Api介面服務架構師