各位大佬,想请教下从 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 34 天前
17 没意义,不如直接 21
|
2
Goooooos 34 天前
直接上 jdk21
|
3
Koril OP @Leviathann 我刚想问这个哈哈哈哈,直接上 21 是不是更好,一步到胃,接触新的东西多么,之前学 Java8 ,看了本《 Java 8 in Action 》就差不多熟悉了,8 -> 21 有什么比较友好的资料么
|
4
sumarker 34 天前
SpringBoot3.x 最低要求 JDK 是 17……
|
5
Vraw5 34 天前
直接上 21 就可以,没必要用 17 。上 spring 3 还能玩 graalvm
|
9
clf 34 天前
JDK17+SpringBoot3 吧。JDK 升级不大,有些需要换包。Springboot 如果自己写过 Starter 那么参考官方变动内容修改。
|
10
Leviathann 34 天前
@Koril 最重要的是学会用 sealed interface/class + record 进行业务建模
控制流多用 switch pattern matching 精简代码 |
12
ZZ74 34 天前
17 先把项目完成,同时避免太新有些库不支持。做完后升级 21 。一🐟两吃
|
13
Akitora 34 天前 via Android
jdk 升级没什么大坑,几个 sun 和 javax 的包路径变了,springboot 升级就坑比较多了
|
14
yty2012g 34 天前
分开搞。
第一步,先升级 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 34 天前
直接用 jdk21 吧,java8 的旧项目升级会比较多坑,新项目直接用没什么坑。
|
17
Ayanokouji 34 天前
@yty2012g 你这更折腾人
|
18
Ayanokouji 34 天前
这么说吧 SpringBoot 2.x 非商业版已经结束维护了。
新项目直接上 21 + spring boot3.3 吧, 3.2 马上也结束维护了 |
20
Koril OP @yty2012g DDL 比较宽松,业务上的问题应该也没有,简单的单体,登陆注册权限( SpringSecurity ),增删改查( JPA ),加一些定时任务,还有发发邮件之类的,都是以前 jdk8+springboot2.x 做了无数遍的东西。
|
21
Rust2015 34 天前
我个人的体会:
如果,你学习,不管是在 GitHub 下的代码还是别地下的代码,基本上跑 JDK11 都会报错,只有用 JDK8 然后,你自己做项目,当然了,spring boot3.x 最低的支持也是 JDK17 ,这个没问题,你跑 JDK21 当然,像我,JDK8 、11 、17 、21 我都安装了,看代码选的最多的是 JDK8 ,在 idea 可以选择的 |
22
sagaxu 34 天前
8 -> 17, sb2 -> sb3, 换汤不换药,学不到新东西的。
直接试试 Quarkus 和 Vertx 或者 Micronaut ,JDK 尝试一下 GraalVM ,还可以玩一下 AOT 打包成 native image 。 如果还有精力,不妨再试试 Kotlin 写后端,Vertx 中使用 coroutine 非常爽。 |
23
chuck1in 34 天前
spring boot 3 最低支持 jdk17
op 你想换个技术栈的话试试 www.mjga.cc 这一套技术栈呢?就是你要的单体应用的选型。 |
24
hairoy 34 天前 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 34 天前
怪坑没有,写法变动挺大的,尤其是 spring security
很多 abstract class 都没了,实现 interface 也变成了实现 bean 不过即使这样也得上啊,没碰过就一直不会啊 |
26
cleanery 34 天前
单体简单项目, 直接一步到位搭好框架, 把业务代码迁移过来就好了
|
27
flmn 34 天前
java 直接 21 。
如果是在既有项目上 springboot 2->3 ,还是有些需要折腾的。 但是你是新项目啊,大胆的用 springboot 3 吧! springboot 的好处就是,这么多年的,虽然一直在升级,但是里面的骨子,一直很稳定。 |
28
spritecn 33 天前
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 33 天前
@Koril
你是采用的 jwt + cookie 的方式做的身份认证吗?是的话可以根据这个代码做一下对比参考试试看。 https://github.com/ccmjga/mjga-scaffold/tree/main/src/main/java/com/mjga/config/security |
31
Jim2Chen 27 天前
spring3 的话,是建议用 SpringData JPA 还是 mybatis 啊
|
33
Koril OP |
34
fuxinya 9 天前
升 JDK 我反正没遇见问题,Java 向下兼容还是挺 nb 的,毕竟保守派。
目前我是 kotlin + gradle + JDK 21 + Spring boot 3.3 |