Spring bean生命周期依赖于事务管理器

时间:2014-02-18 13:35:48

标签: java spring hibernate transactions

初始化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方法吗?

1 个答案:

答案 0 :(得分:2)

init-method bean定义中删除initBean声明,因为Spring使用代理实现事务方法,并且当bean首次初始化时,bean的事务代理尚未初始化。

如果execute方法需要保留作为bean的init方法,则可以尝试在方法中使用TransactionTemplate。

相关问题