傳播設置是必需的。春季託管交易@交易註釋
@Transactional(propagation = Propagation.REQUIRED)
交易是可讀/寫的。
在哪種情況下使用?請給我解釋一下例子
傳播設置是必需的。春季託管交易@交易註釋
@Transactional(propagation = Propagation.REQUIRED)
交易是可讀/寫的。
在哪種情況下使用?請給我解釋一下例子
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()
也未能提交。而是它回滾。
這個註解只是爲了幫助Spring框架來管理你的數據庫事務。
比方說你有一個服務豆寫入到數據庫,並且要確保寫入是在事務內完成,那麼你使用
@Transactional(propagation = Propagation.REQUIRED)
這裏是一個Spring服務bean的一個小例子。
@Service
class MyService {
@Transactional(propagation = Propagation.REQUIRED)
public void writeStuff() {
// write something to your database
}
}
的Transactional
註解告訴春認爲: