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

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

  •  
  •   Koril · 1 天前 · 1464 次点击

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

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

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

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

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

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

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

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

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

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

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

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