紧跟Spring Boot 3 生态,Spring Cloud Tencent 发布最新匹配版本!

2023-01-12 15:24:31 浏览数 (1)

作者 | 张乐、张皓天

Spring Framework 6.0 已于11月份上旬正式发布 GA 版本。Spring Boot 3.0 也于11月25日正式发布 GA 版本。那么 Spring Cloud 2022 它还远吗?

前言

Java 8 目前是国内主流生产环境 Java 版本之一。虽然近几年陆续发布了 Java 11、Java 17 官方 LTS 版本,但是 “你发任你发,我用Java8” 的声音反应了大部分开发者的心声。不过 Java 17 版本在性能上做了大量的优化特别是 ZGC 的发布,促进了国内不少企业升级到 Java 17。

Spring 在 Java 语言的作用不言而喻,Spring Framework 5.0 发布已至今五年,是时候需要一个大的版本来革新技术栈了。借着 Java 17 的东风我们认为

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

组合一定会在不久的将来被大家所接受,成为主流技术栈。当然任何新技术大规模被认可、落地都会有一定的滞后性,技术的发展 “稳”字当头。

Spring Cloud Tencent 是基于腾讯开源的一站式微服务平台北极星(集服务注册发现、配置中心、服务限流熔断、服务路由于一身)实现的 Spring Cloud 微服务解决方案套件。真正做到 “All In One”、 开箱即用,极大的降低企业的微服务实践门槛。

无论北极星还是 Spring Cloud Tencent 当前都在积极的修复 Bug、完善用户体验、迭代新功能。所以 Spring Cloud Tencent 也第一时间适配了 Spring Cloud 2022。此篇文章详细讲述了 Spring Cloud Tencent 从 2021 版本升级到 2022 版本的改动点。为尝鲜 2022 版本的广大开发者提供一些参考。

一、升级过程

1.1 升级安装 JDK 17

Oracle 官网下载 JDK 17 并安装。安装之后,本地修改 JAVA_HOME 环境变量,如下所示:

代码语言:javascript复制
#echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-17.0.5.jdk/Contents/Home
#java -version
java version "17.0.5" 2022-10-18 LTS
Java(TM) SE Runtime Environment (build 17.0.5 9-LTS-191)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.5 9-LTS-191, mixed mode, sharing)

安装好 JDK 17 之后,同时需要在 Idea 里设置项目的编译和运行环境为 SDK 17。

1.2 升级依赖版本

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

代码语言:javascript复制
<parent>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-build</artifactId>
  <version>4.0.0-RC2</version>
  <relativePath/>
</parent>

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

代码语言:javascript复制
<properties>
  <java.version>17</java.version>
  <spring-boot.version>3.0.0-RC2</spring-boot.version>
</properties>

普通项目一般不需要继承 spring-cloud-build ,而是通过 bom 的方式引入 Spring 全家桶。如果你的项目里定义了 Java、Spring Framework、Spring Boot、Spring Cloud 版本则需要同时升级。如下所示:

代码语言:javascript复制
<properties>
  <java.version>17</java.version>
        <spring.framework.version>6.0.1</spring.framework.version>
  <spring-boot.version>3.0.0</spring-boot.version>
        <spring.cloud.version>2022.0.0-RC2</spring.cloud.version>
</properties>
<dependencyManagement>
  <dependencies>
   <!-- Spring Framework Dependencies -->
   <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-framework-bom</artifactId>
    <version>${spring.framework.version}</version>
    <type>pom</type>
    <scope>import</scope>
   </dependency>

   <!-- Spring Boot Dependencies -->
   <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>${spring.boot.version}</version>
    <type>pom</type>
    <scope>import</scope>
   </dependency>

   <!-- Spring Cloud Dependencies -->
   <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>${spring.cloud.version}</version>
    <type>pom</type>
    <scope>import</scope>
   </dependency>
  </dependencies>
 </dependencyManagement>

注意:Spring 非 GA 版本会先发布到 Spring 自己的 Maven 仓库,而不会发布到中央仓库。所以如果拉不到包,则需要在项目根 Pom 或者本地 ~/.m2/settings.xml 里配置 Spring Maven 仓库。

代码语言:javascript复制
<repositories>
  <repository>
   <id>nexus-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
   <releases>
    <enabled>false</enabled>
   </releases>
   <snapshots>
    <enabled>true</enabled>
   </snapshots>
  </repository>
  <repository>
   <id>spring-snapshots</id>
   <name>Spring Snapshots</name>
   <url>https://repo.spring.io/snapshot</url>
   <snapshots>
    <enabled>true</enabled>
   </snapshots>
   <releases>
    <enabled>false</enabled>
   </releases>
  </repository>
  <repository>
   <id>spring-milestones</id>
   <name>Spring Milestones</name>
   <url>https://repo.spring.io/milestone</url>
   <snapshots>
    <enabled>false</enabled>
   </snapshots>
  </repository>
 </repositories>

在升级过程中,大概率会出现包冲突的情况,例如 SCT 在升级过程中发现日志依赖有问题导致 example 启动失败。最后排查到原因:SCT 自己定义了 logback版本为 1.2.11,但是升级 Spring Boot 3.0 里传递依赖的版本为 1.4.5,所以导致版本冲突。最后解决方案就是把 SCT 定义的版本去掉,只用传递依赖的版本。

Tips:解决版本冲突大概率会占用比较多的时间,升级过程需要有耐心

0 人点赞