V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Koril
V2EX  ›  Java

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

  •  
  •   Koril · 31 天前 · 2489 次点击

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


    详细描述

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

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

    Spring 框架: SpringBoot, SpringData JPA, SpringSecurity

    数据库: MySQL/PostgreSQL, Redis

    其他集成: Kafka, Quartz


    我的想法

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

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

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

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

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

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

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

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

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

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

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

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

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

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