springboot的事务分为两种:1.声明式事务 2.编程式事务 。 对于概念不作过多解释spring
声明式事务通常只须要两个步骤:1.在启动类上加上注解@EnableTransactionManagement开启注解事务管理 2.service层类上或者在具体方法加上@Transactional注解便可编程
编程式事务可使用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