spring做事务,MySql 事务不起效

zlt原创文章,转载请注明出处,有错希望大家一起交流。。。http://write.blog.csdn.net/postedit


spring做事务,事务不起效


首先 Spring 的配置文件如下:


  
      
  
      
      
          
      
      
      
      
      
          
              
              
               
              
              
          
      
  
      
          
     


此时,事务不生效的主要原因有以下几点:

前言:首先,MySql支持多种数据库引擎,我们需要主要关注两个数据库引擎,一个是InnoDB,一个是MyISAM


原因一:MySql为了性能,它的表默认使用的是MyISAM数据库引擎,此种引擎是不支持事务的,所以你无论spring怎么管理都不会有事务存在。而且,子通常使用MySql时,我们都是第一选择InnoDB,原因是MyISAM不支持事务,不支持崩溃后的安全恢复,没有行级锁,所以不支持并发操作,当然你如果不需要这些性能可以选择MyISAM,但是需要注意的是不要混合使用数据库引擎,因为这样会存在很多bug或者出莫名奇妙的怪物。.使用alter table table_name engine=innodb;  命令切换表引擎。

如果你原因一是正确的,那么请看原因二:

原因二:spring 配置不对呗,不多赘述。

               特别注意:

               @Transactional 只能被应用到public方法上,对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能.

                事务回滚是建立在向上抛异常的情况下,如果你进行了异常捕捉而不往上抛的话,也不会让事务生效、

原因三:MySql 默认的一个属性叫  defaultAutoCommit ,好吧,默认提交事务,默认是true,也就是说,你插完或者删完,他就给你提交了事务了。



你可能感兴趣的:(Spring)