【发布时间】:2017-01-21 12:03:03
【问题描述】:
我正在尝试围绕我的应用程序中的一个方法使用声明性事务,该方法会进行多个数据库调用。我通过将@Transactional 注释应用到有问题的方法来做到这一点,它看起来类似于这样:
@Transactional
public MyReturnType myTransactionalMethod(SomeType1 param) {
SomeType2 someIntermediateObject = dao1.doStuff(param);
MyReturnType retObj = dao2.doMoreStuff(someIntermediateObject);
return retObj;
}
然后我在我的 XML 配置中设置 Spring Transactions:
<tx:annotation-driven transaction-manager="transactionManager" order="200"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource"/>
然后我想测试该方法以验证事务是否会在方法失败时正确回滚,因此我将方法修改为如下所示:
public MyReturnType myTransactionalMethod(SomeType1 param) {
SomeType2 someIntermediateObject = dao1.doStuff(param);
MyReturnType retObj = dao2.doMoreStuff(someIntermediateObject);
throw new RuntimeException(); //The RuntimeException should trigger a rollback
}
当我执行第二种方法时,它并没有像我预期的那样进行回滚,而是将创建的条目留在了我的数据库中。我还期望在堆栈跟踪中看到一些迹象表明插入的方法周围的弹簧方面挂钩可以处理事务性内容,但我只看到此事务性方法之前的调用方法,没有任何 Spring 注入方法的迹象.
任何人都可以看到我做错的任何事情会导致未应用事务处理的这种行为吗?
【问题讨论】:
-
显示您的呼叫地址
myTransactionalMethod。
标签: java spring transactions