知识点:
1.同一个类的(没有@Transactional注解)A方法调用B方法,(有@Transactional注解)B方法的事务无效。
2.A类的B方法调用C类的D方法,那么D方法的事务是有效的。(这里的B方法没有注解,D方法有注解)
解决注解失效的方法:
@Transactional注解可以作用于哪些地方?
@Transactional 可以作用在接口、类、类方法。
- 作用于类:当把@Transactional 注解放在类上时,表示所有该类的public方法都配置相同的事务属性信息。
- 作用于方法:当类配置了@Transactional,方法也配置了@Transactional,方法的事务会覆盖类的事务配置信息。
- 作用于接口:不推荐这种使用方法,因为一旦标注在Interface上并且配置了Spring AOP 使用CGLib动态代理,将会导致@Transactional注解失效
一:事务注解失效的解决方法。
1.检查方法是不是public,只有public的方法才会生效。
2.检查异常是不是unchecked异常,Spring默认抛出了未检查unchecked异常(继承自 RuntimeException 的异常)或者 Error才回滚事务;其他异常不会触发回滚事务。如果在事务中抛出其他类型的异常,但却期望 Spring 能够回滚事务,就需要指定 rollbackFor属性。
3.如果是c