【问题标题】:Spring Boot initialization not completing [Application stuck]Spring Boot 初始化未完成 [应用程序卡住]
【发布时间】:2020-04-30 21:15:00
【问题描述】:

在启动 Spring 启动时,应用程序卡住并且 SpringApplication.run 没有返回。

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class AccountServiceApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(AccountServiceApplication.class, args);
        System.out.println("----------------------------- I'm done -------------------------");
    }
}

我可以看到 Spring 创建了所有的 bean 但它永远不会返回,虽然嵌入式 tomcat 是在 9000 上启动的,但它没有在监听

class org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory's object [after] tomcatEmbeddedServletContainerFactory
[05/16/19 06:17:44:044 IST]  INFO tomcat.TomcatEmbeddedServletContainer: : Tomcat initialized with port(s): 9000 (http)
May 16, 2019 6:17:44 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-9000"]
May 16, 2019 6:17:44 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Tomcat]
Trying 127.0.0.1...
Connection failed: Connection refused
Trying ::1...
telnet: Unable to connect to remote host: Connection refused

应用程序在创建 JMS 连接后永远卡住。

class org.springframework.expression.spel.support.StandardEvaluationContext's object [after] integrationEvaluationContext
class org.springframework.integration.handler.LoggingHandler's object [after] _org.springframework.integration.errorLogger.handler
class org.springframework.integration.config.ConsumerEndpointFactoryBean's object [before]_org.springframework.integration.errorLogger
class org.springframework.integration.config.ConsumerEndpointFactoryBean's object [after] _org.springframework.integration.errorLogger
class org.springframework.integration.config.IdGeneratorConfigurer's object [before]org.springframework.integration.config.IdGeneratorConfigurer#0
class org.springframework.integration.config.IdGeneratorConfigurer's object [after] org.springframework.integration.config.IdGeneratorConfigurer#0
[05/16/19 05:58:02:002 IST]  INFO annotation.AnnotationMBeanExporter: : Registering beans for JMX exposure on startup
class org.springframework.expression.spel.support.StandardEvaluationContext's object [after] integrationEvaluationContext
[05/16/19 05:58:02:002 IST]  INFO support.DefaultLifecycleProcessor: : Starting beans in phase 0
[05/16/19 05:58:02:002 IST]  INFO endpoint.EventDrivenConsumer: : Adding {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel
[05/16/19 05:58:02:002 IST]  INFO channel.PublishSubscribeChannel: : Channel 'application:9000.errorChannel' has 1 subscriber(s).
[05/16/19 05:58:02:002 IST]  INFO endpoint.EventDrivenConsumer: : started _org.springframework.integration.errorLogger
[05/16/19 05:58:02:002 IST]  INFO support.DefaultLifecycleProcessor: : Starting beans in phase 2147483647
[05/16/19 05:58:02:002 IST]  INFO connection.CachingConnectionFactory: : Established shared JMS Connection: ActiveMQConnection {id=ID:SDSD121SFSSDF.local-54305-1557966482134-1:1,clientId=null,started=false}

关于如何调试它的任何指针?

【问题讨论】:

  • 您是否检查过它正在监听本地主机接口?运行netstat -an | grep 9000 并查找LISTENING
  • 在应用程序启动/引导之前,它不是,

标签: java spring spring-boot activemq


【解决方案1】:

在您的应用程序中,可能存在一个无限循环的线程。您的应用程序启动失败。并且这个线程没有退出。进程还在,看来启动成功了。

【讨论】:

  • 原来 ActiveMQ 队列 bean 创建失败/永远占用。我删除了 bean 创建并使用带有 JMSTemplate 的字符串名称。那解决了它。仍然不太确定创建 ActiveMQ bean 出了什么问题。
【解决方案2】:

在这种情况下可能会有所帮助的常见做法是“catch the lion in the desert / binary search”查找问题的原因。

尝试注释掉应用程序的一半,直到应用程序启动时没有问题。然后您将能够确定有问题的代码/部分。

【讨论】:

    【解决方案3】:

    我也卡在了:

    INFO support.DefaultLifecycleProcessor: : Starting beans in phase X
    

    这是因为在@RestController 类中我让@GetMapping 方法返回了一个@Entity,而它应该是一个DTO。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-13
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 2022-07-22
      • 2019-09-06
      • 2021-06-22
      • 1970-01-01
      相关资源
      最近更新 更多