0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring Cloud Tencent發(fā)布最新匹配版本!

OSC開源社區(qū) ? 來源:OSC開源社區(qū) ? 作者:張樂、張皓天 ? 2022-12-09 15:34 ? 次閱讀

Spring Framework 6.0 已于11月份上旬正式發(fā)布 GA 版本。Spring Boot 3.0 也于11月25日正式發(fā)布 GA 版本。那么 Spring Cloud 2022 它還遠嗎?

前言

Java 8 目前是國內(nèi)主流生產(chǎn)環(huán)境 Java 版本之一。雖然近幾年陸續(xù)發(fā)布了 Java 11、Java 17 官方 LTS 版本,但是 你發(fā)任你發(fā),我用Java8 的聲音反應(yīng)了大部分開發(fā)者的心聲。不過 Java 17 版本在性能上做了大量的優(yōu)化特別是 ZGC 的發(fā)布,促進了國內(nèi)不少企業(yè)升級到 Java 17。

Spring 在 Java 語言的作用不言而喻,Spring Framework 5.0 發(fā)布已至今五年,是時候需要一個大的版本來革新技術(shù)棧了。借著 Java 17 的東風(fēng)我們認為

“Java 17 + Spring Framework 6.0 + Spring Boot 3.0 + Spring Cloud 2022”

組合一定會在不久的將來被大家所接受,成為主流技術(shù)棧。當(dāng)然任何新技術(shù)大規(guī)模被認可、落地都會有一定的滯后性,技術(shù)的發(fā)展 “穩(wěn)”字當(dāng)頭。

Spring Cloud Tencent 是基于騰訊開源的一站式微服務(wù)平臺北極星(集服務(wù)注冊發(fā)現(xiàn)、配置中心、服務(wù)限流熔斷、服務(wù)路由于一身)實現(xiàn)的 Spring Cloud 微服務(wù)解決方案套件。真正做到 “All In One”、 開箱即用,極大的降低企業(yè)的微服務(wù)實踐門檻。

無論北極星還是 Spring Cloud Tencent 當(dāng)前都在積極的修復(fù) Bug、完善用戶體驗、迭代新功能。所以 Spring Cloud Tencent 也第一時間適配了 Spring Cloud 2022。此篇文章詳細講述了 Spring Cloud Tencent 從 2021 版本升級到 2022 版本的改動點。為嘗鮮 2022 版本的廣大開發(fā)者提供一些參考。

一、升級過程

1.1 升級安裝 JDK 17

Oracle 官網(wǎng)下載 JDK 17 并安裝。安裝之后,本地修改 JAVA_HOME 環(huán)境變量,如下所示:

#echo$JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-17.0.5.jdk/Contents/Home
#java-version
javaversion"17.0.5"2022-10-18LTS
Java(TM)SERuntimeEnvironment(build17.0.5+9-LTS-191)
JavaHotSpot(TM)64-BitServerVM(build17.0.5+9-LTS-191,mixedmode,sharing)

安裝好 JDK 17 之后,同時需要在 Idea 里設(shè)置項目的編譯和運行環(huán)境為 SDK 17。

1.2 升級依賴版本

Spring Cloud Tencent 項目引用的 Parent Pom 是 spring-cloud-build,所以需要升級到最新版本。

<parent>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-buildartifactId>
<version>4.0.0-RC2version>
<relativePath/>
parent>

可以看到 Spring-cloud-build 4.0.0-RC2 版本里定義的 Java 和 Spring Boot 版本已是最新的 Java 17 和 Spring Boot 3.0

<properties>
<java.version>17java.version>
<spring-boot.version>3.0.0-RC2spring-boot.version>
properties>

普通項目一般不需要繼承 spring-cloud-build ,而是通過 bom 的方式引入 Spring 全家桶。如果你的項目里定義了 Java、Spring Framework、Spring Boot、Spring Cloud 版本則需要同時升級。如下所示:

<properties>
<java.version>17java.version>
<spring.framework.version>6.0.1spring.framework.version>
<spring-boot.version>3.0.0spring-boot.version>
<spring.cloud.version>2022.0.0-RC2spring.cloud.version>
properties>
<dependencyManagement>
<dependencies>

<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-framework-bomartifactId>
<version>${spring.framework.version}version>
<type>pomtype>
<scope>importscope>
dependency>


