Spring3+Hibernate4 配置多个数据源的方法

来源:互联网 发布:手动添加网络ssid 编辑:程序博客网 时间:2024/05/21 19:42


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;
    }
}

0 0
原创粉丝点击