gzk329
V2EX  ›  Java

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

  •  
  •   gzk329 · Aug 24, 2023 · 5084 views
    This topic created in 1171 days ago, the information mentioned may be changed or developed.
    Supplement 1  ·  Aug 25, 2023

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

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


    顺便推荐一下我的启动耗时分析项目,无需修改代码,只需要添加个启动参数就能看到启动过程的耗时分析报告 https://github.com/linyimin0812/spring-startup-analyzer
    zjp
    zjp
    Aug 24, 2023 via Android
    12
    预先加载和提高启动速度不是矛盾的吗?
    vitoliu
    vitoliu
    Aug 24, 2023
    14
    @linyimin520812 #11 这个牛啊,看起来很不错,我明儿个试试。
    vitoliu
    vitoliu
    Aug 24, 2023
    15
    @linyimin520812 #11 有个问题,如果 PostConstruct 抛出异常了,正常情况下应该 shutdown 才对,异步加载抛出异常应该不会阻塞 spring 容器启动吧?这样会不会带着 bug 启动
    zhiyu1998
    zhiyu1998
    Aug 24, 2023
    16
    @linyimin520812 学习了
    richcat
    richcat
    Aug 24, 2023
    17
    CDS ,起码会加载的快
    touchmii
    touchmii
    Aug 24, 2023
    18
    @mmdsun 没有反射是可以的,不过那就不是 Java 了
    mmdsun
    mmdsun
    Aug 24, 2023
    19
    @touchmii
    我从两年前开始用都一直都支持反射,不知道没有反射是什么意思,可能是配置不对?
    touchmii
    touchmii
    Aug 25, 2023
    20
    @mmdsun native-image 是用 GraalVM 来完成的, 是我落伍了,简单的反射是支持的, 但是用到反射的框架不一定支持。
    frank42a
    frank42a
    Aug 25, 2023
    21
    @linyimin520812 非常不错
    BQsummer
    BQsummer
    Aug 25, 2023
    22
    springboot 启动慢的原因是单线程初始化各种复杂业务相关的 bean 导致的吧, 加 cpu 能解决部分问题
    BQsummer
    BQsummer
    Aug 25, 2023
    23
    或者试试 serveless 冷启动加速相关的技术, 比如 amazon 的 snapstart
    linyimin520812
    linyimin520812
    Aug 27, 2023
    24
    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
    gzk329
    OP
    Aug 28, 2023
    25
    @linyimin520812 用的是 JDK8
    frank42a
    frank42a
    Aug 30, 2023
    26
    JDK 8 可以用 CDS 吗?
    linyimin520812
    linyimin520812
    Sep 7, 2023
    27
    @vitoliu #15 谢谢提醒,试了一下,异步加载抛出异常会阻塞 Spring 容器启动,整个应用会启动失败
    linyimin520812
    linyimin520812
    Sep 7, 2023
    28
    @frank42a #26 JDK8 使用 CDS 的作用应该不大,毕竟只作用于 Boot Class Loader 加载的类
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1457 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 05:17 · PVG 13:17 · LAX 21:17 · JFK 00:17
    ♥ Do have faith in what you're doing.