我正在尝试使用基于Spring 3.0注释的事务来处理我的服务层。我正在为spring配置事务支持,如下所示:
我正在使用DataSourceTransactionManager
进行交易。
<bean id="summaryDailyTXManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="summaryDailyDataSource"/>
</bean>
我按如下方式配置基于注释的支持:
<tx:annotation-driven transaction-manager="summaryDailyTXManager" proxy-target-class="true" />
在此之后,我使用以下注释作为我的可交易功能:
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = { Exception.class })
public void doSomething() {
// my code
}
我的理解是,如果doSomething
函数有任何异常,则事务将回滚。但它并没有回滚。如果我做错了或者我错过了什么,请指导我。
感谢。
此致 吉拉尼
答案 0 :(得分:4)
你的数据库是什么? 有时它是数据库问题。
MySQL与MyISAM表的实例没有交易。 无论你如何在没有Spring的情况下配置spring或native JDBC,或者使用JTA或Hibernate,你都无法获得ROLLBACK。
如果我遇到类似的问题,我会通过排除Spring来解决问题。
创建一个原生的非spring jdbc方法。
获得连接
设置自动提交错误
插入一条记录
插入另一条记录
回滚连接
关闭连接
手动检查是否已插入记录
答案 1 :(得分:0)
因为只有在默认情况下抛出runtimeException时,spring才会回滚。