webService事務__分類

狀況一:java

       客戶端---------(調用)----------> 服務端      (服務端處理超時,但服務端整個事務處理正常且數據修改正常)。此狀況,無影響。spa

狀況二:code

        服務端A-----------(調用)----------->服務端 B  (服務端A在整個事務的最後調用服務B)事務

template.execute(new TransactionCallbackWithoutResult(){
    try{
     .....A事務......
     .....A事務...... 
     .....B事務......
    } catch(){
        transactionStatus.setRollbackOnly();
        throw new RuntimeException(e.getMessage());
     }
    
 });

      狀況二---一、當A事務執行成功,B事務執行失敗,則回滾時只會A事務回滾,此時A事務、B事務都會回滾,不會形成數據異常。get

      狀況二---二、當A事務執行成功,B事務執行超時可是數據修改爲功,A這邊接受到的信息是B執行失敗,此時A事務回滾。則此時,A數據回滾到原來狀態,B修改數據成功,形成數據異常。(目前解決辦法修改數據(******))it

狀況三:io

template.execute(new TransactionCallbackWithoutResult(){
    try{
     .....B事務......
     .....A事務......
     .....A事務...... 
     
    } catch(){
        transactionStatus.setRollbackOnly();
        throw new RuntimeException(e.getMessage());
     }
    
 });

        這種狀況下,先調用B事務,當B事務執行成功,再往下執行時,若是出現異常,回滾時,只是回滾A事務,B事務,沒法回滾。class

綜上所述,通常狀況,都是將B事務寫在最後,下降數據異常的風險。狀況二---2 的解決辦法是增長超時時間,目前已增長到5分鐘,出現異常的狀況已降到最小了。。。。。。im

相關文章
相關標籤/搜索