1.升級版本的選擇
首先去spring的官網看一下最新的版本與版本之間的依賴
可以看到SpringBoot 2版本的穩定版有:2.0.8跟2.1.2
而SpringCloud的穩定版本為Finchley.SR2
然后我們看一看兩者的依賴關系:
經過對比,最終選定版本:SpringBoot2.0.8,SpringCloud Finchley.SR2
2.版本升級的注意事項
2.1.默認連接池的改變
SpringBoot2的默認連接池為HikariCP,這也是本次升級的原因,HikariCP專注於連接池,其性能是其他連接池的n多倍。
更多信息,請看:http://blog.didispace.com/Springboot-2-0-HikariCP-default-reason/
配置數據庫連接池(多數據庫配置):
@Primary
@Bean(name = "onlineDataSource")
@ConfigurationProperties(prefix = "spring.datasource.online")
public DataSource getDateSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "sxDataSource")
@ConfigurationProperties(prefix = "spring.datasource.sandbox")
public DataSource getDateSource1() {
return DataSourceBuilder.create().build();
}
詳細的可以參考:https://www.cnblogs.com/hongdada/p/9360155.html
2.2.其他關聯版本的改變
這里有一個坑點
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
這兩個依賴在
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
這個里面沒辦法拉取相關版本依賴,無奈只能手動規定版本
而spring-cloud-starter-eureka的版本只能到1.4.6,點進去其父依賴為spring-cloud-netflix也為1.4.6
但是在springcloud的Finchley.SR2中的依賴應該為2.0.2
不過在修改版本后,其他的依賴會默認覆蓋為最新版,因此也沒有多大影響
2.3.@EnableFeignClients注解報錯
在新版本springcloud中新增了一個組件:spring-cloud-openfeign
Spring Cloud對Feign的支持由org.springframework.cloud:spring-cloud-netflix-core移到org.springframework.cloud:spring-cloud-openfeign-core
因此刪除報錯的包,重新導入即可。
2.4.SpringApplicationBuilder中的web(boolean)已過時
我們刪除,看自動提示,已經修改為:WebApplicationType 枚舉類型
看一下官網給的說明:
更多:https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/WebApplicationType.html
具體如何選擇呢?我們呢點進方法里面看一下:
在點進去看一下
因此這里我們選擇:WebApplicationType.SERVLET
2.5.org.hibernate.validator.constraints下一系列注解過時問題
spring-boot-starter-web.jar 中就包含了hibernate-validator
spring boot 2版本包含hibernate-validator版本是6.0.9.Final
刪除過時包后,自動導入javax.validation.constraints.下的對應注解即可。
2.6.配置文件更改
2.6.1.redis配置的改變
本來是檢測使用的環境問題的,就發現redis的配置標紅了
點擊查看,搜索后發現已經修改了,多了個前綴jedis
於是將配置文件修改:
現在在點進去看一下:
到這里,max-wait與timeout報錯的原因也找到了
傳值的類型進行了修改,修改為了java.time.Duration 於是加上時間單位
原因:SpringBoot2版本使用spring-boot-starter-data-redis代替了原來的spring-boot-starter-redis
更多詳情:https://blog.csdn.net/sy793314598/article/details/80719224
2.6.3.server配置更改
這里替換為新的就可以了
2.6.3.management配置修改
1.management.context-path遷移
management.context-path 這個修改為新的路徑
【補一個坑】關於訪問路徑的問題
2.0之前默認是 /
於是我們加上 management.context-path:/actuator 設置路徑為 /actuator
自定義其他路徑就更改management.context-path的值
2.0默認是 /actuator (endpoints.web.base-path)
但是新增了endpoints.web.base-path(默認值為/actuator)屬性
將context-path的位置遷移到了server.servlet.context-path,但是也做了保留
於是當兩個屬性同時使用時,context-path的優先級高於base-path
【補一個坑】
2.關於management.security 下所有配置棄用
在1.5.x版本中通過management.security.enabled=false來暴露所有端點
具體配置類:org.springframework.boot.actuate.autoconfigure.ManagementServerProperties$Security
切換SpringBoot版本為2.x 找到ManagementServerProperties,發現Security內部類已經被刪除
暴露端點的新方式:
方式1:
# 啟用端點 env
management.endpoint.env.enabled=true
# 暴露端點 env 配置多個,隔開
management.endpoints.web.exposure.include=env
方式2:
方式1中的暴露方式需要一個一個去開啟需要暴露的端點,方式2直接開啟和暴露所有端點
management.endpoints.web.exposure.include=*
注意在使用Http訪問端點時,需要加上默認/actuator 前綴
原文:https://blog.csdn.net/qq_27385301/article/details/82899303
【補一個坑】在yaml文件中,* 號有特殊含義,所以得用雙引號引起來,否則沒辦法啟服務,會自動退出。
2.6.4.更多配置修改
可以看一下這個json文件,里面都一一列舉了的。
2.7.jdbcUrl is required with driverClassName
在Springboot2.0版本,配置多數據源的時候,會報錯
jdbcUrl is required with driverClassName
解決辦法如下:
1.在配置文件中使用spring.datasource.jdbc-url,而不是通常使用的spring.datasource.url。
2.在數據源配置時使用DataSourceProperties方法。
原文出處:https://my.oschina.net/chinesedragon/blog/1647846
2.8.敬請期待
3.項目遷移小技巧
在 Spring Boot 2.0 中,許多配置屬性已被重命名或被刪除,為了方便升級,Spring Boot 發布了一個新的 spring-boot-properties-migrator 模塊。
只要將其作為依賴添加到項目中,它不僅會分析應用程序的環境並在啟動時打印診斷信息,而且還會在運行時階段為項目臨時將屬性遷移至新的配置方式。
效果如圖:
此模塊雖然能臨時解決我們的問題,但是也不是長久之計,我們在控制台查看到所需要遷移的屬性后,應該手動休整
在項目屬性修改完成后應當移除此模塊