@Transactional属性详解
声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
简而言之,@Transactional注解在代码执行出错的时候能够进行事务的回滚。
使用说明
- 需要在启动类上添加@EnableTransactionManagement注解。
- 当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。
- 在项目中,@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。
- 在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚。
而至于什么是运行时异常(RuntimeException),什么是非运行时异常,可通过下图所示理解(图片截取网络)
注解失效问题
正常情况下,只要在方法上添加@Transactional注解就完事了,但是需要注意的是,虽然使用简单,但是如果不合理地使用注解,还是会存在注解失效的问题。
@Transactional 应用在非 public 修饰的方法上
事务拦截器在目标方法执行前后进行拦