关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、418799587 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 14160|回复: 2

[环境搭建] 多数据源的问题

[复制链接]
发表于 2017-9-9 14:56:29 | 显示全部楼层 |阅读模式
在spring-mvc-hibernate.xml里已经配置另外一个数据源:
<!-- 引入属性文件 -->
        <context:property-placeholder location="classpath:dbconfig.properties" />
        <!-- 配置数据源1 -->
        <bean id="dataSource_jeecg" name="dataSource_jeecg" class="com.alibaba.druid.pool.DruidDataSource"
                init-method="init" destroy-method="close">
                <property name="url" value="${jdbc.url.jeecg}" />
                <property name="username" value="${jdbc.username.jeecg}" />
                <property name="password" value="${jdbc.password.jeecg}" />
                <!-- 初始化连接大小 -->
                <property name="initialSize" value="0" />
                <!-- 连接池最大使用连接数量 -->
                <property name="maxActive" value="2000" />
                <!-- 连接池最大空闲 -->
                <property name="maxIdle" value="20" />
                <!-- 连接池最小空闲 -->
                <property name="minIdle" value="5" />
                <!-- 获取连接最大等待时间 -->
                <property name="maxWait" value="60000" />
                <!--
                <property name="poolPreparedStatements" value="true" />
                <property name="maxPoolPreparedStatementPerConnectionSize" value="33" />
                -->
                <property name="validationQuery" value="${validationQuery.sqlserver}" />
                <property name="testOnBorrow" value="false" />
                <property name="testOnReturn" value="false" />
                <property name="testWhileIdle" value="true" />

                <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
                <property name="timeBetweenEvictionRunsMillis" value="60000" />
                <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
                <property name="minEvictableIdleTimeMillis" value="25200000" />

                <!-- 打开removeAbandoned功能 -->
                <property name="removeAbandoned" value="true" />
                <!-- 1800秒,也就是30分钟 -->
                <property name="removeAbandonedTimeout" value="1800" />
                <!-- 关闭abanded连接时输出错误日志 -->
                <property name="logAbandoned" value="true" />

                <!-- 开启Druid的监控统计功能 -->
                <property name="filters" value="stat" />
                <!--<property name="filters" value="mergeStat" /> -->
                <!-- Oracle连接是获取字段注释 -->
                <property name="connectProperties">
                        <props>
                                <prop key="remarksReporting">true</prop>
                        </props>
                </property>
        </bean>
                <!-- 引入属性文件 -->
        <context:property-placeholder location="classpath:dbconfig2.properties" />
        <bean id="dataSource_jeecg2" name="dataSource_jeecg2" class="com.alibaba.druid.pool.DruidDataSource"
                init-method="init" destroy-method="close">
                <property name="url" value="${jdbc.url.jeecg}" />
                <property name="username" value="${jdbc.username.jeecg}" />
                <property name="password" value="${jdbc.password.jeecg}" />
                <!-- 初始化连接大小 -->
                <property name="initialSize" value="0" />
                <!-- 连接池最大使用连接数量 -->
                <property name="maxActive" value="2000" />
                <!-- 连接池最大空闲 -->
                <property name="maxIdle" value="20" />
                <!-- 连接池最小空闲 -->
                <property name="minIdle" value="5" />
                <!-- 获取连接最大等待时间 -->
                <property name="maxWait" value="60000" />
                <!--
                <property name="poolPreparedStatements" value="true" />
                <property name="maxPoolPreparedStatementPerConnectionSize" value="33" />
                -->
                <property name="validationQuery" value="${validationQuery.sqlserver}" />
                <property name="testOnBorrow" value="false" />
                <property name="testOnReturn" value="false" />
                <property name="testWhileIdle" value="true" />

                <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
                <property name="timeBetweenEvictionRunsMillis" value="60000" />
                <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
                <property name="minEvictableIdleTimeMillis" value="25200000" />

                <!-- 打开removeAbandoned功能 -->
                <property name="removeAbandoned" value="true" />
                <!-- 1800秒,也就是30分钟 -->
                <property name="removeAbandonedTimeout" value="1800" />
                <!-- 关闭abanded连接时输出错误日志 -->
                <property name="logAbandoned" value="true" />

                <!-- 开启Druid的监控统计功能 -->
                <property name="filters" value="stat" />
                <!--<property name="filters" value="mergeStat" /> -->
                <!-- Oracle连接是获取字段注释 -->
                <property name="connectProperties">
                        <props>
                                <prop key="remarksReporting">true</prop>
                        </props>
                </property>
        
        </bean>
        
        <!-- 数据源集合 -->
        <bean id="dataSource"
                class="org.jeecgframework.core.extend.datasource.DynamicDataSource">
                <property name="targetDataSources">
                        <map key-type="org.jeecgframework.core.extend.datasource.DataSourceType">
                                <entry key="dataSource_jeecg" value-ref="dataSource_jeecg" />
                                <entry key="dataSource_jeecg2" value-ref="dataSource_jeecg2" />
                                <!-- <entry key="mapdataSource" value-ref="mapdataSource" /> -->
                        </map>
                </property>
                <property name="defaultTargetDataSource" ref="dataSource_jeecg" />
        </bean>
