@Transactional注解的使用:
1、在方法或者类上都可以添加。(如果在类上添加,则此类中的所有方法都会执行事务,不推荐,因为可能后续接手开发的小伙伴添加方法的时候根本不需要执行事务);不建议在接口上添加,因为注解不可被继承。
2、触发事务回滚有两种方式:
a. 方法抛出异常自动进行回滚;如果使用了try catch,要在catch中抛出异常;
b. 手动执行回滚:在方法中添加:TransactionAsceptSupport.currentTransactionStatus().setRollBackOnly();
3、推荐在注解上添加@Transactional(rollbackFor = {Exception.class}),如果不加的话,方法默认只会在抛出RuntimeException时执行回滚;
原理:
添加了@Transactional注解的A类在启动后,默认会生成一个B类,复制A类中的所有方法,如果是在A类上添加注解,则B类所有方法都会执行事务;如果只在A类某个方法上添加注解,则B类只会对那个方法执行事务。