`

springjdbctemplate手动式事务无法回滚

阅读更多

最近开发中用到了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是非事务安全的,所以无法实现数据回滚。 只要修改表的类型即可:

     alter table tablename type=InnoDb

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics