2014-01-21 45 views
3

我正在處理一個應用程序,其中我必須根據從客戶端傳遞的客戶ID連接到不同的數據庫。所有數據庫的模式都是相同的。它是一種多租戶應用程序。由於我不知道會有多少客戶,因此我不能使用xml配置來靜態創建數據源,因此我必須手動創建數據源。手動創建多個數據源的事務管理

我們使用Spring JdbcTemplate連接到數據庫,而連接參數來自另一個存放應用程序配置的數據庫。我能夠正確連接到數據庫,但方法調用不在事務中發生。 以下是代碼片段它執行數據庫連接只有一個數據庫和我打算把它擴大爲多個數據庫:

BasicDataSource datasource = new BasicDataSource(); 
// set database connection params 
.... 
// create jdbcTemplate, 
jdbcTemplate = new JdbcTemplate(datasource); 
// create transaction managers 
PlatformTransactionManager txManager = new DataSourceTransactionManager(datasource); 

我的想法是手動創建的事務管理器,並以某種方式在Spring容器將它綁定這樣所有使用@Transactional註解的方法/類都可以使用這個事務管理器。 我無法確定如何綁定txManager,因此所有使用@Transactional的方法/類都將使用此事務管理器。我不確定這是否正確,我應該爲每個數據源創建事務管理器,因爲我不希望事務跨越多個數據庫,但我希望每個服務方法調用都應該在事務中。 注意:我所有的服務類都有@Component和@Transactional註解。

我以正確的方式解決問題嗎?

+0

可能重複http://stackoverflow.com/questions/12641666/springs-jdbctemplate-and-transactions –

+0

@PradeepKrKaushal,感謝您的評論,但我看到了張貼在此之前的問題。使用TransactionTemplate對我來說不是一個有效的選擇,因爲我的服務類中的很多方法都必須使用TransactionTemplate進行包裝。我正在尋找一種解決方案,它與接受答案的第3段中提到的解決方案類似,但無法找到如何解決問題的方法。 – jayendrap

回答

0

我認爲以下answer提供了你在找什麼。否則,你將需要一個全局事務管理器。全局事務管理器將與JEE容器捆綁在一起,或者可以由Atomikos等事務管理器單獨提供。 Spring documentation涵蓋了

0

您可以使用spring的AbstractRoutingDatasource。

請檢查以下鏈接。 AbstractRoutingDatasource被解釋。這裏數據庫根據選擇的語言動態地改變。

Spring AbstractRoutingDatasource

相關問題