成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

多線程事務(wù)回滾

stackfing / 1264人閱讀

摘要:最近開(kāi)發(fā),有地方需要用到多線程,每個(gè)線程里面處理多個(gè)方法,過(guò)程中遇到了一個(gè)問(wèn)題,我們使用平時(shí)的注解,就是當(dāng)前一個(gè)方法執(zhí)行完成比如插入操作,后一個(gè)方法是不會(huì)事務(wù)回滾的。

最近開(kāi)發(fā),有地方需要用到多線程,每個(gè)線程里面處理多個(gè)方法,過(guò)程中遇到了一個(gè)問(wèn)題,我們使用平時(shí)的@Transactional注解,就是當(dāng)前一個(gè)方法執(zhí)行完成(比如插入操作),后一個(gè)方法是不會(huì)事務(wù)回滾的。當(dāng)時(shí)覺(jué)得很不可思議,后來(lái)經(jīng)過(guò)半天時(shí)間,終于挖出原因,并成功解決。
我這里先說(shuō)明原因:多線程底層連接數(shù)據(jù)庫(kù)的時(shí)候,時(shí)使用的線程變量(TheadLocal),所以,開(kāi)多少線程理論上就會(huì)建立多少個(gè)連接,每個(gè)線程有自己的連接,事務(wù)肯定不是同一個(gè)了。
解決辦法:我強(qiáng)制手動(dòng)把每個(gè)線程的事務(wù)狀態(tài)放到一個(gè)同步集合里面。然后如果有單個(gè)異常,循環(huán)回滾每個(gè)線程。
代碼如下:

 //先在開(kāi)啟多線程外面,定義一個(gè)同步集合:
 List transactionStatuses = Collections.synchronizedList(new ArrayList());
 //開(kāi)啟多線程
 executorService.execute(new Runnable() {
          @Override
          public void run() {
          DefaultTransactionDefinition def = new DefaultTransactionDefinition();
              def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔離級(jí)別,開(kāi)啟新事務(wù),這樣會(huì)比較安全些。
              TransactionStatus status = transactionManager.getTransaction(def); // 獲得事務(wù)狀態(tài)
              transactionStatuses.add(status);
              try{
                  //邏輯1
                  ...
                  //邏輯2
                  ...
              
              }catch(Exception e){
              
              }
          
          }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69581.html

相關(guān)文章

  • 事務(wù)線程的坑及調(diào)優(yōu)Tips

    摘要:起因及介紹在處理原始對(duì)賬文件的時(shí)候,我將數(shù)據(jù)歸類(lèi)后批量存入相應(yīng)的表中。結(jié)論事務(wù)只能管著開(kāi)啟事務(wù)的線程,其他子線程出了問(wèn)題都感知不到,所以在多線程環(huán)境操作要慎重。高頻容易搞死服務(wù)器,低頻會(huì)阻塞自身程序。重試次數(shù)和超時(shí)時(shí)間根據(jù)業(yè)務(wù)情況設(shè)置。 起因及介紹 在處理原始對(duì)賬文件的時(shí)候,我將數(shù)據(jù)歸類(lèi)后批量存入相應(yīng)的表中。在持久化的時(shí)候,用了parallelStream(),想著同時(shí)存入很多表這樣可...

    wums 評(píng)論0 收藏0
  • 面試分享:最全Spring事務(wù)面試考點(diǎn)整理

    摘要:和事務(wù)的關(guān)系關(guān)系型數(shù)據(jù)庫(kù)某些消息隊(duì)列等產(chǎn)品或中間件稱(chēng)為事務(wù)性資源,因?yàn)樗鼈儽旧碇С质聞?wù),也能夠處理事務(wù)。事務(wù)的傳播特性,,,,,,強(qiáng)制要求要有一個(gè)物理事務(wù)。外圍事務(wù)不會(huì)被內(nèi)部事務(wù)的回滾狀態(tài)影響。不支持當(dāng)前事務(wù)。 Spring和事務(wù)的關(guān)系 關(guān)系型數(shù)據(jù)庫(kù)、某些消息隊(duì)列等產(chǎn)品或中間件稱(chēng)為事務(wù)性資源,因?yàn)樗鼈儽旧碇С质聞?wù),也能夠處理事務(wù)。 Spring很顯然不是事務(wù)性資源,但是它可...

    graf 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<