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

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

  •  
  •   gzk329 · 247 天前 · 2969 次点击
    这是一个创建于 247 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  246 天前

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

    28 条回复    2023-09-07 12:42:51 +08:00
    gzk329
        1
    gzk329  
    OP
       247 天前
    改动需要外置,就是这个 springboot 的程序 jar 包不能动
    sss15
        2
    sss15  
       247 天前
    nacos 配置中心动态刷新 可能是你需要的
    selca
        3
    selca  
       247 天前
    你把参数做成单例的变量呗
    gzk329
        4
    gzk329  
    OP
       247 天前
    java -jar springboot.jar --conf=value 每次变化的就是 value ,但是 spring 项目启动太慢了,想加快这个速度。但是这个 springboot.jar 又不是我的,所以对其内部的改动最好不要很大。
    Foxkeh
        5
    Foxkeh  
       247 天前
    这边建议您升级电脑配置
    bill110100
        6
    bill110100  
       247 天前
    配置中心?配置中心可以给需要热刷新的 configration 加一个注解,在收到配置修改的时候,对应 bean 会被重新装配一遍。
    bill110100
        7
    bill110100  
       247 天前
    @gzk329 你这个没可能,代码不是你的,鬼知道对应环境变量影响了多少功能。
    starxg
        8
    starxg  
       247 天前
    解决方案还是有的,花钱。https://www.azul.com/products/components/readynow
    Elilili
        9
    Elilili  
       247 天前
    为什么楼上都在说配置中心啊
    frank42a
        10
    frank42a  
       247 天前
    放弃 SpringBoot ,用 Spring MVC 一样行
    linyimin520812
        11
    linyimin520812  
       247 天前 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  
       247 天前 via Android
    预先加载和提高启动速度不是矛盾的吗?
    mmdsun
        13
    mmdsun  
       246 天前
    vitoliu
        14
    vitoliu  
       246 天前
    @linyimin520812 #11 这个牛啊,看起来很不错,我明儿个试试。
    vitoliu
        15
    vitoliu  
       246 天前
    @linyimin520812 #11 有个问题,如果 PostConstruct 抛出异常了,正常情况下应该 shutdown 才对,异步加载抛出异常应该不会阻塞 spring 容器启动吧?这样会不会带着 bug 启动
    zhiyu1998
        16
    zhiyu1998  
       246 天前
    @linyimin520812 学习了
    richcat
        17
    richcat  
       246 天前
    CDS ,起码会加载的快
    touchmii
        18
    touchmii  
       246 天前
    @mmdsun 没有反射是可以的,不过那就不是 Java 了
    mmdsun
        19
    mmdsun  
       246 天前
    @touchmii
    我从两年前开始用都一直都支持反射,不知道没有反射是什么意思,可能是配置不对?
    touchmii
        20
    touchmii  
       246 天前
    @mmdsun native-image 是用 GraalVM 来完成的, 是我落伍了,简单的反射是支持的, 但是用到反射的框架不一定支持。
    frank42a
        21
    frank42a  
       246 天前
    @linyimin520812 非常不错
    BQsummer
        22
    BQsummer  
       246 天前
    springboot 启动慢的原因是单线程初始化各种复杂业务相关的 bean 导致的吧, 加 cpu 能解决部分问题
    BQsummer
        23
    BQsummer  
       246 天前
    或者试试 serveless 冷启动加速相关的技术, 比如 amazon 的 snapstart
    linyimin520812
        24
    linyimin520812  
       244 天前
    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
       243 天前
    @linyimin520812 用的是 JDK8
    frank42a
        26
    frank42a  
       241 天前
    JDK 8 可以用 CDS 吗?
    linyimin520812
        27
    linyimin520812  
       233 天前
    @vitoliu #15 谢谢提醒,试了一下,异步加载抛出异常会阻塞 Spring 容器启动,整个应用会启动失败
    linyimin520812
        28
    linyimin520812  
       233 天前
    @frank42a #26 JDK8 使用 CDS 的作用应该不大,毕竟只作用于 Boot Class Loader 加载的类
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2788 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:06 · PVG 20:06 · LAX 05:06 · JFK 08:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.