<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>${spring.boot.version}version>
<type>pomtype>
<scope>importscope>
dependency>


<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring.cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>

注意:Spring 非 GA 版本會先發(fā)布到 Spring 自己的 Maven 倉庫,而不會發(fā)布到中央倉庫。所以如果拉不到包,則需要在項目根 Pom 或者本地 ~/.m2/settings.xml 里配置 Spring Maven 倉庫。

<repositories>
<repository>
<id>nexus-snapshotsid>
<url>https://oss.sonatype.org/content/repositories/snapshots/url>
<releases>
<enabled>falseenabled>
releases>
<snapshots>
<enabled>trueenabled>
snapshots>
repository>
<repository>
<id>spring-snapshotsid>
<name>SpringSnapshotsname>
<url>https://repo.spring.io/snapshoturl>
<snapshots>
<enabled>trueenabled>
snapshots>
<releases>
<enabled>falseenabled>
releases>
repository>
<repository>
<id>spring-milestonesid>
<name>SpringMilestonesname>
<url>https://repo.spring.io/milestoneurl>
<snapshots>
<enabled>falseenabled>
snapshots>
repository>
repositories>

在升級過程中,大概率會出現(xiàn)包沖突的情況,例如 SCT 在升級過程中發(fā)現(xiàn)日志依賴有問題導(dǎo)致 example 啟動失敗。最后排查到原因:SCT 自己定義了 logback版本為 1.2.11,但是升級 Spring Boot 3.0 里傳遞依賴的版本為 1.4.5,所以導(dǎo)致版本沖突。最后解決方案就是把 SCT 定義的版本去掉,只用傳遞依賴的版本。

Tips:解決版本沖突大概率會占用比較多的時間,升級過程需要有耐心

1.3 修改不兼容代碼

javax 包替換為 jakarta 包

這是Java17 最大變更點之一,代碼所有 import javax 都要替換為 jakarta。編譯不通過的地方直接通過 Idea 自動導(dǎo)入的方式變更即可。

spring-web 6.0 不兼容升級

SCT 在升級過程中發(fā)現(xiàn) spring-web 包下有些 API 不兼容,例如 ClientHttpResponse.getStatusCode() 老版本返回 HttpStatus,新版本返回的是 HttpStatusCode,改動量很小。

AutoConfiguration 自動裝配方式變更

在 Spring Boot 3.0 以前的版本,通過在 META-INF/spring.factories 文件中定義需要自動裝配類,Spring Boot 在啟動過程中就會執(zhí)行裝配 Bean,如下所示:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.tencent.cloud.plugin.pushgateway.PolarisStatPushGatewayAutoConfiguration

但是在 Spring Boot 3.0 中,則是通過在

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

文件定義需要自動裝配的類。所以遷移過程就是把org.springframework.boot.autoconfigure.EnableAutoConfiguration 下配置的類都放到新的文件中。

這里需要注意的是原來在 spring.factories 可以定義多種類型的自動裝配例如:

  1. org.springframework.boot.autoconfigure.EnableAutoConfiguration
  2. org.springframework.cloud.bootstrap.BootstrapConfiguration
  3. org.springframework.context.ApplicationListener
  4. ... ...

只需要把 org.springframework.boot.autoconfigure.EnableAutoConfiguration 部分遷移到 org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件,其它部分還是放在 spring.factories 中無需遷移。

至此 SCT 2022 升級適配工作即已完成,可以看出升級工作量不大。

1.4 升級總結(jié)

SCT 屬于比較底層的基礎(chǔ)組件依賴的第三方庫少,所以整體適配工作量少。如果您的應(yīng)用是上層業(yè)務(wù)應(yīng)用依賴了大量的組件,例如:spring-security、spring-stream等。那升級的成本也會高很多。

下面是 github 網(wǎng)友 @herodotus-cloud 總結(jié)的升級關(guān)鍵點:

  1. 更換 JDK 17 后,少部分第三方依賴包版本選擇和控制問題
  2. 新依賴包過時代碼替換。大多數(shù)沒問題,就怕遇到像 spring security 6 用法的變化
  3. starter 自動配置注冊格式不同導(dǎo)致的,大多數(shù)第三方依賴都倒在這里
  4. 最怕的就是核心機制的變化,比如說反射。好像一些反射在 JDK 17 會有問題
  5. 最大的問題就是基礎(chǔ)設(shè)置組件升級不同步或者緩慢問題,比如依賴的某個 SDK 沒有升級 SDK 17,如果傳遞依賴了就會導(dǎo)致編譯問題。
  6. 如果還要考慮向下的兼容性,怕就難了

