
一、前言
作为个人项目,如果你需要快速上线,那么我不推荐使用最新版本。但是因为我的产品就是这个专栏,传达的是一种学习的方式,所以"踩坑"也是我这个产品的一部分,我希望通过"踩坑",然后展示怎么一步步解决问题的,来体现出我这个专栏的价值,让你从"踩坑"中能过有所收获。我不太喜欢那种预制的课程,所有流程全部安排好,如果按照他的节奏来,百分百不会出错,但是一旦你跳出来,碰到问题了就四处抓瞎。我希望你有你自己的节奏,随心所欲一点,自信一点,对自己的项目能够做到完全的掌控。
废话不多说,这里我直接用 Springboot4 搞起来!
首先我们来了解一下 SpringBoot4 都有哪些新的特性,在新项目中是不是可以用上。
搜了一下掘金,尽然没有搜到总结的文章。😓
二、SpringBoot4 新特性
这里只是介绍一下作用,如果需要使用,从官方文档查询使用示例
2.1. 版本控制
在之前的工作中,很少碰到一个接口两个版本同时存在的情况(小公司没那么复杂),正常做法就是,通过路径来进行区分,比如 /api/v1/orders,/api/v2/orders。现在官方提供了这种能力,在 xxxxMapping 注解中增加了一个 version 字段,可以允许你接收通过 header 、url路径参数、请求传参的方式传递过来的 version 值。
这其实是 spring7.0 带来的功能,详细链接:docs.spring.io/spring-fram...
2.2. 容错和重试
新增了 2 个注解。
@Retryable 方法重试
@ConcurrencyLimit 并发限制
详细链接:docs.spring.io/spring-fram...
2.3. 动态注册 Bean
- 编程注册
Bean - 配置类
@Import
详细链接:docs.spring.io/spring-fram...
2.4. GraalVM 原生镜像支持大升级
生成原生镜像,启动速度更快,内存占用更小,可以直接编译为二进制文件,无需 JVM 环境即可运行。
2.5. Jackson 3.x 升级
这个是个大更新,不再兼容 2.x 版本,升级时需要注意,带来的好处就是处理性能提升。
详细链接:docs.spring.io/spring-boot...
2.6. 空值安全判断
@Nullable 和 @NonNull 注解,在编译期提示空值风险。
详细链接:docs.spring.io/spring-fram...
2.7. Http 客户端代理
通过 @ImportHttpServices 批量注册 Http 客户端,微服务场景下服务间接口调用将会很比之前方便很多。
详细链接:docs.spring.io/spring-boot...
2.8. 其他一些我不太关注的新特性
-
SPEL 表达式增强
-
Servlet 6.1+WebSocket 2.2
-
XML 配置彻底移除:@Configuration注解成为唯一选择
-
JUnit 4 弃用:强制使用 JUnit 5
-
Spring JCL 日志模块停用:统一使用 SLF4J+Logback
-
最低 Java 版本提升至 17
三、新的解决方案
在搜集新特性的过程中,发现了一些新的解决方案,这次项目中可以尝试一下。
3.1. JSON 数据校验处理 (RequestBodyAdvice)
允许通过 json schema 进行参数校验,无需载转成 java 对象,再通过 Bean Validation 或者 if 语句判断进行校验。
这个特性我们可以尝试一下。大概思路就是实现
RequestBodyAdvice接口,在Json字符串转成对象之前,通过json scheme直接进行校验。
3.2. JSON 视图定制序列化
在开发中我们会碰到这样一个场景,返回不同的 VO 对象,但是大多数字段都是一样的可能就极个别字段不同,这时候我们又要重新定义一个,比如 OrderDetailVO, OrderListVO, 而这个视图的作用就是,可以只定义一个 OrderVO,然后通过定义不同的视图对象,来指定序列化哪些字段。
具体文档参考:www.baeldung.com/jackson-jso...
这个有点意思,新项目可以尝试一下。
四、总结
初步了解下来,发现变化还是比较大的,特别是一些版本的变化,很多破坏性更新,所以之前的一些配置类可能要做些变化,比如序列化,反序列化的配置。
我比较感兴趣的是 原生镜像 + 虚拟线程 带来的影响,后面肯定要尝试一下。
好了,有了个大概得了解,接下来就要开始项目的搭建了。
千里之行,始于足下。你的"个人公司"从这第一个2小时开始。欢迎在评论区分享你的进展或遇到的卡点,我会逐一查看,尽可能的帮助解决。我们下一篇文章见!