2
我使用spring事务将几个数据库更新操作包含到单个事务中。假设在单个事务中有2分贝更新。更新1成功,而第二次失败。我的问题是当这种情况发生时,即使第二个数据库更新失败导致事务回滚,第一个数据库更新也会提交给数据库。Spring编程Jdbc事务回滚不起作用
XML声明:
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="test" />
<property name="password" value="test" />
</bean>
<bean id="testDao" class="dao.TestDao">
<constructor-arg >
<ref local="simpleJdbcTemplate" />
</constructor-arg>
<constructor-arg >
<ref local="txManager" />
</constructor-arg>
</bean>
java代码:
public class DaoCallback extends TransactionCallbackWithoutResult {
protected void doInTransactionWithoutResult(TransactionStatus arg0) {
try{
dbUpdate1();
dbUpdate2();
}catch(Exception e){
arg0.setRollbackOnly();
}
}
我故意让dbUpdate1成功和dbUpdate2作为测试出来的回滚是否真的有效所以失败。当我通过代码进行调试时,我可以看到控制流运行到catch异常,并调用“setRollbackOnly()”方法。
但是,当我检查数据库,我可以看到从dbUpdate1()的变化。那么请帮忙解释这里有什么问题?
Dara kok,
你能否给你的问题添加更多描述(指示MyISAM)并标记为已回答? (反对你的回答:)) – 2011-01-30 07:38:04