SpringBoot2.x升級后的變化


SpringBoot 2.x較之前的版本有不少的改動,以下記錄在實際運用中已經遇到的一些問題:

注意:以下差異基於的SpringBoot兩個版本分別為 1.5.9 和 2.0.2 。

1、context-path配置修改

SpringBoot 1.5.9 在properties文件中配置 context-path 的方式如下所示:

server.context-path = XXX

而在SpringBoot 2.0.2中其配置方式變成了

server.servlet.context-path = XXX

這樣的改變使 context-path 的歸屬更加明確,與之一同更改的還有其他多個參數。

2、java時間類型通過Jackson轉換后輸出格式的變化

使用 SpringMVC 時,如果 Controller 中的方法使用 @ResponseBody 標注的話,則返回結果一般會使用 jackson 將返回結果轉換為 json (並非絕對,如果沒有引入 jackson 相關jar包而引入了 gson 相關jar包,則轉換 json 的操作就由 gson 來完成,以下討論只適用於 jackson 操作)。

在使用SpringBoot 1.5.9的時候,如果未指定具體的時間格式的話,通過 @ResponseBody 返回帶有 java時間類型的結果時,默認會將 java 時間類型( java.util.Date、java.util.Calendar、java.sql.Date、java.sql.Timestamp 等)以時間戳(當前時間的毫秒數)返回,而在SpringBoot 2.0.2則返回格式是經過了格式化的: yyyy-mm-ddTHH:mi:ss。通過對比發現,在SpringBoot 2.0.2自動配置 jackson 時添加了如下配置:

其重點是 SerializationFeature.WRITE_DATES_AS_TIMESTAMPS 被設置為了 false,即輸出時間格式不以時間戳形式展示,其最終影響的是 jackson 中的 ObjectMapper 對象。

如果想要繼續返回時間戳格式的數據,則只需要在properties配置文件中添加如下配置即可:

spring.jackson.serialization.write-dates-as-timestamps=true

注意:SpringBoot 2.0.2 對 java 時間格式的影響對 java8 中新增的 java.time.LocalDateTime 並沒有效果,當設置 spring.jackson.serialization.write-dates-as-timestamps=true 時,java.time.LocalDateTime會被轉換成一個形如 [2018,5,31,17,58,35] 的數組,而非毫秒數。引用jackson-modules-java8中的描述:

LocalDate, LocalTime, LocalDateTime, and OffsetTime, which cannot portably be converted to timestamps and are instead represented as arrays when WRITE_DATES_AS_TIMESTAMPS is enabled.

 

3、@ConfigurationProperties配置的限制

SpringBoot 中可以使用 @ConfigurationProperties 將一個實體類轉變為可配置的類(在properties文件中可以直接配置對應參數的值,如果使用IDE的話,會自動提示)。在 SpringBoot 1.5.9 中設置 @ConfigurationProperties 的 prefix 屬性時,使用駝峰命名(如eclipseLink)不會有任何問題,但在 Spring Boot 2.x 啟動時會報錯:

InvalidConfigurationPropertyNameException: Configuration property name '********' is not valid.

當使用eclipse-link時就不會有任何問題。

4、多數據源配置問題

Spring Boot 2.x中如果配置了多個數據源的話,其中有一項配置是需要注意的:spring.datasource.url!這樣的配置有可能是有問題的,需要將其設置成 spring.datasource.jdbc-url!

 

 

參考文章:https://www.toutiao.com/i6647092124950987278/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM