各位大佬,想请教下从 Java8 升级到 Java 17 ,SpringBoot2.x 升级到 SpringBoot3.x 的建议
之前一直用的 Java8 + SpringBoot2.x 的组合,单体和微服务都搞过,最近有一个新项目可以允许我自由选择技术栈。
项目不复杂,是个单体应用,用到的东西都算中规中矩:
Spring 框架: SpringBoot, SpringData JPA, SpringSecurity
数据库: MySQL/PostgreSQL, Redis
其他集成: Kafka, Quartz
这次算是个机会,有机会能接触新的东西,而且业务简单,所以想尝试下 Java8 + SpringBoot3.x ,不过这个项目是我一个人搞,万一有啥问题,都得我一个人自己解决,我担心会有些怪坑。
想问下老哥们的建议,有参考的文章博客都行,感谢大家!
1 Leviathann 361 天前 17 没意义,不如直接 21 |
![]() | 2 Goooooos 361 天前 直接上 jdk21 |
3 Koril OP @Leviathann 我刚想问这个哈哈哈哈,直接上 21 是不是更好,一步到胃,接触新的东西多么,之前学 Java8 ,看了本《 Java 8 in Action 》就差不多熟悉了,8 -> 21 有什么比较友好的资料么 |
![]() | 4 sumarker PRO SpringBoot3.x 最低要求 JDK 是 17…… |
5 Vraw5 361 天前 直接上 21 就可以,没必要用 17 。上 spring 3 还能玩 graalvm |
![]() | 9 clf 361 天前 JDK17+SpringBoot3 吧。JDK 升级不大,有些需要换包。Springboot 如果自己写过 Starter 那么参考官方变动内容修改。 |
10 Leviathann 361 天前 @Koril 最重要的是学会用 sealed interface/class + record 进行业务建模 控制流多用 switch pattern matching 精简代码 |
12 ZZ74 361 天前 17 先把项目完成,同时避免太新有些库不支持。做完后升级 21 。一两吃 |
![]() | 13 Akitora 361 天前 via Android jdk 升级没什么大坑,几个 sun 和 javax 的包路径变了,springboot 升级就坑比较多了 |
14 yty2012g 361 天前 分开搞。 第一步,先升级 jdk 17 + SpringBoot 2.x ,这一步可能遇到的就是 jdk 升级的一些问题,最好不要升级语言特性,没意义,如果可能,SpringBoot 升级到 2.7.x ,可以最大减轻后续升级的负担 第二步,升级 SpringBoot 3.x ,这一步遇到的问题更多的是 SpringBoot 的不兼容升级,从 2.7.x 升级上来阻力可以说是最低 第三步,升级 SpringBoot 3.2+ + JDK 21 , 开启 Virtual Thread ,充分享受性能红利。 我个人的建议是:放弃语法特性升级,关注 JVM 升级即可,这样可以给自己留下最大的退路 |
16 Yukineko 361 天前 直接用 jdk21 吧,java8 的旧项目升级会比较多坑,新项目直接用没什么坑。 |
17 Ayanokouji 361 天前 @yty2012g 你这更折腾人 |
18 Ayanokouji 361 天前 这么说吧 SpringBoot 2.x 非商业版已经结束维护了。 新项目直接上 21 + spring boot3.3 吧, 3.2 马上也结束维护了 |
19 yty2012g 361 天前 @Goooooos #15 没有 DDL 的项目当然可以。有 DDL 的项目当然还是从稳健出发,假如真有解决不了的问题,是不是能够快速的回退到团队熟悉的技术栈上。 |
20 Koril OP @yty2012g DDL 比较宽松,业务上的问题应该也没有,简单的单体,登陆注册权限( SpringSecurity ),增删改查( JPA ),加一些定时任务,还有发发邮件之类的,都是以前 jdk8+springboot2.x 做了无数遍的东西。 |
![]() | 21 Rust2015 361 天前 我个人的体会: 如果,你学习,不管是在 GitHub 下的代码还是别地下的代码,基本上跑 JDK11 都会报错,只有用 JDK8 然后,你自己做项目,当然了,spring boot3.x 最低的支持也是 JDK17 ,这个没问题,你跑 JDK21 当然,像我,JDK8 、11 、17 、21 我都安装了,看代码选的最多的是 JDK8 ,在 idea 可以选择的 |
![]() | 22 sagaxu 361 天前 ![]() 8 -> 17, sb2 -> sb3, 换汤不换药,学不到新东西的。 直接试试 Quarkus 和 Vertx 或者 Micronaut ,JDK 尝试一下 GraalVM ,还可以玩一下 AOT 打包成 native image 。 如果还有精力,不妨再试试 Kotlin 写后端,Vertx 中使用 coroutine 非常爽。 |
23 chuck1in 361 天前 spring boot 3 最低支持 jdk17 op 你想换个技术栈的话试试 www.mjga.cc 这一套技术栈呢?就是你要的单体应用的选型。 |
![]() | 24 hairoy 360 天前 via Android 我的建议是,先升级到 spring boot 3.0.0 和 spring 6.0.0 ,然后再升级到 3.0.final, 再升级到 3.1.0, 再升级到 3.1.final ,依次升级到 3.3.x |
![]() | 25 newaccount 360 天前 怪坑没有,写法变动挺大的,尤其是 spring security 很多 abstract class 都没了,实现 interface 也变成了实现 bean 不过即使这样也得上啊,没碰过就一直不会啊 |
![]() | 26 cleanery 360 天前 单体简单项目, 直接一步到位搭好框架, 把业务代码迁移过来就好了 |
27 flmn 360 天前 java 直接 21 。 如果是在既有项目上 springboot 2->3 ,还是有些需要折腾的。 但是你是新项目啊,大胆的用 springboot 3 吧! springboot 的好处就是,这么多年的,虽然一直在升级,但是里面的骨子,一直很稳定。 |
28 spritecn 360 天前 java17 还是有用的 G1 解决稳定高效, 语法方面 文本块,和 lamda 快捷操作都很有用,springBoot 2.x 蛮好,没必要硬升 |
29 Koril OP @spritecn @flmn @cleanery @newaccount 感谢各位老哥的建议,今天已经用上了 Java 21 + Spring Boot 3.3.4 + Spring Security 6.3.3 登陆注册 jwt 两个钟头就全搞好了,剩下的就是权限划分+业务代码了。 除了语法的些微改变之外,最大的感受就是老项目的那些黄色波浪线全部消失了,因为是独立开发的新项目,终于不用再忍受老项目里,各种手写奇奇怪怪的校验工具类,实现类,加密类了,还有毫无意义的自定义抽象和流程(明明框架全部都有,引用了框架,又不好好使用框架,真是最大的槽点)。 最佳实践 + 整齐划一 + 规范的感觉真好,就像是从瘴气雨林来到了大草原。 我接下来会接着学习 Java 21 的新特性,感谢。 @chuck1in @sagaxu 业余时间我会了解下,之前听说过,感觉蛮高级。 |
30 chuck1in 360 天前 @Koril 你是采用的 jwt + cookie 的方式做的身份认证吗?是的话可以根据这个代码做一下对比参考试试看。 https://github.com/ccmjga/mjga-scaffold/tree/main/src/main/java/com/mjga/config/security |
![]() | 31 Jim2Chen 354 天前 spring3 的话,是建议用 SpringData JPA 还是 mybatis 啊 |
33 Koril OP |
![]() | 34 fuxinya 335 天前 升 JDK 我反正没遇见问题,Java 向下兼容还是挺 nb 的,毕竟保守派。 目前我是 kotlin + gradle + JDK 21 + Spring boot 3.3 |