枚举类已经添加新的数据源类型:
public enum DataSourceType {
        dataSource_jeecg,dataSource_enter,dataSource4,mapdataSource,dataSource_jeecg2
}

DataSourceContextHolder 类:
public class DataSourceContextHolder {

        private static final ThreadLocal<DataSourceType> contextHolder=new ThreadLocal<DataSourceType>();
        
        public static void setDataSourceType(DataSourceType dataSourceType){
                contextHolder.set(dataSourceType);
        }
        
        public static DataSourceType getDataSourceType(){
               
                return (DataSourceType) contextHolder.get();
        }
        
        public static void clearDataSourceType(){
                contextHolder.remove();
        }
        
}


DynamicDataSource 类:
public class DynamicDataSource extends AbstractRoutingDataSource {

        /*
         * 该方法必须要重写  方法是为了根据数据库标示符取得当前的数据库
         */
        
        protected Object determineCurrentLookupKey() {
                DataSourceType dataSourceType= DataSourceContextHolder.getDataSourceType();
               
                return dataSourceType;
        }

        
        public void setDataSourceLookup(DataSourceLookup dataSourceLookup) {
                super.setDataSourceLookup(dataSourceLookup);
        }

        
        public void setDefaultTargetDataSource(Object defaultTargetDataSource) {
                super.setDefaultTargetDataSource(defaultTargetDataSource);
        }

        
        public void setTargetDataSources(Map targetDataSources) {
                super.setTargetDataSources(targetDataSources);
        }

}

dbconfig2.properties和dbconfig.properties里分别为:

hibernate.dialect=org.hibernate.dialect.OracleDialect
validationQuery.sqlserver=SELECT 1 FROM DUAL
jdbc.url.jeecg=jdbcracle:thin192.168.0.250:1521rcl
jdbc.username.jeecg=eeim_ln
jdbc.password.jeecg=fxkj1501
jdbc.dbType=oracle

hibernate.dialect=org.hibernate.dialect.OracleDialect
validationQuery.sqlserver=SELECT 1 FROM DUAL
jdbc.url.jeecg=jdbcracle:thin192.168.0.250:1521rcl
jdbc.username.jeecg=hr_tl
jdbc.password.jeecg=fxkj1501
jdbc.dbType=oracle

两个数据信息。
为什么在测试类里进入业务查询调用DataSourceContextHolder.setDataSourceType(DataSourceType.dataSource_jeecg2);缺切换不了数据库,求大神解答~!感激不尽~!


发表于 2018-4-25 13:30:43 | 显示全部楼层
顶起来
发表于 2018-4-25 13:41:44 | 显示全部楼层
我们不建议这么模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表