TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
TransactionDefinition.PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。spring实现aop的步骤

指示spring事务管理器回滚一个事务的推荐方法是在当前事务的上下文内抛出异常
spring事务管理器会捕捉任何未处理的异常,然后依据规则决定是否回滚抛出异常的事务
默认配置下,spring只有在抛出的异常为运行时unchecked异常时才回滚该事务,
也就是抛出的异常为RuntimeException的子类(Errors也会导致事务回滚),而抛出checked异常则不会导致事务回滚。
注意事项:
@Transactional 使用位置 类上方、方法上方
Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效
方法的访问权限为 public
@Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。
如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常
3.默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,
即使被调用方法使用@Transactional注解进行修饰
同一个类中方法,A方法未使用此标签,B使用了,C未使用,A 调用 B , B 调用 C ,A 方法执行过程中无事务
spring的@Transactional注解详细用法
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-59442-3.html
美国提供的只有战争