簡體   English   中英

有多個數據源時的Spring動態事務管理器

[英]Spring dynamic transaction manager when there are multiple datasources

要求 :

  1. 我有事務類(使用@Transaction)
  2. 在運行時它只會連接一個數據源
  3. 但是該數據源可以根據所需的數據庫從一個調用更改為另一個調用。
public class EmployeeManagerImpls {

    @Autowired
    private employeeDao:

    @Transactional
    public void saveEmployee(Employee e) {
        employeeDao.saveEmployee(e);
    }
}

Employee Dao 具有根據參數選擇所需數據庫的能力。 (假設它是一種租戶數據庫)有沒有辦法使用 AOP 切換事務管理器?

有幾個步驟可以實現-

  1. 使用@Configuration @EnableTransactionManagement批注啟用事務管理

  2. 使用一些名稱(使用@Qualifier注釋)定義您的 2 個事務管理器( PlatformTransactionManager ),例如 - txMgr1 , txMgr2

  3. 對您的服務類使用@Transactional("txMgr1)@Transactional("txMgr2)注釋。

有關詳細信息,請查看以下鏈接 -

  1. Spring JPA – 多個數據庫
  2. 使用 Spring @Transactional 進行動態數據源路由

在這種情況下,我更願意使用多個 TransactionTemplates。 您可以在啟動時為每個數據庫創建它們的多個實例,然后將它們作為值放入映射中,該映射的鍵將對應於您的 DTO 可能的“標志值”。 在這種情況下,您將能夠在運行時從該地圖獲取服務中的特定 TransactionTemplate 並使用它。 結果將與使用@Transactional 相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM