首页 > 编程语言 > 详细

Spring配置动态数据源

时间:2015-11-09 15:15:43      阅读:272      评论:0      收藏:0      [点我收藏+]
<bean id="dataSourceWodsyTown" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <property name="driverClass" value="${datasource.driverClassName}"></property>
        <property name="jdbcUrl" value="${datasource.wodsytown.url}"></property>
        <property name="user" value="${datasource.wodsytown.username}"></property>
        <property name="password" value="${datasource.wodsytown.password}"></property>
        <property name="maxStatements" value="${hibernate.c3p0.maxStatements}"></property>
        <property name="minPoolSize" value="${hibernate.c3p0.minSize}"></property>
        <property name="maxPoolSize" value="${hibernate.c3p0.maxSize}"></property>
        <property name="initialPoolSize" value="${hibernate.c3p0.initialPoolsize}"></property>
        <property name="idleConnectionTestPeriod" value="${hibernate.c3p0.idleConnectionTestPeriod}"></property>
        <property name="maxIdleTime" value="${hibernate.c3p0.maxIdleTime}"></property>
        <property name="acquireIncrement" value="${hibernate.c3p0.acquireIncrement}"></property>
        <property name="testConnectionOnCheckin" value="${hibernate.c3p0.testConnectionOnCheckin}"></property>
        <property name="testConnectionOnCheckout" value="${hibernate.c3p0.testConnectionOnCheckout}"></property>
        <property name="acquireRetryAttempts" value="${hibernate.c3p0.acquireRetryAttempts}"></property>
        <property name="numHelperThreads" value="${hibernate.c3p0.numHelperThreads}"></property>
    </bean>
<bean id="dataSourceWodsy" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <property name="driverClass" value="${datasource.driverClassName}"></property>
        <property name="jdbcUrl" value="${datasource.wodsy.url}"></property>
        <property name="user" value="${datasource.wodsy.username}"></property>
        <property name="password" value="${datasource.wodsy.password}"></property>
        <property name="maxStatements" value="${hibernate.c3p0.maxStatements}"></property>
        <property name="minPoolSize" value="${hibernate.c3p0.minSize}"></property>
        <property name="maxPoolSize" value="${hibernate.c3p0.maxSize}"></property>
        <property name="initialPoolSize" value="${hibernate.c3p0.initialPoolsize}"></property>
        <property name="idleConnectionTestPeriod" value="${hibernate.c3p0.idleConnectionTestPeriod}"></property>
        <property name="maxIdleTime" value="${hibernate.c3p0.maxIdleTime}"></property>
        <property name="acquireIncrement" value="${hibernate.c3p0.acquireIncrement}"></property>
        <property name="testConnectionOnCheckin" value="${hibernate.c3p0.testConnectionOnCheckin}"></property>
        <property name="testConnectionOnCheckout" value="${hibernate.c3p0.testConnectionOnCheckout}"></property>
        <property name="acquireRetryAttempts" value="${hibernate.c3p0.acquireRetryAttempts}"></property>
        <property name="numHelperThreads" value="${hibernate.c3p0.numHelperThreads}"></property>
    </bean>
<bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    ${hibernate.dialect}
                </prop>
                <prop key="hibernate.show_sql">
                    ${hibernate.show_sql}
                </prop>
                <prop key="hibernate.format_sql">
                    ${hibernate.format_sql}
                </prop>
                <prop key="hibernate.jdbc.fetch_size">
                    ${hibernate.jdbc.fetch_size}
                </prop>
                <prop key="hibernate.jdbc.batch_size">
                    ${hibernate.jdbc.batch_size}
                </prop>
                <prop key="hibernate.connection.release_mode">
                    ${hibernate.connection.release_mode}
                </prop>
                <prop key="hibernate.cache.use_second_level_cache">
                    ${hibernate.cache.use_second_level_cache}
                </prop>
                <prop key="hibernate.cache.use_query_cache">
                    ${hibernate.cache.use_query_cache}
                </prop>
                <prop key="hibernate.cache.provider_class">
                    ${hibernate.cache.provider_class}
                </prop>
                
            </props>
        </property>
        <!-- 配置实体配置文件 -->
        <property name="mappingDirectoryLocations">
            <list>
                <value>classpath:/com/java/bean</value>
            </list>
        </property>
    </bean>
public enum DataSourceContext {

    SOURCE1,
    SOURCE2
}
private static final ThreadLocal<DataSourceContext> contextHolder = new ThreadLocal<DataSourceContext>();
    
    public static void set(DataSourceContext e){
        contextHolder.set(e);
    }
    
    public static DataSourceContext get(){
        return contextHolder.get();
    }
    
    public static void clear(DataSourceContext e){
        contextHolder.remove();
    }
}
public class DynamicDataSource extends AbstractRoutingDataSource {

    @Override
    protected Object determineCurrentLookupKey() {
        Object o = DataSourceContextHolder.get();
//        if(o == null){
//            return DataSourceContext.SOURCE1;
//        }
        return o;
    }

}
public class Source1HibernateDaoSupport extends HibernateDaoSupport {

    public WodsyHibernateDaoSupport() {
        super();
        DataSourceContextHolder.set(DataSourceContext.SOURCE1);
    }

    @Resource(name = "sessionFactory")
    public void setMySessionFactory(SessionFactory sessionFactory) {
        super.setSessionFactory(sessionFactory);
    }
}
public class Source2HibernateDaoSupport extends HibernateDaoSupport {

    public WodsyHibernateDaoSupport() {
        super();
        DataSourceContextHolder.set(DataSourceContext.SOURCE2);
    }

    @Resource(name = "sessionFactory")
    public void setMySessionFactory(SessionFactory sessionFactory) {
        super.setSessionFactory(sessionFactory);
    }
}

 

Spring配置动态数据源

原文:http://www.cnblogs.com/idel/p/4949792.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!