【问题标题】:Spring Boot App Freezes on StartupSpring Boot 应用程序在启动时冻结
【发布时间】:2017-12-18 20:36:44
【问题描述】:

我有一个使用 Oracle 数据源的 Spring Boot 应用程序,该应用程序在启动时冻结。控制台输出的最后一条消息是:

[2017-12-18T15:34:19,425] INFO  org.hibernate.dialect.Dialect HHH000400: Using dialect: org.hibernate.dialect.Oracle10gDialect 
[2017-12-18T15:34:27,186] INFO  org.hibernate.hql.internal.QueryTranslatorFactoryInitiator HHH000397: Using ASTQueryTranslatorFactory 

之后它会无限期地挂起。不再输出调试消息,也没有任何反应。我已经让它在那里坐了几个小时,但什么也没有。

奇怪的是,一切正常。没有进行任何更改。突然之间开始发生这种情况,我不知道为什么它只是冻结。

【问题讨论】:

  • 您尝试连接的数据库可能不可用。 See Issue
  • 我可以手动连接数据库,所以它是可用的。
  • 我遇到了同样的问题。我 90% 确定这是因为 JPA 相关的 bean 自动装配,但我仍在努力解决这个问题,也许一些春季大师可以给我任何提示

标签: spring hibernate spring-boot


【解决方案1】:

根据您提供的信息很难判断会发生什么, 我可以提出一些可以阐明正在发生的事情的事情:

  1. 尝试进行线程转储,看看每个线程到底做了什么。如果您将进行一些线程转储并看到看起来相关的线程被卡在某个地方,您可能能够更好地从堆栈跟踪中理解原因。

  2. 为调试启用日志,您说没有调试消息出现,但在 sn-p 中,您只显示了几条 INFO 消息。您可能可以从为 DEBUG 设置 spring 和 hibernate 日志开始。

  3. 尝试连接到空数据库 - 可能它会在初始化期间尝试读取某些内容(元数据等内容)并且花费的时间太长(尽管我不相信它应该花费数小时),但仍然...... .

  4. 您可以尝试查看启动期间正在执行哪些 SQL。只需将hibernate的“show sql”属性设置为true,也许会有帮助

  5. 你也可以在spring中下断点,看看哪个bean卡住了,试着从它的代码中理解是怎么回事(我知道它有点含糊,但重点是找到哪个bean失败了启动并调试它)。

【讨论】:

  • 对不起,我应该澄清更多。我确实将根记录器设置为调试,此时没有输出调试级别的消息。数据库实际上是空的。这是一个全新的数据库。我也开启了休眠 sql 跟踪,但没有执行任何 SQL。我确实尝试通过 Spring 进行调试,但我还没有找到任何实际“卡住”的地方。
  • 是的,但没有任何可疑之处。但是,我确实注意到在最后一行之后有一些东西正在吞噬所有的日志语句。据我所知,有某种“无限”循环在尝试读取元数据,所以有些东西很不稳定。我想我会尝试核对数据库并重新开始,即使它是新鲜的。
  • 啊哈。因此,在再次删除并重新创建模式之后,它就起作用了。另外,我的日志输出被吞掉了,因为一个传递依赖突然决定包含 slf4j-nop。我猜这个 binder 只是绑定到一些包,因为一些日志输出出来了,只是没有任何有意义的东西。
猜你喜欢
  • 2021-08-18
  • 1970-01-01
  • 2017-04-01
  • 2014-05-24
  • 1970-01-01
  • 2017-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多