Spring有7种事务传播特性,其意义是确定多个具有事务控制的service相互调用时所形成的的事务边界,下表列出Spring的7种事务传播特性以及含义
传播特效 | 含义 |
---|---|
REQUIRED | 表示必须存在事务,如果外层方法存在事务,则用外层方法的事务,否则开启一个新的事务,是Spring中默认的事务传播特效 |
MANDATORY | 必须存在事务,如果没有事务则抛异常 |
SUPPORTS | 可以不存在事务,如果有事务则使用当前事务,没有则作为一个普通方法运行 |
NOT_SUPPORTED | 不会存在事务,如果外层方法有事务,则会挂起 |
REQUIRES_NEW | 当前方法会开启一个新事物,如果外层方法存在事务,则会将外层方法的事务挂起,直到当前方法的事务提交或回滚才会恢复执行 |
NEVER | 当前方法不支持事务,有事务就抛异常 |
NESTED | 如果外层方法存在事务,则创建一个保存点,如果当前方法没有异常,则统一到外层事务中提交,如果当前方法存在异常,则外层事务也会回滚,如果外层事务出现异常,只会回滚外层事务,当前方法不会回滚 |