在Spring启动时初始化表

时间:2016-07-13 08:51:44

标签: spring spring-boot

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

Could not obtain transaction-synchronized Session for current thread

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

我怎么知道应用已准备好进行数据库交易?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

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

你甚至需要听这个:ContextRefreshedEvent

答案 1 :(得分:1)

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