spring注解方式的事务实现机制

当@Transactional 注解添加到类级别时,表示所有该类的公共方法都配置相同的事务属性信息;
当@Transactional 注解添加到类级别时,方法级别也配置了@Transactional,应用程序会以方法级别的事务属性信息来管理事务,也就是说方法级别的事务属性信息会覆盖类级别的
相关配置信息。

默认情况下,如果事务抛出运行时异常(RuntimeException异常)或者Error,则Spring将回滚事务;除此之外,Spring不会回滚事务;
如果在事务中抛出了其他的异常,期望Spring也能回滚事务,可以用rollbackFor指定自定义的异常子类,例如
@Transactional(propagation = Propagation.REQUIRED,rollbackFor = MyException.class)

@Transactional注解只有应用到public方法,才能进行事务管理。

Spring注解方式的事务实现机制:
应用系统调用@Transactional声明的目标方法时,会默认生成一个AOP代理对象,代理对象根据@Transactional的属性配置信息,决定@Transactional声明的目标方法是否由事务拦截器
TransactionInterceptor来拦截,在TransactionInterceptor拦截时会在目标方法执行之前创建并加入事务,然后根据执行的过程是否出现异常,再有拦截器间接控制数据源DataSource是否要提交
还是回滚事务。

猜你喜欢

转载自www.cnblogs.com/afeng-chen/p/12618615.html