我在PostgreSQL中有三個相同模式的單個數據庫。 現在我需要根據locale-key(存儲在用戶會話中)爲數據庫操作選擇特定模式。我發現某個地方這個東西類似於動態數據源路由。春季動態數據源路由
任何人都有什麼想法如何在Spring中實現這個? 這會影響事務管理嗎? 請儘量分享任何示例代碼。
任何建議,將不勝感激。 謝謝&此致敬禮。
我在PostgreSQL中有三個相同模式的單個數據庫。 現在我需要根據locale-key(存儲在用戶會話中)爲數據庫操作選擇特定模式。我發現某個地方這個東西類似於動態數據源路由。春季動態數據源路由
任何人都有什麼想法如何在Spring中實現這個? 這會影響事務管理嗎? 請儘量分享任何示例代碼。
任何建議,將不勝感激。 謝謝&此致敬禮。
我建議使用這種方法:
LocaleContexHolder
來獲取附加線程上的當前語言環境。LocaleContextHolder
來確定區域設置,然後使用它來確定應使用哪個數據源。如果您有單個數據庫,那麼動態方面應該與連接池無關 - 所有連接仍然適用於單個數據庫。您只需在開始事務後動態設置適當的模式。
這可以通過使用高於<tx:annotation-driven />
的順序來實現。在這方面,你應該獲得當前連接:
DataSourceUtils.getConnection(dataSource)
,併發出以下PostgreSQL的聲明(見:http://www.postgresql.org/docs/9.1/static/sql-set.html以獲取有關schema
參數);
set schema 'schemaname-on-the-basis-of-session-parameter';
另請參閱using schemas in postgres。
至於事務管理 - 事務與物理連接和會話有關。另一方面的架構是一種名稱空間,因此您不必更改事務管理,只需在用戶請求處理期間的每個事務開始時設置當前架構。