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

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

  •  
  •   Koril · 4 天前 · 1687 次点击

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


    详细描述

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

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

    Spring 框架: SpringBoot, SpringData JPA, SpringSecurity

    数据库: MySQL/PostgreSQL, Redis

    其他集成: Kafka, Quartz


    我的想法

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

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

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

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

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

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

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

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

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

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

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

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

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

    https://github.com/ccmjga/mjga-scaffold/tree/main/src/main/java/com/mjga/config/security
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2567 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:21 · PVG 20:21 · LAX 05:21 · JFK 08:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.