0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Spring Cloud Tencent发布最新匹配版本!

OSC开源社区 来源:OSC开源社区 作者:张乐、张皓天 2022-12-09 15:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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 环境变量,如下所示:

#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 里设置项目的编译和运行环境为 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 版本会先发布到 Spring 自己的 Maven 仓库,而不会发布到中央仓库。所以如果拉不到包,则需要在项目根 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>

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

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

1.3 修改不兼容代码

javax 包替换为 jakarta 包

这是Java17 最大变更点之一,代码所有 import javax 都要替换为 jakarta编译不通过的地方直接通过 Idea 自动导入的方式变更即可。

spring-web 6.0 不兼容升级

SCT 在升级过程中发现 spring-web 包下有些 API 不兼容,例如 ClientHttpResponse.getStatusCode() 老版本返回 HttpStatus,新版本返回的是 HttpStatusCode,改动量很小。

AutoConfiguration 自动装配方式变更

在 Spring Boot 3.0 以前的版本,通过在 META-INF/spring.factories 文件中定义需要自动装配类,Spring Boot 在启动过程中就会执行装配 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 升级总结

SCT 属于比较底层的基础组件依赖的第三方库少,所以整体适配工作量少。如果您的应用是上层业务应用依赖了大量的组件,例如:spring-security、spring-stream等。那升级的成本也会高很多。

下面是 github 网友 @herodotus-cloud 总结的升级关键点:

  1. 更换 JDK 17 后,少部分第三方依赖包版本选择和控制问题
  2. 新依赖包过时代码替换。大多数没问题,就怕遇到像 spring security 6 用法的变化
  3. starter 自动配置注册格式不同导致的,大多数第三方依赖都倒在这里
  4. 最怕的就是核心机制的变化,比如说反射。好像一些反射在 JDK 17 会有问题
  5. 最大的问题就是基础设置组件升级不同步或者缓慢问题,比如依赖的某个 SDK 没有升级 SDK 17,如果传递依赖了就会导致编译问题。
  6. 如果还要考虑向下的兼容性,怕就难了

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

二、尝鲜使用 Spring Cloud Tencent 2022.0 版本

Spring Cloud Tencent 1.8.1-2022.0.0 版本已发布。通过引入 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 的版本号规则,版本号分为两段:

