首先使用注解在启动类添加@EnableTransactionManagement 开启事务支持后, 然后在访问数据库的Service方法上添加注解 @Transactional 便可。
但有时候会发现事务不生效,具体原因可以从以下几个方面找寻:
1、首先要看数据库引擎是否支持注解,mysql默认引擎INNODB是支持的,但MYISAM是不支持的; mysql 5.7以上应该才是 INNODB 引擎
2、注解只能被应用到public方法上, 其它方法上不会报错,但不生效;
3、默认情况下只会对运行期异常(java.lang.RuntimeException及其子类)和 Error 进行回滚;
提示一下:SpringBoot是默认开启事务的。
设置事务隔离级别:
@Transactional(isolation = Isolation.READ_UNCOMMITTED):读未提交 @Transactional(isolation = Isolation.READ_COMMITTED):读已提交 @Transactional(isolation = Isolation.REPEATABLE_READ):可重复读 @Transactional(isolation = Isolation.SERIALIZABLE):串行化
设置回滚:
@Transactional(rollbackFor=Exception.class) 如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