2014-02-25 63 views
2

我想在我的spring批處理應用程序中實現AbstractRoutingDatasource。 在調用方法之前,我的數據源在DAO層被切換。Spring批處理中的抽象路由數據源

但問題似乎是春季批處理中的所有批處理作業都是基於事務的。 因爲它們是基於事務的,所以在事務開始之前所有dataSource被設置,並且在事務處理過程中不可能切換數據源..

我的假設是否正確?和任何解決方案/解決辦法來解決它?

+1

這不適用於任何基於Spring的應用程序。您需要在事務啓動之前設置路由參數。所以是的,你的假設是正確的。 –

+0

**這不適用於任何基於Spring的應用程序。**您的意思是Spring批處理?但是批量工作呢?抽象路由數據源永遠不能應用於彈簧批量? –

+0

也許這可以工作,但你必須使用XA跨越TX;我沒有用過他們看看http://stackoverflow.com/questions/14369876/spring-batch-and-xa-and-local-transactions –

回答

0

使用路由數據源需要一個提供您所選擇的鍵和值作爲數據源的映射。您可以決定使用哪種類型的密鑰 - 例如針對不同國家/地區的區域設置。然後在實現AbstractRoutingDataSource的類中提供從數據源映射中檢索的鍵。

所以是的 - 地圖是在應用程序設置期間配置的,但是您的AbstractRoutingDataSource會動態地決定使用哪個數據源。

@Override 
protected Object determineCurrentLookupKey() { 
    return LocaleContextHolder.getLocale(); 
} 
+0

我清楚地知道如何切換數據源基於密鑰。可能是我的問題不清楚。 那麼碰巧數據源不能切換在事務處理方法中編輯..(@ Transactional)。看起來,處理器步驟(讀者,處理器,編寫器在春季批處理)遵循事務行爲,因此數據源切換不會發生在內部一旦進程開始......我想知道是否有解決這個問題? –

+0

夥計們,這個問題的解決方案?我也有麻煩,請諮詢。 – Ketan

相關問題