【问题标题】:Initializing tables on spring boot startup在 Spring Boot 启动时初始化表
【发布时间】:2016-07-13 08:51:43
【问题描述】:

我有一个 spring boot 应用程序,我需要在其中根据一些配置初始化表。我正在使用@Transactional 使用托管事务。我的问题是我不知道应用程序何时准备好进行数据库事务。 我创建了一个读取配置并更新表的 bean,但此时它出现异常:

Could not obtain transaction-synchronized Session for current thread

我已经尝试过,如果我等待 sprintboot 启动并通过 HTTP 请求进行相同的事务,那么没有问题。所以这似乎是一个时间问题。我也尝试将代码移动到 bean 的 @PostConstruct,但它并没有解决问题。

我如何知道该应用已准备好进行数据库事务?任何帮助将不胜感激。

【问题讨论】:

    标签: spring spring-boot


    【解决方案1】:

    您可以监听 Spring 正在发布的一些事件。 见here

    你甚至需要监听这个:ContextRefreshedEvent

    【讨论】:

      【解决方案2】:

      执行初始化的最简单和最干净的方法应该是让您的 bean 为 ContextRefreshedEvent 实现 ApplicationListener,然后在 onApplicationEvent 方法中处理初始化。这样,您的初始化将在 Spring 的整个应用程序上下文初始化时运行

      【讨论】:

      • 感谢您的提示。我实际上使用了 @EventListener 注释,它在 spring 4.2 之后可用。
      猜你喜欢
      • 2021-02-16
      • 1970-01-01
      • 2022-07-12
      • 2015-03-19
      • 2012-03-29
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多