AbstractRoutingDataSourceを解決するために、複数のデータソースを使用してのばね問題問題を解決するためにAbstractRoutingDataSource複数のデータソース[手動スプリングAOPのコード、不使用を切り替えます]

ターン:

この問題を解決するために複数のデータソースの春AbstractRoutingDataSource使用

複数のデータソース、例えば、別々の読み出しおよび書き込みデータベース構成、一般的です。

元のプロジェクト新たな需要の出現は、理事会の要求は、複数のデータソースの問題を伴うコードを提供するためにサーバを追加します。

次のように解決策は以下のとおりです。

図1において、第1データソースの複数

コードをコピー
1 < ビーンID = "データソース" クラス= "org.apache.commons.dbcp.BasicDataSource" > 2 < プロパティ= "driverClassName" = "net.sourceforge.jtds.jdbc.Driver" > 3 </ プロパティ> 4 < プロパティ= "URL" = "はjdbc:JTDS:のSQLServer://10.82.81.51:1433; databaseNameの=基準" > 5 </ プロパティ> 6 < プロパティ= "ユーザ名"= "youguess" > </プロパティ> 7 < プロパティ= "パスワード" = "youguess" > </ プロパティ> 8 </ ビーン> 9 < ビーンID = "dataSource2" クラス= "org.apache.commons.dbcp.BasicDataSource" > 10 < プロパティ名前= "driverClassName" = "net.sourceforge.jtds.jdbc.Driver" > 11 </ プロパティ> 12 < プロパティ= "URL"= "JDBC:JTDS:のSQLServer://10.82.81.52:1433; databaseNameの=標準" > 13 </ プロパティ> 14 < プロパティ= "ユーザ名" = "youguess" > </ プロパティ> 15 < プロパティ=」パスワード」= "youguess" > </ プロパティ> 16 </ >
コードをコピー

2、DynamicDataSource AbstractRoutingDataSourceを継承するクラスを作成し、determineCurrentLookupKeyを達成するための方法

 

コードをコピー
1つのパッケージcom.standard.core.util。
2 インポートorg.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource。3 パブリッククラスDynamicDataSourceは延びAbstractRoutingDataSource { 4 @Override 5 保護オブジェクトdetermineCurrentLookupKey(){ 6 リターンCustomerContextHolder.getCustomerTypeを(); 7 } 8}
コードをコピー

 

3、ThreadLocalの使用は、スレッドの安全性の問題を解決します

 

コードをコピー
1つのパッケージcom.standard.core.util。
2 パブリッククラスCustomerContextHolder { 3 パブリック静的最終列DATA_SOURCE_A =「データソース」4 パブリック静的最終的な文字列DATA_SOURCE_B =「dataSource2」5 プライベート静的最終ThreadLocalの<ストリング> contextHolder = 新規のThreadLocal <ストリング> (); 6 パブリック静的ボイドsetCustomerType(文字列customerType){ 7 contextHolder.set(customerType)。8 } 9 パブリックスタティックストリングgetCustomerType(){ 10 リターンcontextHolder.get()。11 } 12 公共静的ボイドclearCustomerType(){ 13 contextHolder.remove()。14 } 15}
コードをコピー

 

 

 

図4に示すように、データソースが構成します

 

 

コードをコピー
1 < ビーンID = "dynamicDataSource" クラス= "com.standard.core.util.DynamicDataSource" > 2 < プロパティ= "targetDataSources" > 3 < マッピングキー型= "java.lang.Stringで" > 4 < エントリ値-REF = "データソース" キー= "データソース" > </ エントリ> 5 < エントリ値-REF = "dataSource2" キー= "dataSource2" > </ エントリ> 6 </ マップ> 7 </ プロパティ> 8 < プロパティ= "defaultTargetDataSource" REF = "データソース" > 9 </ プロパティ> 10 </ >
コードをコピー

図5に示すように、スイッチングデータソースDAOImpl

1 CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B)。 

 

おすすめ

転載: www.cnblogs.com/libin6505/p/11229947.html