Spring 新人,请教下这个问题,搜索相关问题只搜索到 dubbo 延迟暴露
相关的,但是这个项目不是 dubbo 的,就是一般的 Spring Boot 应用。
问题是,在 Spring 启动阶段,会有大概 10s 的端口已监听但是访问 500 的情况。
具体是:
请教下大家,这个问题应该如何解决呢,正常的理想情况是,在整个应用启动完整之后,才监听端口,保证监听即可用。
![]() | 1 huifer 2021-03-17 11:34:46 +08:00 Bean 实例化顺序 |
![]() | 2 chendy 2021-03-17 11:44:20 +08:00 你确定是因为未启动好报的 500 么?应用的报错是什么? 启动 20s 多少慢了点吧…… |
3 telnetning OP @chendy 应该是的,中间报错的请求,是 getBean 的结果为 null |
4 telnetning OP @huifer 多谢,我了解下。是需要让对应的 Bean 在 Web 容器之前加载完成吗? |
![]() | 5 Kasumi20 2021-03-17 12:44:04 +08:00 Spring 监听端口吗?是 Servlet 容器在监听吧。。。 |
![]() | 6 huifer 2021-03-17 12:50:04 +08:00 @telnetning 不如放出代码在看看,getBean 为 null 就说明 bean 没有加载 |
7 scxiazi 2021-03-17 12:51:56 +08:00 ![]() 你倒是把报错信息放出来 |
8 telnetning OP @Kasumi20 嗯嗯,是的 |
9 telnetning OP @scxiazi 公司网络限制,贴不出来。。。 |
10 telnetning OP @huifer 公司网络限制,贴不出来。。。 |
![]() | 11 yRebelHero 2021-03-17 16:31:46 +08:00 另外的端口监听吗?试试在 Application 这个类 implements CommandLineRunner,再重写 run 方法新建一个线程来监听。我之前也遇到过类似的情况,就是需要监听另外的端口,但是这个端口始终没法监听到,具体报没报错忘了,但是我是这么解决的。 |
12 chenqh 2021-03-17 16:48:27 +08:00 java 启动这么慢的吗? |
13 telnetning OP @chenqh 我一直以为 Spring 应用就是这么慢来着。。。 |
14 chenqh 2021-03-17 17:01:57 +08:00 @telnetning 我用 py,启动不到 1s 钟的呀,可能是我用轻型框架的原因 |
![]() | 15 qwerthhusn 2021-03-17 17:34:57 +08:00 报 500 看日志堆栈啊 |
16 arvinsilm 2021-03-17 18:06:27 +08:00 加个 filter 之类的东西,系统没启动完成返回统一错误信息 |
19 bianjp PRO 先使用 Spring Boot Actuator 的健康检查接口检查应用状态,应用就绪后再开放给外部访问。 https://docs.spring.io/spring-boot/docs/2.4.3/reference/htmlsingle/#boot-features-application-availability-managing |
![]() | 20 jimrok 2021-03-17 22:07:25 +08:00 先初始化 bean,再启动 tomcat |
21 telnetning OP @chenqh Spring 启动肯定比 py 应用启动慢多了的 |
22 telnetning OP @bianjp 是指让网关或者负载均衡器在开放应用给外部之前先检查接口应用状态? |