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

Spring 启动阶段接口 500

  •  
  •   telnetning · 261 天前 · 2070 次点击
    这是一个创建于 261 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Spring 新人,请教下这个问题,搜索相关问题只搜索到 dubbo 延迟暴露 相关的,但是这个项目不是 dubbo 的,就是一般的 Spring Boot 应用。

    问题是,在 Spring 启动阶段,会有大概 10s 的端口已监听但是访问 500 的情况。

    具体是:

    • 0-10s,Spring 还未监听端口
    • 10-20s,Spring 已经监听端口,但是整个应用未加载启动好,访问接口 500
    • 20s 以后,端口访问正常

    请教下大家,这个问题应该如何解决呢,正常的理想情况是,在整个应用启动完整之后,才监听端口,保证监听即可用。

    22 条回复    2021-03-19 10:39:36 +08:00
    huifer
        1
    huifer  
       261 天前
    Bean 实例化顺序
    chendy
        2
    chendy  
       261 天前
    你确定是因为未启动好报的 500 么?应用的报错是什么?
    启动 20s 多少慢了点吧……
    telnetning
        3
    telnetning  
    OP
       261 天前
    @chendy 应该是的,中间报错的请求,是 getBean 的结果为 null
    telnetning
        4
    telnetning  
    OP
       261 天前
    @huifer 多谢,我了解下。是需要让对应的 Bean 在 Web 容器之前加载完成吗?
    Kasumi20
        5
    Kasumi20  
       261 天前
    Spring 监听端口吗?是 Servlet 容器在监听吧。。。
    huifer
        6
    huifer  
       261 天前
    @telnetning 不如放出代码在看看,getBean 为 null 就说明 bean 没有加载
    scxiazi
        7
    scxiazi  
       261 天前   ❤️ 1
    你倒是把报错信息放出来
    telnetning
        8
    telnetning  
    OP
       261 天前
    @Kasumi20 嗯嗯,是的
    telnetning
        9
    telnetning  
    OP
       261 天前
    @scxiazi 公司网络限制,贴不出来。。。
    telnetning
        10
    telnetning  
    OP
       261 天前
    @huifer 公司网络限制,贴不出来。。。
    yRebelHero
        11
    yRebelHero  
       261 天前
    另外的端口监听吗?试试在 Application 这个类 implements CommandLineRunner,再重写 run 方法新建一个线程来监听。我之前也遇到过类似的情况,就是需要监听另外的端口,但是这个端口始终没法监听到,具体报没报错忘了,但是我是这么解决的。
    chenqh
        12
    chenqh  
       261 天前
    java 启动这么慢的吗?
    telnetning
        13
    telnetning  
    OP
       261 天前
    @chenqh 我一直以为 Spring 应用就是这么慢来着。。。
    chenqh
        14
    chenqh  
       261 天前
    @telnetning 我用 py,启动不到 1s 钟的呀,可能是我用轻型框架的原因
    qwerthhusn
        15
    qwerthhusn  
       261 天前
    报 500 看日志堆栈啊
    arvinsilm
        16
    arvinsilm  
       261 天前
    加个 filter 之类的东西,系统没启动完成返回统一错误信息
    qinxi
        17
    qinxi  
       261 天前
    @chenqh #12 解释型语言都快. 没运行到的 py 代码甚至不知道能不能跑
    chenqh
        18
    chenqh  
       261 天前
    @qinxi 原来是这个原因的吗,嗯嗯,应该是这个原因吧
    bianjp
        19
    bianjp  
       260 天前
    先使用 Spring Boot Actuator 的健康检查接口检查应用状态,应用就绪后再开放给外部访问。

    https://docs.spring.io/spring-boot/docs/2.4.3/reference/htmlsingle/#boot-features-application-availability-managing
    jimrok
        20
    jimrok  
       260 天前
    先初始化 bean,再启动 tomcat
    telnetning
        21
    telnetning  
    OP
       259 天前
    @chenqh Spring 启动肯定比 py 应用启动慢多了的
    telnetning
        22
    telnetning  
    OP
       259 天前
    @bianjp 是指让网关或者负载均衡器在开放应用给外部之前先检查接口应用状态?
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2406 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:26 · PVG 19:26 · LAX 03:26 · JFK 06:26
    ♥ Do have faith in what you're doing.