一个 Springboot 程序,可以快速启动吗?除了运行参数会有变化,其他都不变,希望把其他部分预先加载了,提高启动速度 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gzk329
V2EX    Java

一个 Springboot 程序,可以快速启动吗?除了运行参数会有变化,其他都不变,希望把其他部分预先加载了,提高启动速度

  •  
  •   gzk329 2023-08-24 17:27:36 +08:00 4113 次点击
    这是一个创建于 844 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言    2023-08-25 16:31:09 +08:00

    我写了个脚本试了一下,麻了。。。。。

    28 条回复    2023-09-07 12:42:51 +08:00
    gzk329
        1
    gzk329  
    OP
       2023-08-24 17:28:10 +08:00
    改动需要外置,就是这个 springboot 的程序 jar 包不能动
    sss15
        2
    sss15  
       2023-08-24 17:29:24 +08:00
    nacos 配置中心动态刷新 可能是你需要的
    selca
        3
    selca  
       2023-08-24 17:33:22 +08:00
    你把参数做成单例的变量呗
    gzk329
        4
    gzk329  
    OP
       2023-08-24 17:34:50 +08:00
    java -jar springboot.jar --cOnf=value 每次变化的就是 value ,但是 spring 项目启动太慢了,想加快这个速度。但是这个 springboot.jar 又不是我的,所以对其内部的改动最好不要很大。
    Foxkeh
        5
    Foxkeh  
       2023-08-24 17:42:11 +08:00
    这边建议您升级电脑配置
    bill110100
        6
    bill110100  
       2023-08-24 17:47:47 +08:00
    配置中心?配置中心可以给需要热刷新的 configration 加一个注解,在收到配置修改的时候,对应 bean 会被重新装配一遍。
    bill110100
        7
    bill110100  
       2023-08-24 17:49:58 +08:00
    @gzk329 你这个没可能,代码不是你的,鬼知道对应环境变量影响了多少功能。
    starxg
        8
    starxg  
       2023-08-24 18:22:25 +08:00
    解决方案还是有的,花钱。https://www.azul.com/products/components/readynow
    Elilili
        9
    Elilili  
       2023-08-24 18:27:04 +08:00
    为什么楼上都在说配置中心啊
    frank42a
        10
    frank42a  
       2023-08-24 18:31:53 +08:00
    放弃 SpringBoot ,用 Spring MVC 一样行
    linyimin520812
        11
    linyimin520812  
       2023-08-24 18:43:09 +08:00 via iPhone
    可以看看 CDS: https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html


    顺便推荐一下我的启动耗时分析项目,无需修改代码,只需要添加个启动参数就能看到启动过程的耗时分析报告 https://github.com/linyimin0812/spring-startup-analyzer
    zjp
        12
    zjp  
       2023-08-24 19:59:49 +08:00 via Android
    预先加载和提高启动速度不是矛盾的吗?
    mmdsun
        13
    mmdsun  
       2023-08-24 21:46:31 +08:00
    vitoliu
        14
    vitoliu  
       2023-08-24 22:17:25 +08:00
    @linyimin520812 #11 这个牛啊,看起来很不错,我明儿个试试。
    vitoliu
        15
    vitoliu  
       2023-08-24 22:23:16 +08:00
    @linyimin520812 #11 有个问题,如果 PostConstruct 抛出异常了,正常情况下应该 shutdown 才对,异步加载抛出异常应该不会阻塞 spring 容器启动吧?这样会不会带着 bug 启动
    zhiyu1998
        16
    zhiyu1998  
       2023-08-24 22:39:08 +08:00
    @linyimin520812 学习了
    richcat
        17
    richcat  
       2023-08-24 22:46:01 +08:00
    CDS ,起码会加载的快
    touchmii
        18
    touchmii  
       2023-08-24 23:20:29 +08:00
    @mmdsun 没有反射是可以的,不过那就不是 Java 了
    mmdsun
        19
    mmdsun  
       2023-08-24 23:31:54 +08:00
    @touchmii
    我从两年前开始用都一直都支持反射,不知道没有反射是什么意思,可能是配置不对?
    touchmii
        20
    touchmii  
       2023-08-25 07:35:48 +08:00
    @mmdsun native-image 是用 GraalVM 来完成的, 是我落伍了,简单的反射是支持的, 但是用到反射的框架不一定支持。
    frank42a
        21
    frank42a  
       2023-08-25 10:07:53 +08:00
    @linyimin520812 非常不错
    BQsummer
        22
    BQsummer  
       2023-08-25 11:24:52 +08:00
    springboot 启动慢的原因是单线程初始化各种复杂业务相关的 bean 导致的吧, 加 cpu 能解决部分问题
    BQsummer
        23
    BQsummer  
       2023-08-25 11:28:00 +08:00
    或者试试 serveless 冷启动加速相关的技术, 比如 amazon 的 snapstart
    linyimin520812
        24
    linyimin520812  
       2023-08-27 15:08:06 +08:00
    OP 用的什么版本的 JDK 呀?低版本的 CDS 只能作用与 Boot Class Loader 加载的类,不能作用于 App Class Loader 或者自定义的 Class Loader 加载的类。Java 10 中将 CDS 扩展为 AppCDS ,不止能够作用于 Boot Class Loader ,App Class Loader 和自定义的 Class Loader 也都能够起作用,大大加大了 CDS 的适用范围。

    https://khotyn.com/blog/posts/2018-03-21-app-cds/
    gzk329
        25
    gzk329  
    OP
       2023-08-28 08:40:34 +08:00
    @linyimin520812 用的是 JDK8
    frank42a
        26
    frank42a  
       2023-08-30 10:23:26 +08:00
    JDK 8 可以用 CDS 吗?
    linyimin520812
        27
    linyimin520812  
       2023-09-07 12:41:38 +08:00
    @vitoliu #15 谢谢提醒,试了一下,异步加载抛出异常会阻塞 Spring 容器启动,整个应用会启动失败
    linyimin520812
        28
    linyimin520812  
       2023-09-07 12:42:51 +08:00
    @frank42a #26 JDK8 使用 CDS 的作用应该不大,毕竟只作用于 Boot Class Loader 加载的类
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5505 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 39ms UTC 01:47 PVG 09:47 LAX 17:47 JFK 20:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86