事务:.@Transactional作用:就是在当前这个方法执行开始之前来开启事务,方法执行完毕之后提交事务。如果在这个方法执行的过程当中出现了异常,就会进行事务的回滚操作
方法:
当前方法交给spring进行事务管理
类:
当前类中所有的方法都交由spring进行事务管理
接口:
接口下所有的实现类当中所有的方法都交给spring 进行事务管理
注意事项:
默认情况下,只有出现RuntimeException(运行时异常)才会回滚事务。
主动抛出的异常不会回滚,若想要所有异常回滚需在注解中配置属性:
假如我们想让所有的异常都回滚,需要来配置@Transactional注解当中的rollbackFor属性,通过
rollbackFor这个属性可以指定出现何种异常类型回滚事务。
- 可以放在类上,方法上,接口上(实现这个接口的所有的类都开始事务);
- @Transactional(rollbackFor = Exception.class) // 事务提交回滚类,方法,接口
开启事务(方法执行前)
提交事务(方法执行完成后)
回滚事务(回滚事务,遇到异常)
默认情况下,只有出现 RuntimeException 才回滚异常。rolbackFor属性用于控制出现何种异常类型,回滚事务。
propagation
在@Transactional注解指定一个属性propagation,通过
propagation 属性来指定传播行为:
属性值 含义
REQUIRED 【默认值】需要事务,有则加入,无则创建新事务
REQUIRES_NEW 需要新事务,无论有无,总是创建新事务:外部事务和内部事务是独立的2个事务,不影响彼此
SUPPORTS 支持事务,有则加入,无则在无事务状态中运行
NOT_SUPPORTED 不支持事务,在无事务状态下运行,如果当前存在已有事务,则挂起当前事务
MANDATORY 必须有事务,否则抛异常
NEVER 必须没事务,否则抛异常不论是否有异常,最终都要执行的代码:记录日志}finally {deptLogService.insert(deptLog);}