spring cloud1.X 升級 spring cloud 2.X實戰

語言: CN / TW / HK

一.簡述

公司內部使用的springboot版本是3年前1.0版本的。今年需要擴充套件其他技術棧和整合CMDB,發現老版本有很多限制,包括第三方開源的一些框架支援也不是很友好,因此本人蔘與升級和構建吸取了一些經驗,生產環境已經運行了一段時間,因此做個分享和學習。

本文只針對應用服務做升級。如果框架用Springcloud的全家桶的關於配置中心(config-server)和註冊中心(Eureka-server)本文不詳細講解。因為我們全家桶的配置中心已經棄用了。而且升級之後註冊中心老版本不受影響,當然後續也會升級。

二.升級版本(springboot & springcloud)

springbootd對應的springcloud版本參考: https://start.spring.io/actuator/info

升級前的版本:
springboot: 1.4.0.RELEASE 
springcloud: Brixton.SR5
升級後的版本(比較新):
springboot: 2.3.7.RELEASE
springcloud: Hoxton.SR9

三 .相關配置修改

3.1.POM檔案修改

專案關於包的依賴升級之後會發現以前有些基本棄用了,程式碼需要根據包的依賴做個新的引入和調整。

springboot&springcloud
升級前:
<!-springboot-->
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.0.RELEASE</version>
        <relativePath/>
</parent>
<!-springcloud-->
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Brixton.SR5</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>
升級後:
<properties>
	<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
	<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
</properties>
<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>${spring-cloud.version}</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-dependencies</artifactId>
			<version>${spring-boot.version}</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>
feign
升級前:
<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>

升級後:
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
Eureka

Eureka服務可以逐步升級,因為老版本的 Eureka服務支援升級之後的微服務註冊,這次暫不升級Eureka服務。

升級前:
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

升級後:
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
redis
升級前:
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-redis</artifactId>
	<version>1.3.8.RELEASE</version>
</dependency>

升級後:
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
webservice CXF

如果有用到webservice 也需要升級,不然專案啟動的時候會報相關錯誤.

升級前:
<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
	<version>3.1.7</version>
</dependency>

升級後:
<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
	<version>3.2.12</version>
</dependency>
maven外掛

打包的依賴最好也一起修改掉。

升級前:
<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
	<version>1.5.4.RELEASE</version>
	<configuration>
	<executable>true</executable>
	</configuration>
</plugin>

升級後:
<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
	<version>2.3.7.RELEASE</version>
	<configuration>
		<mainClass><!--啟動類--></mainClass> 
	</configuration>
	<executions>
		<execution>
			<id>repackage</id>
			<goals>
				<goal>repackage</goal>
			</goals>
		</execution>
	</executions>
</plugin>

3.2.配置檔案修改

資料來源

升級之後資料來源會變成HikariCP資料庫連線池。也是springcloud2.X的特性之一。如果是多資料來源在配置中心需要做微調。不然啟動的時候會找不到資料庫的連線配置資訊和驅動。 我們的專案大部分是用阿里的Druid作為資料庫連線池。而且有些服務連的是多資料來源的專案。

jdbc-url

如果是多數源都要進行修改。不然預設的HikariCP資料庫連線池會找不到jdbcurl。

升級前:
spring:
  datasource:
      url: jdbc:mysql://url***

升級後:
spring:
  datasource:
      jdbc-url: jdbc:mysql://url***

以上是做升級之後我們遇到的問題和需要調整的地方。