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