標籤:des style blog color io os java ar 資料
用到一個項目,需要整合2個不同的資料庫!
現將代碼貼下,以備後用:
1、建立靜態映射類,該類映射動態資料源
public class DataSourceMap { public static final String Analyse="Analyse"; public static final String DLmarket= "DLmarket"; } 2、建立資料庫連接配置容器類
public class DataSourceContextHolder { private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>(); public static void setCustomerType(String customerType){ contextHolder.set(customerType); } public static String getCustomerType() { return contextHolder.get(); } public static void clearCustomerType() { contextHolder.remove(); } } 3、建立動態資料源切換類
public class DynamicDataSource extends AbstractRoutingDataSource{ @Override protected Object determineCurrentLookupKey() { // TODO Auto-generated method stub String customerType=""; if(DataSourceContextHolder.getCustomerType()!=null){ customerType = DataSourceContextHolder.getCustomerType().toString(); } return customerType; } }
該類繼承AbstractRoutingDataSource,並重寫determineCurrentLookupKey方法
4、在spring中配置多資料來源
<bean id="analyseDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${jdbc_url}" /> <property name="username" value="${jdbc_username}" /> <property name="password" value="${jdbc_password}" /> xxx... </bean> <bean id="dlmarketDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${jdbc_url_dlmarket}" /> <property name="username" value="${jdbc_username_dlmarket}" /> <property name="password" value="${jdbc_password_dlmarket}" /> xxx... <bean> <!-- 多資料來源的映射關係 --> <bean id="dataSource" class="com.current.util.DynamicDataSource"> <property name="targetDataSources"> <map key-type="java.lang.String"> <!-- key的值必須要和靜態索引值對照類中的值相同 --> <entry value-ref="analyseDataSource" key="Analyse"></entry> <entry value-ref="dlmarketDataSource" key="DLmarket"></entry> </map> </property> <property name="defaultTargetDataSource" ref="analyseDataSource"></property> </bean>
其他的SessionFactory 交易管理員配置都不需要修改。
5、在Action中切換資料來源
public void getList(){ DataSourceContextHolder.setCustomerType(DataSourceMap.DLmarket); int id=1; List<Chaining> chainList = chainService.getList(id); System.out.println(chainList.get(0).getChaining()); }
SSH配置動態資料源