标签:事务 git 存在 att 逗号 manage 程序 efault 没有
事务管理一般有编程式和声明式两种,编程式是直接在代码中进行编写事物处理过程,而声名式则是通过注解方式或者是在xml文件中进行配置,相对编程式很方便。
而注解方式通过@Transactional 是常见的。我们可以使用@EnableTransactionManagement 注解来启用事务管理功能,该注解可以加在启动类上或者单独加个配置类来处理。
@Transactional 可以加在方法上,表示对当前方法配置事务也可以添加到类级别上。
也可以添加到类级别上。当把@Transactional 注解放在类级别时,表示所有该类的公共方法都配置相同的事务属性信息。
当类级别配置了@Transactional,方法级别也配置了@Transactional,应用程序会以方法级别的事务属性信息来管理事务,即方法级别的事务属性信息会覆盖类级别的相关配置信息。
3.1 @Transactional 注解应用到 public 方法,才能进行事务管理。因为aop会进行拦截是否是public方法
//AbstractFallbackTransactionAttributeSource类 protected TransactionAttribute computeTransactionAttribute(Method method, Class<?> targetClass) { // Don‘t allow no-public methods as required. if (allowPublicMethodsOnly() && !Modifier.isPublic(method.getModifiers())) { return null;}
3.2 propagation 属性
下面三种 propagation 可以不启动事务。错误的配置这三种 propagation,事务可能不会发生回滚。
3.3 rollbackFor 属性
默认情况下,如果在事务中抛出了未检查异常(继承自 RuntimeException 的异常)或者 Error,则 Spring 将回滚事务;除此之外,Spring 不会回滚事务。
可以通过rollbackFor来制定在食物中抛出的其他类型的异常来支持事务回滚,例:
@Transactional(propagation= Propagation.REQUIRED, rollbackFor= MyException.class)
若在目标方法中抛出的异常是 rollbackFor 指定的异常的子类,事务同样会回滚。
标签:事务 git 存在 att 逗号 manage 程序 efault 没有
原文地址:https://www.cnblogs.com/kingsonfu/p/10413154.html