telnetning
V2EX  ›  Java

Spring 启动阶段接口 500

  •  
  •   telnetning · Mar 17, 2021 · 4064 views
    This topic created in 2064 days ago, the information mentioned may be changed or developed.

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

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

    具体是:

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

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

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

    https://docs.spring.io/spring-boot/docs/2.4.3/reference/htmlsingle/#boot-features-application-availability-managing
    jimrok
    jimrok
    Mar 17, 2021
    20
    先初始化 bean,再启动 tomcat
    telnetning
    telnetning
    OP
    Mar 19, 2021
    21
    @chenqh Spring 启动肯定比 py 应用启动慢多了的
    telnetning
    telnetning
    OP
    Mar 19, 2021
    22
    @bianjp 是指让网关或者负载均衡器在开放应用给外部之前先检查接口应用状态?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3807 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 111ms · UTC 09:49 · PVG 17:49 · LAX 01:49 · JFK 04:49
    ♥ Do have faith in what you're doing.