Koril
V2EX  ›  Java

咨询贴: Java8 -> Java17, Springboot2.x -> Springboot3.x

  •  
  •   Koril · Oct 14, 2024 · 7524 views
    This topic created in 749 days ago, the information mentioned may be changed or developed.

    各位大佬,想请教下从 Java8 升级到 Java 17 ,SpringBoot2.x 升级到 SpringBoot3.x 的建议


    详细描述

    之前一直用的 Java8 + SpringBoot2.x 的组合,单体和微服务都搞过,最近有一个新项目,可以允许我自由选择技术栈。

    项目不复杂,是个单体应用,用到的东西都算中规中矩:

    Spring 框架: SpringBoot, SpringData JPA, SpringSecurity

    数据库: MySQL/PostgreSQL, Redis

    其他集成: Kafka, Quartz


    我的想法

    这次算是个机会,有机会能接触新的东西,而且业务简单,所以想尝试下 Java8 + SpringBoot3.x ,不过这个项目是我一个人搞,万一有啥问题,都得我一个人自己解决,我担心会有些怪坑。

    想问下老哥们的建议,有参考的文章博客都行,感谢大家!

    34 replies  •  2024-11-09 09:45:54 +08:00
    Leviathann
    Leviathann
    Oct 14, 2024
    1
    17 没意义,不如直接 21
    Sezxy
    Sezxy
    Oct 14, 2024
    2
    直接上 jdk21
    Koril
    Koril
    OP
    Oct 14, 2024
    3
    @Leviathann 我刚想问这个哈哈哈哈,直接上 21 是不是更好,一步到胃,接触新的东西多么,之前学 Java8 ,看了本《 Java 8 in Action 》就差不多熟悉了,8 -> 21 有什么比较友好的资料么
    sumarker
    sumarker
    Oct 14, 2024
    4
    SpringBoot3.x 最低要求 JDK 是 17……
    Vraw5
    Vraw5
    Oct 14, 2024
    5
    直接上 21 就可以,没必要用 17 。上 spring 3 还能玩 graalvm
    Koril
    Koril
    OP
    Oct 14, 2024
    6
    @sumarker 兄弟这个我知道,所以省略号是什么意思😂
    Koril
    Koril
    OP
    Oct 14, 2024
    7
    ”所以想尝试下 Java8 + SpringBoot3.x“ 这句话写错了,不好意思,
    @sumarker
    sumarker
    sumarker
    Oct 14, 2024
    8
    @Koril #6 我看到你说想尝试 java 8 + springboot 3.x ,理解错了,哈哈
    clf
    clf
    Oct 14, 2024
    9
    JDK17+SpringBoot3 吧。JDK 升级不大,有些需要换包。Springboot 如果自己写过 Starter 那么参考官方变动内容修改。
    Leviathann
    Leviathann
    Oct 14, 2024
    10
    @Koril 最重要的是学会用 sealed interface/class + record 进行业务建模
    控制流多用 switch pattern matching 精简代码
    sumarker
    sumarker
    Oct 14, 2024
    11
    @Koril #7 如果是新项目,只要处理好 jdk 版本的问题,其他的包依赖都不是什么大问题,直接 springboot 3.x + jdk 21
    ZZ74
    ZZ74
    Oct 14, 2024
    12
    17 先把项目完成,同时避免太新有些库不支持。做完后升级 21 。一🐟两吃
    Akitora
    Akitora
    Oct 14, 2024 via Android
    13
    jdk 升级没什么大坑,几个 sun 和 javax 的包路径变了,springboot 升级就坑比较多了
    yty2012g
    yty2012g
    Oct 14, 2024
    14
    分开搞。
    第一步,先升级 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 升级即可,这样可以给自己留下最大的退路
    Sezxy
    Sezxy
    Oct 14, 2024
    15
    @yty2012g #14 OP 是新项目,一步到位就好了
    Yukineko
    Yukineko
    Oct 14, 2024
    16
    直接用 jdk21 吧,java8 的旧项目升级会比较多坑,新项目直接用没什么坑。
    Ayanokouji
    Ayanokouji
    Oct 14, 2024
    17
    @yty2012g 你这更折腾人
    Ayanokouji
    Ayanokouji
    Oct 14, 2024
    18
    这么说吧 SpringBoot 2.x 非商业版已经结束维护了。
    新项目直接上 21 + spring boot3.3 吧, 3.2 马上也结束维护了
    yty2012g
    yty2012g
    Oct 14, 2024
    19
    @Goooooos #15 没有 DDL 的项目当然可以。有 DDL 的项目当然还是从稳健出发,假如真有解决不了的问题,是不是能够快速的回退到团队熟悉的技术栈上。
    Koril
    Koril
    OP
    Oct 14, 2024
    20
    @yty2012g DDL 比较宽松,业务上的问题应该也没有,简单的单体,登陆注册权限( SpringSecurity ),增删改查( JPA ),加一些定时任务,还有发发邮件之类的,都是以前 jdk8+springboot2.x 做了无数遍的东西。
    Rust2015
    Rust2015
    Oct 14, 2024
    21
    我个人的体会:

    如果,你学习,不管是在 GitHub 下的代码还是别地下的代码,基本上跑 JDK11 都会报错,只有用 JDK8

    然后,你自己做项目,当然了,spring boot3.x 最低的支持也是 JDK17 ,这个没问题,你跑 JDK21

    当然,像我,JDK8 、11 、17 、21 我都安装了,看代码选的最多的是 JDK8 ,在 idea 可以选择的
    sagaxu
    sagaxu
    Oct 14, 2024❤️1
    22
    8 -> 17, sb2 -> sb3, 换汤不换药,学不到新东西的。

    直接试试 Quarkus 和 Vertx 或者 Micronaut ,JDK 尝试一下 GraalVM ,还可以玩一下 AOT 打包成 native image 。

    如果还有精力,不妨再试试 Kotlin 写后端,Vertx 中使用 coroutine 非常爽。
    chuck1in
    chuck1in
    Oct 14, 2024
    23
    spring boot 3 最低支持 jdk17
    op 你想换个技术栈的话试试 www.mjga.cc 这一套技术栈呢?就是你要的单体应用的选型。
    hairoy
    hairoy
    Oct 14, 2024 via Android
    24
    我的建议是,先升级到 spring boot 3.0.0 和 spring 6.0.0 ,然后再升级到 3.0.final, 再升级到 3.1.0, 再升级到 3.1.final ,依次升级到 3.3.x
    newaccount
    newaccount
    Oct 15, 2024
    25
    怪坑没有,写法变动挺大的,尤其是 spring security
    很多 abstract class 都没了,实现 interface 也变成了实现 bean
    不过即使这样也得上啊,没碰过就一直不会啊
    cleanery
    cleanery
    Oct 15, 2024
    26
    单体简单项目, 直接一步到位搭好框架, 把业务代码迁移过来就好了
    flmn
    flmn
    Oct 15, 2024
    27
    java 直接 21 。
    如果是在既有项目上 springboot 2->3 ,还是有些需要折腾的。
    但是你是新项目啊,大胆的用 springboot 3 吧!
    springboot 的好处就是,这么多年的,虽然一直在升级,但是里面的骨子,一直很稳定。
    spritecn
    spritecn
    Oct 15, 2024
    28
    java17 还是有用的 G1 解决稳定高效, 语法方面 文本块,和 lamda 快捷操作都很有用,springBoot 2.x 蛮好,没必要硬升
    Koril
    Koril
    OP
    Oct 15, 2024
    29
    @spritecn @flmn @cleanery @newaccount
    感谢各位老哥的建议,今天已经用上了 Java 21 + Spring Boot 3.3.4 + Spring Security 6.3.3

    登陆注册 jwt 两个钟头就全搞好了,剩下的就是权限划分+业务代码了。

    除了语法的些微改变之外,最大的感受就是老项目的那些黄色波浪线全部消失了,因为是独立开发的新项目,终于不用再忍受老项目里,各种手写奇奇怪怪的校验工具类,实现类,加密类了,还有毫无意义的自定义抽象和流程(明明框架全部都有,引用了框架,又不好好使用框架,真是最大的槽点)。

    最佳实践 + 整齐划一 + 规范的感觉真好,就像是从瘴气雨林来到了大草原。

    我接下来会接着学习 Java 21 的新特性,感谢。

    @chuck1in @sagaxu 业余时间我会了解下,之前听说过,感觉蛮高级。
    chuck1in
    chuck1in
    Oct 15, 2024
    30
    @Koril
    你是采用的 jwt + cookie 的方式做的身份认证吗?是的话可以根据这个代码做一下对比参考试试看。

    https://github.com/ccmjga/mjga-scaffold/tree/main/src/main/java/com/mjga/config/security
    Jim2Chen
    Jim2Chen
    Oct 21, 2024
    31
    spring3 的话,是建议用 SpringData JPA 还是 mybatis 啊
    slomo
    slomo
    Oct 25, 2024
    32
    @Jim2Chen 这个看业务吧,如果是新项目从 0 到 1 ,单表操作 jpa 就行。老项目 sql 太多了没法改,那还是继续 mybatis
    Koril
    Koril
    OP
    Oct 25, 2024
    33
    @Jim2Chen @slomo SpringBoot 3 对于 JPA 还是 MyBatis 的选型,我感觉区别不大,就看团队对哪个更熟悉了,JPA 的很多特性(不是仅仅是简单的 JpaRepository 的 单表 CRUD )的学习门槛很高,多表的关联,对数据库的设计也很讲究,后期新人维护成本高,我觉得它就是属于那种不会用的人会吐槽到累的,相比之下,MyBatis 更直观一点,国内培训机构都爱用,新人维护成本低。
    fuxinya
    fuxinya
    Nov 9, 2024
    34
    升 JDK 我反正没遇见问题,Java 向下兼容还是挺 nb 的,毕竟保守派。
    目前我是 kotlin + gradle + JDK 21 + Spring boot 3.3
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3976 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 00:51 · PVG 08:51 · LAX 16:51 · JFK 19:51
    ♥ Do have faith in what you're doing.