1 首先线程类(放哪你自己定)
public class DataSourceThread {
public static final String DATA_SOURCE_DEFAULT = "dataSource1";
public static final String DATA_SOURCE_DINGFAN = "dataSource2";
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();
}
}
2 继承
public class DynamicDataSource extends AbstractRoutingDataSource {
protected Object determineCurrentLookupKey() {
return DataSourceThread.getCustomerType();
}
}
3 spring.xml配置
<!-- 配置数据源 -->
<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.url}" p:username="${jdbc.username}" p:password="${jdbc.password}"
p:timeBetweenEvictionRunsMillis="1000" p:validationQuery="select 1">
</bean>
<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.url2}" p:username="${jdbc.username}" p:password="${jdbc.password}"
p:timeBetweenEvictionRunsMillis="1000" p:validationQuery="select 1">
</bean>
<!--默认数据源配置 -->
<bean id="dataSource" class="com.complex.verson1_0.common.dao.DynamicDataSource" >
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry value-ref="dataSource1" key="dataSource1"></entry>
<entry value-ref="dataSource2" key="dataSource2"></entry>
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSource1" >
</property>
</bean>
<!-- 配置SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
p:dataSource-ref="dataSource" p:configLocation="classpath:hibernate.cfg.xml">
</bean>
4 使用
public class TestAction extends BaseAction{
private static final long serialVersionUID = 1536384860148891148L;
@Autowired
private ITestService testServiceImp;
public String queryAll() throws Exception {
DataSourceThread.setCustomerType(DataSourceThread.DATA_SOURCE_DINGFAN);
List<String> list = testServiceImp.getName();
System.out.println(list.size());
return SUCCESS;
}
}