在我的應用程序中,我對不同的方法有幾個@Transactional
註釋。多個Spring @Transactional註釋在一個應用程序中?
他們使用Crud Repository
在我的數據庫上執行刪除操作。我想知道在什麼階段做這些刪除得到執行,我需要所有@Transactional
註釋?
例如,2刪除methods
被後來被稱爲在façade method
,外牆方法,然後調用在runner
:
1.方法1:
@Transactional
public void deleteFromSchemaOne(){
}
1.方法2:
@Transactional
public void deleteFromSchemaTwo(){
}
2.調用這2種方法在外觀方法:
@Transacational
public void deleteFromAllSchemas(){
deleteFromSchemaOne();
deleteFromSchemaTwo();
}
3.調用外牆方法亞軍
@Transactional
public void run(String... args) throws Exception {
service.deleteFromAllSchemas();
}
我想知道的是:
我刪除的階段實際上是執行?該方法是否在Runner內完成?
編輯:
外牆方法與循環:
public void deleteFromAllSchemas() {
for(int i = 0; i < list.size(); i++){
deleteFromSchemaOne();
deleteFromSchemaTwo();
}
}
基本上線的東西我想要做的就是確保在deleteFromAllSchemas()方法是在架構一個和兩個務必transactional-即一切被刪除或什麼也沒有,我該怎麼做?謝謝你的幫助。 – java123999
這是用你的'deleteFromAllSchemas()'中的'@ Transactional'完成的。如果發生錯誤,它將回滾在'deleteFromSchemaOne()'和'deleteFromSchemaTwo()'中完成的所有更改。你也應該真正閱讀交易。他們不是你希望得到正確的或「在工作中學習」的東西。 – Kayaman
這是正確的。我想補充一點,一般來說,交易應儘可能短。因此,除非這些數據庫刪除彼此依賴(假設一個失敗,您將希望回滾整個事務),那麼您應該只註釋兩個刪除方法。這可以確保每次刪除都將在單獨的事務中運行。如果他們確實相互依賴。使用'@Transactional(propagation = Propagation.MANDATORY)'註釋調用它們的方法並選擇註釋刪除方法' –