搞懂spring事務

來源:互聯網
上載者:User

標籤:try   return   run   autowire   比較   list   manage   nconf   使用   

最近一個官網的項目,我在service層有兩個添加資料的操作,很意外報錯了,然後就研究到了事務

之前只是知道聲明式事務和編程式事務,編程式的事務顯得比較麻煩,一般都是使用聲明式事務..

spring提供了很多種配置方式: 

編程式事務:

  開啟事務;

  try{

    更新或添加操作;

    提交;

  }catch(..){

    復原;

  }

聲明式事務:

  提交,復原的操作寫在了一個代理類裡頭,在執行事務方法之前開啟事務,在執行完方法之前提交或者復原事務

  

1 給每個bean(service類)配置一個代理類

2 所有service類公用一個代理類

3 攔截器(aop的方式)

4 全註解(在service類加上Transaction)

注 : spring只對runtiomException才會復原(經測試的) 提供了對應的屬性設定異常類型

下面是我項目裡頭事務的配置 (config配置呢) :

 

/** * 註解聲明式事務配置(相當於上述的aop方式的配置) * @author liyong * */@Configurationpublic class TxAdviceTransactionConfig {    private static final String AOP_POINTCUT_EXPRESSION = "execution(* com.mike.mihome.*.service..*.*(..))";        @Autowired    private PlatformTransactionManager transactionManager;        @Bean    public TransactionInterceptor txAdvice(){        NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource();                //唯讀事務,不做更新操作        RuleBasedTransactionAttribute readOnlyTx = new RuleBasedTransactionAttribute();        readOnlyTx.setReadOnly(true);        readOnlyTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_NOT_SUPPORTED);                //當前存在事務就使用當前事務,當前不存在事務就建立一個新的事務        RuleBasedTransactionAttribute requiredTx = new RuleBasedTransactionAttribute();//        requiredTx.setRollbackRules(Collections.singletonList(new RollbackRuleAttribute(Exception.class))); //設定異常類型        requiredTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);        requiredTx.setTimeout(10000);                Map<String, TransactionAttribute> txMap = new HashMap<String, TransactionAttribute>();        txMap.put("query*", readOnlyTx);        txMap.put("get*", readOnlyTx);                txMap.put("*", requiredTx);        source.setNameMap(txMap);                TransactionInterceptor txAdvice = new TransactionInterceptor(transactionManager, source);        return txAdvice;    }        @Bean    public Advisor txAdviceAdvisor() {        AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();        pointcut.setExpression(AOP_POINTCUT_EXPRESSION);        return new DefaultPointcutAdvisor(pointcut, txAdvice());    }}

 

  

 

搞懂spring事務

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.