2017-10-17 294 views
1

傳播設置是必需的。春季託管交易@交易註釋

@Transactional(propagation = Propagation.REQUIRED) 

交易是可讀/寫的。

在哪種情況下使用?請給我解釋一下例子

回答

0

Spring事務默認是

@Transactional(propagation = Propagation.REQUIRED) 

所以你不需要指定傳播特性。

那麼,這是什麼意思爲@Transactional註釋一個彈簧組件?

  • Spring框架將啓動一個新的事務,並執行所有的方法和最後提交事務。

  • 但是,如果application context中沒有交易存在,那麼spring容器將啓動一個新的交易。

  • 如果配置多個方法爲Propagation.REQUIRED,則在邏輯上以嵌套方式分配給每個方法的事務行爲,但它們全部在同一物理事務下。

那麼,結果是什麼?
結果是,如果任何嵌套事務失敗,那麼整個事務將失敗並回退(不要在數據庫中插入任何值)而不是提交。

實施例:

@Service 
public class ServiceA{ 

    @Transactional(propagation = Propagation.REQUIRED) 
    public void foo(){ 
     fooB(); 
    } 

    @Transactional(propagation = Propagation.REQUIRED) 
    public void fooB(){ 
     //some operation 
    } 

} 

說明: 在分配一個事務行爲這個例子foo()方法和內部foo()稱爲另一種方法fooB()這也是事務性的。 這裏的fooB()充當嵌套事務foo()。如果fooB()因任何原因失敗,則foo()也未能提交。而是它回滾。

0

這個註解只是爲了幫助Spring框架來管理你的數據庫事務。

比方說你有一個服務豆寫入到數據庫,並且要確保寫入是在事務內完成,那麼你使用

@Transactional(propagation = Propagation.REQUIRED) 

這裏是一個Spring服務bean的一個小例子。

@Service 
class MyService { 

    @Transactional(propagation = Propagation.REQUIRED) 
    public void writeStuff() { 

     // write something to your database 
    } 
} 

Transactional註解告訴春認爲:

  • 這種服務方法需要要在事務內執行。
  • 如果在執行服務方法時拋出異常,Spring將回滾事務並且沒有數據寫入數據庫。