初始化spring bean时出现以下事务错误:
javax.persistence.TransactionRequiredException: no transaction is in progress
我的bean看起来像这样:
<bean id="initBean" class="com.global.InitBean" init-method="execute">
我使用以下事务管理器:
<tx:annotation-driven transaction-manager="chainedTransactionManager">
我的执行方法如下:
@Transactional
public void execute() { doSomeThing... }
我认为问题是当spring初始化bean initBean 不是事务管理器就绪时。我尝试在 chainedTransactionManager上使用 depens-on
<bean id="initBean" class="com.global.InitBean" init-method="execute" depends-on="chainedTransactionManager">
但结果仍然相同。另一种方法是如何在事务管理器就绪时调用execute方法吗?
答案 0 :(得分:2)
从init-method
bean定义中删除initBean
声明,因为Spring使用代理实现事务方法,并且当bean首次初始化时,bean的事务代理尚未初始化。
如果execute
方法需要保留作为bean的init方法,则可以尝试在方法中使用TransactionTemplate。