Day 18:01. 基于 SpringBoot4 开发后台管理系统-快速了解一下 SpringBoot4 新特性

一、前言

作为个人项目,如果你需要快速上线,那么我不推荐使用最新版本。但是因为我的产品就是这个专栏,传达的是一种学习的方式,所以"踩坑"也是我这个产品的一部分,我希望通过"踩坑",然后展示怎么一步步解决问题的,来体现出我这个专栏的价值,让你从"踩坑"中能过有所收获。我不太喜欢那种预制的课程,所有流程全部安排好,如果按照他的节奏来,百分百不会出错,但是一旦你跳出来,碰到问题了就四处抓瞎。我希望你有你自己的节奏,随心所欲一点,自信一点,对自己的项目能够做到完全的掌控。

废话不多说,这里我直接用 Springboot4 搞起来!

官网地址:spring.io/projects/sp...

首先我们来了解一下 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

  1. 编程注册 Bean
  2. 配置类 @Import

详细链接:docs.spring.io/spring-fram...

2.4. GraalVM 原生镜像支持大升级

生成原生镜像,启动速度更快,内存占用更小,可以直接编译为二进制文件,无需 JVM 环境即可运行。

docs.spring.io/spring-boot...

www.graalvm.org/

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 语句判断进行校验。

json-schema.org/

github.com/networknt/j...

这个特性我们可以尝试一下。大概思路就是实现 RequestBodyAdvice 接口,在 Json 字符串转成对象之前,通过 json scheme 直接进行校验。

3.2. JSON 视图定制序列化

在开发中我们会碰到这样一个场景,返回不同的 VO 对象,但是大多数字段都是一样的可能就极个别字段不同,这时候我们又要重新定义一个,比如 OrderDetailVO, OrderListVO, 而这个视图的作用就是,可以只定义一个 OrderVO,然后通过定义不同的视图对象,来指定序列化哪些字段。

具体文档参考:www.baeldung.com/jackson-jso...

这个有点意思,新项目可以尝试一下。

四、总结

初步了解下来,发现变化还是比较大的,特别是一些版本的变化,很多破坏性更新,所以之前的一些配置类可能要做些变化,比如序列化,反序列化的配置。

我比较感兴趣的是 原生镜像 + 虚拟线程 带来的影响,后面肯定要尝试一下。

好了,有了个大概得了解,接下来就要开始项目的搭建了。

千里之行,始于足下。你的"个人公司"从这第一个2小时开始。欢迎在评论区分享你的进展或遇到的卡点,我会逐一查看,尽可能的帮助解决。我们下一篇文章见!

相关推荐
王中阳Go5 小时前
两个入口答案不一致先别调模型:6 行入口口径对账表(附脚本)
人工智能·后端·python·大语言模型·1024程序员节
小poop6 小时前
CSS 基础与实战:从入门到精通网页美化
前端
码事漫谈7 小时前
消除AI幻觉,普通人能做的五件事
后端
Csvn7 小时前
运行时性能
前端
Never_every998 小时前
位图转矢量工具哪个好?实测抠抠图AI位图转矢量工具
大数据·前端
paopaokaka_luck8 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
金銀銅鐵9 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
空中湖9 小时前
用 React 写数据大屏:为什么我不建议用图表库
前端·react.js·前端框架
Mk5987810 小时前
给 Agent 装上对话框 —— AgentScope-Java 接入 Spring Boot 与 SSE 流式实战
后端
付威202310 小时前
从 Loop 到 Runtime:rpi Agent Loop 与 Cordis 的边界、取舍与组合
后端