{对应的 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 版本对应关系。开发者优先选择跟自己版本一致的 Spring Cloud 版本,再选择最新的 SCT 版本。

使用 SCT 各个子模块的功能,请参考 SCT Github Wiki 文档。

三、 呼吁

第三方基础组件的升级节奏会直接影响上层应用的升级,在此也呼吁第三方基础组件的维护者能够尽快跟进适配。为广大愿意尝鲜的开发者和企业提供便利。

四、欢迎共建

如果您对微服务、Spring Cloud 技术感兴趣,欢迎加入我们。您的一个建议、Issue、Pull Request 甚至只是一个小小的 Star 都是对 Spring Cloud Tencent 社区极大的支持。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    20

    文章

    2997

    浏览量

    115682
  • Oracle
    +关注

    关注

    2

    文章

    301

    浏览量

    37331
  • spring
    +关注

    关注

    0

    文章

    341

    浏览量

    15776

原文标题:紧跟Spring Boot 3生态,Spring Cloud Tencent发布最新匹配版本!

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    发布元服务提交审核

    完成所有应用信息和版本信息的配置后,可将元服务提交至华为方进行发布审核。 登录AppGallery Connect,点击“APP与元服务”。 选择要发布的元服务。 左侧导航选择“应用上架 &
    发表于 12-04 14:23

    发布元服务设置上架时间

    设置上架时间 登录AppGallery Connect,点击“APP与元服务”。 选择要发布的元服务。 左侧导航选择“应用上架 > 版本信息”下待发布版本。 进入
    发表于 12-03 09:46

    元服务发布选择待发布软件包

    上传软件包并通过基础合法检查后,就可以从上传的版本中选择需要发布的软件包。 登录AppGallery Connect,点击“APP与元服务”。 选择要发布的元服务。 左侧导航选择“应用上架 &
    发表于 11-03 17:10

    开源鸿蒙6.1和8.1版本定为LTS建议版本,最新OpenHarmony路标发布

    在开源项目生态建设中,版本生命周期管理是保障社区项目稳定演进、助力生态伙伴提前规划产品路线、降低开发者适配成本的核心环节。为进一步规范开源鸿蒙版本发布流程与维护标准,明确技术支持周期预期,2025
    的头像 发表于 10-30 09:29 569次阅读
    开源鸿蒙6.1和8.1<b class='flag-5'>版本</b>定为LTS建议<b class='flag-5'>版本</b>,最新OpenHarmony路标<b class='flag-5'>发布</b>

    开源鸿蒙6.0 Release版本重磅发布

    近日,在长沙国际会议中心举办的开源鸿蒙技术大会2025上,开放原子开源鸿蒙(即OpenAtom OpenHarmony,简称“开源鸿蒙”)项目群正式发布开源鸿蒙6.0 Release版本
    的头像 发表于 10-10 16:49 2190次阅读

    使用studio,最高版本的系统是4.0.3,用到LVGL,但是可选的版本是9.1的,不匹配怎么解决?

    使用studio搭建的系统,选的是4.0.3版本,需要用到LVGL,但是版本没的选,只有9.1最高的版本,系统不匹配怎么办?
    发表于 09-29 09:56

    AppGallery Connect(HarmonyOS 5及以上) --公开测试创建并发布测试版本(一)

    版本号规范 测试版本的VersionCode必须高于发布过的全网版本的VersionCode。 测试版本的VersionCode不能低于
    发表于 09-26 17:24

    创建并发布测试版本(二)

    择到。 7.配置是否向测试用户展示当前最新在架版本的应用截图。 8.配置测试发布。 9.点击页面右上角“提交”,将测试版本提交审核。提交成功后,可在“版本列表”页面查看
    发表于 09-17 15:00

    创建并发布测试版本(一)

    版本号规范 测试版本的VersionGode必须高于发布过的全网版本的VersionGode。 测试版本的VersionCode不能低于
    发表于 09-16 15:21

    如何使用nRF Cloud

    Nordic Semiconductor云服务和nRF Cloud构成了一个专为Nordic Semiconductor无线设备优化的物联网平台。该平台为使用Nordic Semiconductor
    的头像 发表于 07-04 11:12 592次阅读
    如何使用nRF <b class='flag-5'>Cloud</b>

    NVIDIA推出AI平台DGX Cloud Lepton

    CoreWeave、Crusoe、Firmus、Foxconn、GMI Cloud、Lambda、Nebius、Nscale、SoftBank Corp. 和 Yotta Data Services 为 DGX Cloud Lepton Marketplace 提供数以万
    的头像 发表于 05-22 09:42 718次阅读

    nRF Cloud Wi-Fi 定位服务

    nRF Cloud 提供的定位服务专为 Nordic 硅芯片量身定制,具有快速、省电的定位功能。它们可以帮助需要定位数据而又不需要高功耗的设备和应用。提供多种定位技术,包括 Assisted-GPS
    发表于 04-17 15:07

    燧原科技正式纳入飞桨例行版本发布体系

    燧原科技与飞桨经过长时间的适配合作和持续集成(CI)建设,对飞桨合⼊的每⼀行代码都在燧原硬件上进⾏了验证。如今,燧原正式纳入飞桨例行版本发布体系。未来,燧原将基于这⼀合作模式,共同⽀持飞桨重大版本
    的头像 发表于 04-11 11:31 825次阅读
    燧原科技正式纳入飞桨例行<b class='flag-5'>版本</b><b class='flag-5'>发布</b>体系

    重磅发布 | 信息发布系统iOS版本正式上线!

    信息发布系统是一款集成了多种功能的强大工具,旨在帮助用户高效地管理和发布信息。无论是企业公告、校园通知,还是社区消息,我们都能为您提供便捷的解决方案。ETV信息发布系统/多应用展示1ios版本
    的头像 发表于 01-14 18:19 1127次阅读
    重磅<b class='flag-5'>发布</b> | 信息<b class='flag-5'>发布</b>系统iOS<b class='flag-5'>版本</b>正式上线!

    Google Cloud发布两款针对企业客户的全新解决方案

    Google Cloud 近期发布两款专为企业客户设计的全新解决方案——Google Agentspace与NotebookLM Plus,目的是通过 Gemini 先进的推理能力、Google 高质量的搜索功能,以及无论存储在何处的企业数据,将企业的专业知识提供给所有员
    的头像 发表于 12-27 16:31 1216次阅读