最近开发中用到了springjdbctemplate来持久化数据,想通过代码控制事务的回滚和提交,但是所有配置一切正常的情况下就是不能实现回滚,查看了datasource和transactionManager配置都没有问题,但是就不给回滚,手动回滚代码如下:
public void insertUser() {
TransactionTemplate tt = new TransactionTemplate(getTransactionManager());
tt.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus status) {
JdbcTemplate jt = new JdbcTemplate(executeTestSource());
jt.execute("insert into `srp_keyword_info` (`kid`, `keyname`, `type`, " +
"`synword`, `srpid`, `differflag`) " +
"values ('11', '1', '11', '1', '1', '1')");
jt.execute("insert into `srp_keyword_info` (`kid`, `keyname`, `type`, " +
"`synword`, `srpid`, `differflag`) " +
"values ('11', '1', '11', '1', '1', '1','2')");
String ss = null;
System.out.println(ss.toCharArray());
return null;
}
});
}
配置正确,但是不回滚这是为什么呢,纠结了一下午,终于找到了答案,原因尽然是:
mysql的表是有事务安全( 比如:InnoDB)和非事务安全(比如:ISAM、MyISAM)之分的,所以你当前表的事务类型是ISAM、或是MyISAM其中的一种,只要修改为InnoDB就可以了,MyISAM是非事务安全的,所以无法实现数据回滚。 只要修改表的类型即可: