本文已被https://yourbatman.cn收录;女娲Knife-Initializr工程可公开访问啦;程序员专用网盘https://wangpan.yourbatman.cn;技术专栏源代码大本营:https://github.com/yourbatman/tech-column-learning;公号后台回复“专栏列表”获取全部小而美的原创技术专栏
你好,我是YourBatman:一个俗人,贪财好色。
Title | Link |
---|---|
所属专栏 | [YourBatman]-资讯/新特性,[YourBatman]-Spring技术栈新特性 |
源代码 | https://github.com/yourbatman/FXP-java-ee |
程序员专用网盘公益上线啦,注册送1G超小容量,帮你实践做减法 | https://wangpan.yourbatman.cn |
Java开发软件包(Mac) | https://wangpan.yourbatman.cn/s/rEH0 提取码:javakit |
女娲工程 | http://152.136.106.14:8761 |
版本约定 | [Mac OS 13.1],[IDEA 2022.3.1],[Spring Boot 3.0.x],[Spring Cloud 2022.0.0] |
📚前言
北京时间2022-12-16,Spring Cloud 2022.0.0
(代号Kilburn)正式发布。明天就是2023 年了,怎么现在才发布 2022 版本呢?你以为一年都快结束了但Spring Cloud才开始,但其实人家早在今年的第一个月就定下了基调:
至于正式发布时间嘛,去年也差不多是这样子的,千年的2020.0.0版本发布时间是2020-12-22。
其实,Spring Cloud的发版速度慢其实是必然的,毕竟越上层技术依赖的就会越多,测试难度就越高。毕竟,Spirng Boot 3.0于2022-11-24才发布,Eureka 2.0.0也2022-12-14才发布嘛,被“逼”到了这个时间节点而已。
Netflix Eureka 2.0.0正式发布:借尸还魂还是虚晃一枪?
Spring Boot 3.0.0正式发布,Banner不再支持图片&增强可观测性
总的来讲Spring技术栈发版是非常规律和可信的,可谓业界标杆。感受下之前的版本特性:
- Spring Cloud 2022.0.0正式发布:OpenFeign稳得很&全面迈向GraalVM
- Spring Cloud 2021.0.0正式发布,FeignClient调用结果可一键缓存
- Spring Cloud 2020.0.0正式发布,再见了Netflix
- Spring改变版本号命名规则:此举对非英语国家很友好
✍正文
Spring Cloud 2022.0.0版本的pom依赖:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2022.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
依赖Spring Boot 3.0.0版本即可,好在这次对齐了,有进步。还记得前两个版本的依赖关系吗?
- Spring Cloud 2021.0.0最低依赖Spring Boot 2.6.1(而非2.6.0)
- Spring Cloud 2020.0.0最低依赖Spring Boot 2.5.1(而非2.5.0)
即使强如Spring技术团队都会因为bug导致出现这种“对不齐”的现象,洁癖患者看着着实有点小难受有木有。所以,程序员平时多多宽容自己O(∩_∩)O
🌈老生常谈
一年一次,关于Spring Cloud,每每都有些老生常谈的议题,很基础,但又不得不知,不得不晓。
✌和Spring Boot的对应关系
Spring Cloud作为云计算框架,以Spring Boot作为基石,因此它和Spring Boot的版本对应关系非常重要。
Release Train | 发布时间 | Spring Boot版本 | SC Commons版本 |
---|---|---|---|
2022.0.x(Kilburn) | 2022-12 | 3.0.x | 4.0.x |
2021.0.x(Jubilee) | 2021-12 | 2.6.x,2.7.x(从2021.0.3起) | 3.1.x |
2020.0.x(Ilford) | 2020-12 | 2.4.x,2.5.x(从2020.0.3起) | 3.0.x |
Hoxton | 2019-07 | 2.2.x, 2.3.x (从SR5起) | 2.2.x |
Greenwich | 2018-11 | 2.1.x | 2.1.x |
Finchley | 2017-10 | 2.0.x | 2.0.x |
Edgware | 2017-08 | 1.5.x | 1.3.x |
Dalston | 2017-05 | 1.5.x | 1.2.x |
Brixton | 2016-09 | 1.3.x | 1.1.x |
Angel | 2016-05 | 1.2.x | 1.0.x |
按目前节奏,Spring Boot每年发布2个中版本、一个大版本升级,Spring Cloud保持每年一次大版本升级的用以匹配节奏。
✌版本管理
Spring Cloud管理着众多功能组件,本版本和去年2021.0.0版本对比图如下:
不管从数量上(2022更少)还是版本号上(2022均是大版本号升级),差异都还挺大的。
本次对很多模块进行了更新,笔者绘制成表格,方便你收藏:
模块 | 版本 | 核心组件 |
---|---|---|
spring-cloud-commons-dependencies | 4.0.0 | spring-cloud-commons spring-cloud-context spring-cloud-loadbalancer spring-cloud-starter |
spring-cloud-netflix-dependencies | 4.0.0 | spring-cloud-starter-netflix-eureka-client spring-cloud-starter-netflix-eureka-server eureka-core-jersey3 eureka-client-jersey3 |
spring-cloud-openfeign-dependencies | 4.0.0 | spring-cloud-starter-openfeign feign-bom:12.1 feign-form-spring:3.8.0 |
spring-cloud-gateway-dependencies | 4.0.0 | spring-cloud-gateway-webflux spring-cloud-gateway-mvc spring-cloud-gateway-server spring-cloud-starter-gateway |
spring-cloud-circuitbreaker-dependencies | 3.0.0 | resilience4j-bom:2.0.2 spring-cloud-starter-circuitbreaker-resilience4j spring-cloud-starter-circuitbreaker-reactor-resilience4j spring-cloud-starter-circuitbreaker-spring-retry |
spring-cloud-config-dependencies | 4.0.0 | spring-cloud-starter-config spring-cloud-config-client spring-cloud-config-server spring-cloud-config-monitor org.eclipse.jgit:6.4.0.202211300538-r |
spring-cloud-stream-dependencies | 4.0.0 | spring-cloud-stream spring-cloud-stream-binder-kafka spring-cloud-stream-binder-rabbit spring-cloud-stream-schema-registry-client |
spring-cloud-task-dependencies | 3.0.0 | spring-cloud-starter-task spring-cloud-task-batch spring-cloud-task-stream |
spring-cloud-consul-dependencies | 4.0.0 | spring-cloud-starter-consul spring-cloud-starter-consul-bus spring-cloud-starter-consul-config spring-cloud-starter-consul-discovery spring-cloud-starter-consul-all com.ecwid.consul:consul-api:1.4.5 |
spring-cloud-sleuth-brave spring-cloud-sleuth-zipkin spring-cloud-starter-sleuth | ||
spring-cloud-zookeeper-dependencies | 4.0.0 | spring-cloud-starter-zookeeper-config spring-cloud-starter-zookeeper-discovery spring-cloud-starter-zookeeper-all org.apache.curator:curator-framework:5.1.0 |
spring-cloud-cloudfoundry-discovery spring-cloud-starter-cloudfoundry | ||
spring-cloud-bus-dependencies | 4.0.0 | spring-cloud-starter-bus-amqp spring-cloud-starter-bus-kafka spring-cloud-starter-bus-stream spring-cloud-bus-rsocket |
spring-cloud-contract-dependencies | 4.0.0 | spring-cloud-contract-wiremock spring-cloud-contract-spec spring-cloud-contract-spec-java< spring-cloud-contract-spec-kotlin spring-cloud-contract-stub-runner |
spring-cloud-function-dependencies | 4.0.0 | spring-cloud-function-context spring-cloud-starter-function-web spring-cloud-starter-function-webflux spring-cloud-function-deployer spring-cloud-function-adapter-aws spring-cloud-function-adapter-azure spring-cloud-function-adapter-gcp spring-cloud-function-adapter-openwhisk |
spring-cloud-vault-dependencies | 4.0.0 | spring-cloud-vault-config-aws spring-cloud-vault-config-consul spring-cloud-vault-config-database spring-cloud-vault-config-rabbitmq |
spring-cloud-kubernetes-dependencies | 3.0.0 | io.kubernetes:client-java:17.0.0 io.fabric8:kubernetes-client-bom:6.2.0 spring-cloud-kubernetes-client-config spring-cloud-kubernetes-client-discovery spring-cloud-kubernetes-fabric8-istio spring-cloud-kubernetes-fabric8-loadbalancer spring-cloud-starter-kubernetes-fabric8-all |
可以看到,相较于上个版本,本次删除了spring-cloud-sleuth
和spring-cloud-cloudfoundry
,以及spring-cloud-cli
三个模块的管理。
🌈what’s new(新特性)
老规矩,将我们关心的功能爽一遍。
🚀最低版本要求
- Java 17
- Jakarta EE 9
- Spring Framework 6.x
- Spring Boot 3.x
🚀移除掉三个模块
- Spring Cloud CLI:该模块在Spring Boot CLI的基础上,简化Spring Cloud应用部署。有了它可以通过一些命令
spring cloud configserver、$ spring cloud eureka
快速启动一些组件- 笔者体验后的感觉:生产上真是没啥用,玩玩就可以了
- Spring Cloud Cloudfoundry:SC里有个枚举类
CloudPlatform
能看到:
Cloud Foundry是业界第一个开源PaaS云平台,但它可能真不太适合现在的云环境,要被列入前辈行列了,毕竟K8S势如破竹。 - Spring Cloud Sleuth:分布式链路追踪模块(Zipkin是默认实现),遵循Google的开源项目Dapper以及OpenTracing标准。这次把这个模块干掉,当然不是放弃链路追踪功能,而是将它交给了
Micrometer Tracing
项目,现在日志、指标、追踪都可交给Micrometer了。
🚀Spring Cloud Commons
要说Spring Cloud最最最重要的一个模块是什么,那便是Spring Cloud Commons
。作为阻断式的大版本升级(Spring Cloud Commons从3.1.x升级到了4.0.0),必然也是大刀阔斧,甩掉包袱,主要有:
🚩AsyncRestTemplate相关类被移除
AsyncRestTemplate&AsyncRestOperations作为异步请求器,一直依赖存在感其实蛮若的。而在Spring Framework 5.0的时候就已将它哥俩标记为@Deprecated
了,取代它们的是Spring Reactor Web提供的WebClient
。
在Spring Framework 6,AsyncRestTemplate已被删除。因此Spring Cloud也移除了其相关配置类:AsyncLoadBalancerAutoConfiguration
、AsyncRestTemplateCustomizer
等等。
🚩httpclient包下面的类全被被移除
如下图所示:
这个有点狠,整个被全部拿下,包括:Apache HttpCLient和OkHttp3的相关集成Factory等。之前版本中像OpenFeign就会用到它。
🚩@EnableCircuitBreaker注解被移除
原因很简单,这个Hystrix在Spring Cloud 2022中不再被支持,这个预防针在Spring Cloud 2020就已经打过啦(当时不建议使用,现在是移除支持)。
Spring Cloud 2020.0.0正式发布,再见了Netflix
🚩@SpringCloudApplication注解终被移除
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootApplication
@EnableDiscoveryClient
public @interface SpringCloudApplication {
}
这个注解很熟悉,但又很陌生?嗯,一个典型的Spring Cloud应用注解,在之前版本更是带有@EnableCircuitBreaker
注解呢。现在@EnableDiscoveryClient
和@EnableCircuitBreaker
都不需要了,自然@SpringCloudApplication就没有再存在的意义了。
@EnableDiscoveryClient
:只要classpath里存在相关类,就会被自动开启- 毕竟,服务发现已成微服务应用最基本的设施了嘛,默认就开启喽。当然,你可通过
spring.cloud.discovery.enabled=false
来显示关闭,具有更好的灵活性
- 毕竟,服务发现已成微服务应用最基本的设施了嘛,默认就开启喽。当然,你可通过
@EnableCircuitBreaker
:Hystrix自从Spring Cloud 2020.0.0版本就退出历史舞台了,取而代之的Resilience4j
用不着它
此注解在早在Spring Cloud Common 3.0.1(对应Spring Cloud 2020.0.1)就被标记为了@Deprecated
,直到Spring Cloud Common 4.0.0版本被从源码正式拿下。
🚀Spring Cloud OpenFeign
太多的博文拿这个标题来“做文章”:OpenFeign要退出历史舞台了?笔者的观点:这是趋势,但开发者duck不必担心,因为OpenFeign还很活跃,退出按照时间维度来讲5年打底,10年差不多。所以,该学的Feign技术还得继续,比如笔者的这个Feign专题:
另外,看看本次Spring Cloud对Feign的升级更改,就知道退出还有很长路要走:
🚩属性配置统一为spring.cloud.openfeign前缀
之前版本feign相关的属性配置都为feign.xxx
,现在统为spring.cloud.openfeign.xxx
,队形保持和其它模块一致,更加和谐了。举例如下:
🚩默认使用Jackson完成序列化/反序列化
在此之前,序列化和反序列化默认情况下是Feign自己实现的,我们一般会选择显示开启Jackson支持。毕竟它已成为标准组件,Spring MVC、Redis等一般都使用它完成。
为此,本版本讲Jackson正式转正:默认使用它来完成Feign的序列化/反序列化功能。具体配置差异如下图所示:
🚩拥抱Apache HttpClient 5,移除对4的支持
弃用了对Apache HttpClient 4的支持,拥抱Apache HttpClient 5。直观的讲,HttpClientFeignConfiguration
等相关类已删除:只剩下HttpClient5FeignConfiguration
而在2021版本的Spring Cloud里它是存在的,并且默认开启的是HttpClient 4哦:
这一点与Spring Framework、Spring Boot中的变化保持一致。
🚩@FeignClient的decode404属性改为dismiss404
@FeignClient
注解的改动如下:
修改的原因是:与上游技术(也就是原生Feign)命名保持一致。因为Feign从11.9版本起内部就做了改名:
因此Spring Cloud借这次阻断式升级,顺势将名称整规范喽,非常有追求有木有。
🚩Feign升级到12.1版本
从上个版本的11.7升级到本版本的12.1
🚩@FeignClient的注册不再使用懒加载
代码的改变在这里,一看便知:
很明显,如果希望加载行为保持和之前版本一致,只需加个配置spring.cloud.openfeign.lazy-attributes-resolution = true
即可.。
🚀Spring Cloud Netflix
Spring Cloud Netflix曾作为Spring Cloud的全栈解决方案,现在唯一被“保留”下来的有且仅有Eureka了。
这一次继续砍:移除掉注解@EnableEurekaClient
(毕竟@EnableDiscoveryClient
都不需要显示指定了嘛)
🚀Eureka升级到2.0.0
嗯,不再重复阐述了哈,笔者写了篇文章专门介绍Eureka 2.0.0:Netflix Eureka 2.0.0正式发布:借尸还魂还是虚晃一枪?
🚀迈向GraalVM:支持AOT和Native image
Spring Boot 3.0最大看点和改动,就是对GraalVM原生镜像的支持。Spirng团队多次强调,为此付出的心血和花费精力都是最多的。
GraalVM技术是JRE的替代方案,基本原理是通过预编译AOT(Ahead Of Time)技术先编译好,这样Spring框架就可以获取到更多信息,从而启动就非常快了,这不难理解哈。
Spring团队早在2019年就开始研究对GraalVM的支持,还记得那个Spirng Native项目吗?它就是专门用于研究GraalVM的,曾经的实验性项目,现正式被Spring Boot 3.0收纳,光荣完成使命。
本次Spring Cloud 2022对各个模块(大部分模块)都添加了AOT和Native image的支持,可谓补射完了临门一脚,Spring技术栈正式迈向GraalVM,且逐渐趋于成熟。相信不远的将来会逐渐流行开来,笔者预估3年有明显变化,5年快速增长。
🚀其它
- Spring Cloud Circuitbreaker模块的
Resilience4J
升级到了2.0.2功能(上个版本为1.7.x) - Spring Cloud Gateway增加对Observability检测的支持
- Spring Cloud Stream移除@StreamListener、@Input等注解
- Spring Cloud Kubernetes移除@ConditionalOnKubernetesEnabled注解
这个注解属于Spring Cloud的:
代替者是使用Spring Boot的@ConditionalOnCloudPlatform
注解:
🍞总结
谈OpenFeign被淘汰还为时尚早:依旧主流,该学还得继续学;
学GraalVM已为时不晚:必然的发展趋势,早学早受益;
用Spring Cloud 2022时机基本成熟:demo练手,迎接下一次革新。
推荐阅读
- IntelliJ IDEA 2022.3正式发布,配置云同步&支持Redis好用到炸
- Spring Framework 6正式发布,携JDK 17&Jakarta EE开启新篇章
- IntelliJ IDEA 2022.2正式发布,支持Spring Boot 3和Spring 6
- JVM除了HotSpot,你还知道哪些?
- YourBatman用趣味代码雨祝你:端午安康
- 逐渐碎片化的Java生态圈:Oracle JDK、OpenJDK、阿里Dragonwell、华为毕昇
我是YourBatman:前25年不会写Hallo World、早已毕业的大龄程序员。高中时期《梦幻西游》骨灰玩家,网瘾失足、清考、延期毕业、房产中介、保险销售、送外卖…是我不可抹灭的黑标签
- 🎓2013.07 清考、毕业答辩3次未通过、延期毕业
- 🏷2013.08-2014.07 宁夏中介公司卖二手房1年,毕业后第1份工作
- ️️🏷2014.07-2015.05 荆州/武汉,泰康人寿卖保险3月、饿了么送外卖2月,还有炸鸡排、直销等第2345份工作
- 🏷2015.08 开始从事Java开发,闯过外包,呆过大厂!擅长抽象思维,任基础架构团队负责人
- 🏷2021.08 因“双减政策”失业!历经9面,终获美团外卖L8的offer
- 🙅🏻♀️Java架构师、Spring开源贡献者、CSDN博客之星年度Top 10、领域建模专家、写作大赛1/2届评委
- 📚高质量代码、规范践行者;DDD领域驱动深度实践;即将出版书籍
《Spring奇淫巧技》
序号 | 专栏名称 | 简介 |
---|---|---|
01 | [YourBatman]-程序人生 | 程序人生,人生程序 |
02 | [YourBatman]-资讯/新特性 | IDEA、JDK、Spring技术栈…新特性 |
03 | [YourBatman]-IntelliJ IDEA | 熟练使用IDEA就相当拥有物理外挂,助你高效编码 |
04 | [YourBatman]-Bean Validation | 熟练掌握数据校验,减少90%的垃圾代码 |
05 | [YourBatman]-日期时间 | 帮你解决JDK Date、JSR 310日期/其实 的一切问题 |
06 | [YourBatman]-Spring类型转换 | Spring类型转换-框架设计的基石 |
07 | [YourBatman]-Spring static | static关键字在Spring里的应用 |
08 | [YourBatman]-Cors跨域 | 关于跨域请求问题,本专栏足矣 |
09 | [YourBatman]-Jackson | Almost Maybe是最好的Jackson专栏 |
10 | [YourBatman]-Spring配置类 | 专讲@Configuration配置类,你懂的 |
11 | [YourBatman]-Spring技术栈 | 暂无所属小分类的,Spring技术栈大分类 |
12 | [YourBatman]-JDK | 暂无所属小分类的,JDK技术栈大分类 |
13 | [YourBatman]-Servlet | Servlet规范、Web相关内容专题 |
14 | [YourBatman]-Java EE | 从Java EE到Jakarta EE,30年弹指一挥间 |
15 | [YourBatman]-工具/提效 | 开发工具、软件工具,目标是提效 |
16 | [YourBatman]-Spring技术栈新特性 | Spring Framework、Spring Boot、Spring Cloud、Spring其它技术 |
17 | [YourBatman]-基本功 | 每个Javaer,都需要有扎实的基本功 |
… | … | … |
99 | 源代码库 | 大多数专栏均配有源代码,都在这里 |
- 源代码库地址:https://github.com/yourbatman/tech-column-learning
- CSDN主页:https://blog.csdn.net/f641385712
- 掘金主页:https://juejin.cn/user/430664289367192
- 博客园主页:https://www.cnblogs.com/yourbatman
- 个人博客主页:https://yourbatman.cn
- 个人网盘主页:https://wangpan.yourbatman.cn