Spring 官方建議先升級到 Spring Boot 2.7 小版本,然后再升級到 Spring Boot 3.0 版本。通過小步升級的方式,可以更加的平滑。

二、嘗鮮使用 Spring Cloud Tencent 2022.0 版本

Spring Cloud Tencent 1.8.1-2022.0.0 版本已發(fā)布。通過引入 SCT BOM 的方式即可引入,如下所示:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.tencent.cloudgroupId>
<artifactId>spring-cloud-tencent-dependenciesartifactId>
<version>1.8.1-2022.0.0-RC2version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>

在此解釋一下 SCT 的版本號規(guī)則,版本號分為兩段:

{對應(yīng)的 Spring Cloud 版本}

SCT 版本號在各個 Spring Cloud 版本之間對齊,例如 1.8.1-Hoxton.SR12 和 1.8.1-2021.0.3 ,SCT 版本號都是 1.8.1,功能完全對齊,只是引用的 Spring Cloud 不同。版本號中引入 Spring Cloud 版本為了一眼就能識別 Spring Cloud 版本對應(yīng)關(guān)系。開發(fā)者優(yōu)先選擇跟自己版本一致的 Spring Cloud 版本,再選擇最新的 SCT 版本。

使用 SCT 各個子模塊的功能,請參考 SCT Github Wiki 文檔。

三、 呼吁

第三方基礎(chǔ)組件的升級節(jié)奏會直接影響上層應(yīng)用的升級,在此也呼吁第三方基礎(chǔ)組件的維護者能夠盡快跟進適配。為廣大愿意嘗鮮的開發(fā)者和企業(yè)提供便利。

四、歡迎共建

如果您對微服務(wù)、Spring Cloud 技術(shù)感興趣,歡迎加入我們。您的一個建議、Issue、Pull Request 甚至只是一個小小的 Star 都是對 Spring Cloud Tencent 社區(qū)極大的支持。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2943

    瀏覽量

    104103
  • Oracle
    +關(guān)注

    關(guān)注

    2

    文章

    282

    瀏覽量

    35045
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    335

    瀏覽量

    14259

