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

相關文章
相關標籤/搜索