我有一个spring boot应用程序,我需要根据某些配置初始化表。我使用@Transactional
使用托管交易。我的问题是我不知道应用程序何时准备进行数据库事务。
我创建了一个读取配置并更新表的bean,但是在那时它得到了一个异常:
Could not obtain transaction-synchronized Session for current thread
我试过,如果我等待sprintboot启动并通过HTTP请求进行相同的事务,那么没有问题。所以这似乎是一个时间问题。我也尝试将代码移动到bean的@PostConstruct
,但它没有解决问题。
我怎么知道应用已准备好进行数据库交易?任何帮助将不胜感激。
答案 0 :(得分:2)
你可以听一些Spring正在发布的事件。 见here
你甚至需要听这个:ContextRefreshedEvent
答案 1 :(得分:1)
执行初始化的最简单,最干净的方法应该是让您的bean为ContextRefreshedEvent实现ApplicationListener,然后在onApplicationEvent方法中处理初始化。这样,初始化将在Spring的整个应用程序上下文初始化时运行