原文標(biāo)題:緊跟Spring Boot 3生態(tài),Spring Cloud Tencent發(fā)布最新匹配版本!

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Spring Cloud Gateway網(wǎng)關(guān)框架

    SpringCloud Gateway功能特征如下: (1) 基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0 進行構(gòu)建; (2) 動態(tài)路由:能夠匹配任何請求屬性;
    的頭像 發(fā)表于 08-22 09:58 ?288次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Cloud</b> Gateway網(wǎng)關(guān)框架

    使用Spring Boot 3.2虛擬線程搭建靜態(tài)文件服務(wù)器

    Spring Boot 3.2 于 2023 年 11 月大張旗鼓地發(fā)布,標(biāo)志著 Java 開發(fā)領(lǐng)域的一個關(guān)鍵時刻。這一突破性的版本引入了一系列革命性的功能。
    的頭像 發(fā)表于 01-09 09:34 ?1010次閱讀
    使用<b class='flag-5'>Spring</b> Boot 3.2虛擬線程搭建靜態(tài)文件服務(wù)器

    dubbo和spring cloud區(qū)別

    Dubbo和Spring Cloud是兩個非常流行的微服務(wù)框架,各有自己的特點和優(yōu)勢。在本文中,我們將詳細介紹Dubbo和Spring Cloud的區(qū)別。 1.架構(gòu)設(shè)計: Dubbo是
    的頭像 發(fā)表于 12-04 14:47 ?1327次閱讀

    springcloud的優(yōu)勢與劣勢

    Spring Cloud 是一個基于Spring Boot的開發(fā)工具集,用于幫助開發(fā)人員快速搭建分布式系統(tǒng)的微服務(wù)架構(gòu)。它提供了一系列的組件和工具,包括服務(wù)注冊與發(fā)現(xiàn)、服務(wù)調(diào)用、負載均衡、斷路器
    的頭像 發(fā)表于 12-03 16:22 ?1646次閱讀

    springcloud的網(wǎng)關(guān)是什么

    Spring Cloud網(wǎng)關(guān)(Spring Cloud Gateway)是一種基于Spring Clou
    的頭像 發(fā)表于 12-03 15:54 ?746次閱讀

    Spring MVC的工作原理

    Spring MVC是一種基于Java的Web應(yīng)用程序框架,它采用了Model-View-Controller(MVC)設(shè)計模式來分離應(yīng)用程序的不同方面。Spring MVC的工作原理涉及多個關(guān)鍵
    的頭像 發(fā)表于 12-03 11:49 ?639次閱讀

    Spring Boot 3.2支持虛擬線程和原生鏡像

    Spring Boot 3.2 前幾日發(fā)布,讓我們用 Java 21、GraalVM 和虛擬線程來嘗試一下。
    的頭像 發(fā)表于 11-30 16:22 ?584次閱讀

    spring分布式框架有哪些

    Spring分布式框架。 Spring Cloud Spring Cloud是基于Spring
    的頭像 發(fā)表于 11-16 10:58 ?651次閱讀

    Spring Cloud :打造可擴展的微服務(wù)網(wǎng)關(guān)

    Spring Cloud Gateway是一個基于Spring Framework 5和Project Reactor的反應(yīng)式編程模型的微服務(wù)網(wǎng)關(guān)。它提供了豐富的功能,包括動態(tài)路由、請求限流、集成安全性等,使其成為構(gòu)建微服務(wù)架構(gòu)
    的頭像 發(fā)表于 10-22 10:03 ?428次閱讀
    <b class='flag-5'>Spring</b> <b class='flag-5'>Cloud</b> :打造可擴展的微服務(wù)網(wǎng)關(guān)

    Spring Boot 的設(shè)計目標(biāo)

    Spring 框架復(fù)雜的XML配置。使用 Spring Boot 可以很容易創(chuàng)建一個獨立運行的、基于 Spring 的生產(chǎn)級應(yīng)用程序,而且Spring Boot 對
    的頭像 發(fā)表于 10-13 14:56 ?488次閱讀
    <b class='flag-5'>Spring</b> Boot 的設(shè)計目標(biāo)

    Spring Boot的啟動原理

    可能很多初學(xué)者會比較困惑,Spring Boot 是如何做到將應(yīng)用代碼和所有的依賴打包成一個獨立的 Jar 包,因為傳統(tǒng)的 Java 項目打包成 Jar 包之后,需要通過 -classpath 屬性
    的頭像 發(fā)表于 10-13 11:44 ?542次閱讀
    <b class='flag-5'>Spring</b> Boot的啟動原理

    Spring Boot啟動 Eureka流程

    在上篇中已經(jīng)說過了 Eureka-Server 本質(zhì)上是一個 web 應(yīng)用的項目,今天就來看看 Spring Boot 是怎么啟動 Eureka 的。 Spring Boot 啟動 Eureka
    的頭像 發(fā)表于 10-10 11:40 ?709次閱讀
    <b class='flag-5'>Spring</b> Boot啟動 Eureka流程

    Spring Boot Actuator快速入門

    不知道大家在寫 Spring Boot 項目的過程中,使用過 Spring Boot Actuator 嗎?知道 Spring Boot Actuator 是什么,干什么的嗎?今天就要來給大家介紹
    的頭像 發(fā)表于 10-09 17:11 ?528次閱讀

    Gradle構(gòu)建的多模塊Spring Boot項目

    構(gòu)建的多模塊 Spring Boot 項目,JDK 版本為8,IDEA 版本為 2022.3.1 。 1. 創(chuàng)建項目 打開IDEA,選擇菜單:File -> New -> Project,在其
    的頭像 發(fā)表于 09-25 14:46 ?2464次閱讀
    Gradle構(gòu)建的多模塊<b class='flag-5'>Spring</b> Boot項目

    Spring AOP如何破解java應(yīng)用

    前面我們看過javaassit是如何破解java應(yīng)用,核心都是AOP相關(guān)的知識,今天我們看下Spring AOP是怎么回事! Spring-AOP spring 5.x版本 AOP面向
    的頭像 發(fā)表于 09-25 11:16 ?779次閱讀
    <b class='flag-5'>Spring</b> AOP如何破解java應(yīng)用