Springboot的事务使用

springboot的事务分为两种:1.声明式事务 2.编程式事务 。 对于概念不作过多解释spring

1.声明式事务

声明式事务通常只须要两个步骤:1.在启动类上加上注解@EnableTransactionManagement开启注解事务管理 2.service层类上或者在具体方法加上@Transactional注解便可编程

2.编程式事务

编程式事务可使用aop实现,在切面类中的@before中开启事务,在@after中提交事务和回滚事务,注意在使用时要获取到事务管理器springboot

//注入便可
@Autowired
private PlatformTransactionManager platformTransactionManager;

//这个能够不须要,手动new 一个 DefaultTransactionDefinition也行
@Autowired
private TransactionDefinition transactionDefinition; 


//获取事务
TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);

//提交事务
platformTransactionManager.commit(transactionStatus); 

//回滚事务
platformTransactionManager.rollback(transactionStatus);

全局事务处理

咱们来写一个全局的事务处理试试学习

@Aspect
@Configuration
public class GlobalTransactionAdviceConfig {
//定义切入点
public static final String AOP_POINTCUT_EXPRESSION = "execution ()"
            + " || execution ()";//表达式应该都会写
//事务管理器            
@Autowired
private PlatformTransactionManager transactionManager;
 public TransactionInterceptor txAdvice() {
    DefaultTransactionAttribute txAttr_REQUIRED = new DefaultTransactionAttribute();
    //利用txAttr_REQUIRED进行相关配置
    
    //这个能够用来配置匹配一些方法
    NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource();
    source.addTransactionalMethod("find*", txAttr_REQUIRED);
    
    //最后返回一个事务拦截器,也能够继承TransactionInterceptor,自定义一个拦截器
    return new TransactionInterceptor(transactionManager, source);
 }

    @Bean
    public Advisor txAdviceAdvisor() {
        AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
pointcut.setExpression(AOP_POINTCUT_EXPRESSION);
        return new DefaultPointcutAdvisor(pointcut, txAdvice());
    }
}

文章纯属本身学习写的一点,主要用来捋一下本身的知识code

相关文章
相关标签/搜索