spring 对事务的控制,是使用 aop 切面实现的, 使用@Transactional 注解完成
注解类型:
1@Transactional(propagation=Propagation.REQUIRED)
支持当前事务,如果没有事务会创建一个新的事务。有事务会合并为一个事务。
子事务回滚,父事务一定回滚
父事务回滚,子事务一定回滚
2.@Transactional(propagation=Propagation.SUPPORTS)
支持当前事务,没有事务的时候以没有事务的方式执行
如果当前存在事务,则加入事务
如果当前不存在事务,则以非事务方式运行,这个和不写没区别
3.@Transactional(propagation=Propagation.MANDATOR)
如果当前存在事务,则运行在当前事务中
如果当前无事务,则抛出异常,也即父级方法必须有事务
4.@Transactional(propagation=Propagation.REQUIRES_NEW)
新建事务,如果当前存在事务则挂起。
父事务回滚不影响子事务提交。
5.@Transactional(propagation=Propagation.NOT_SUPPORTS)
以非事务方式运行
如果当前存在事务,则把当前事务挂起
6.@Transactional(propagation=Propagation.NEVER)
以非事务方式运行,如果当前存在事务,则抛出异常,即父级方法必须无事务
7.@Transactional(propagation=Propagation.NESTED)
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。