前段时间遇到多数据源动态切换问题,总结一下,做个记录,以备后续之需!
首先附上proxool连接池的配置方法:http://312350968.iteye.com/blog/1697508
proxool连接池是相对不叫稳定的第三方连接池,可以很好的跟spring结合,实现项目中动态切换数据源,大体的实现原理是继承AbstractRoutingDataSource类来实现动态切换.
具体代码如下:
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import com.mmc.util.LogUtil;
/**
* @author Wang Huifeng
*
*/
public class DynamicDataSource extends AbstractRoutingDataSource {
/**
* 动态切换数据源
*/
@Override
protected Object determineCurrentLookupKey() {
Object key=DataSourceContextHolder. getDataSourceType();
if(key==null){
LogUtil.log("当前数据源是:"+DataSourceType.DB1);
}else{
LogUtil.log("当前数据源是:"+key);
}
return key;
}
}
/**
* @author Wang Huifeng
*
*/
public class DataSourceType {
public static final String DB1="db1";
public static final String DB2="db2";
}
/**
* @author Wang Huifeng
*
*/
@SuppressWarnings("unchecked")
public class DataSourceContextHolder {
private static final ThreadLocal contextHolder = new ThreadLocal();
public static void clearDataSourceType() {
contextHolder.remove();
}
public static String getDataSourceType() {
return (String) contextHolder.get();
}
public static void setDataSourceType(String dataSourceType) {
contextHolder.set(dataSourceType);
}
}
下面是是项目中如何调用以及spring配置文件中如何配置多数据源:
proxool的配置文件,目前该配置文件只有两个数据源
## proxool configuration
jdbc-0.proxool.alias=db1
jdbc-0.proxool.driver-class=com.mysql.jdbc.Driver
jdbc-0.proxool.driver-url=jdbc\:mysql\://192.168.1.221\:3306/demo3?useUnicode\=true&characterEncoding\=utf-8
jdbc-0.user=root
jdbc-0.password=123456
jdbc-0.proxool.minimum-connection-count=25
jdbc-0.proxool.maximum-connection-count=100
jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE
jdbc-0.proxool.statistics=1m,15m,1d
jdbc-0.proxool.house-keeping-sleep-time=6000
jdbc-0.proxool.simultaneous-build-throttle=20
jdbc-0.proxool.prototype-count=3
jdbc-0.proxool.trace=true
## proxool configuration
jdbc-1.proxool.alias=db2
jdbc-1.proxool.driver-class=com.mysql.jdbc.Driver
jdbc-1.proxool.driver-url=jdbc\:mysql\://192.168.1.221\:3306/demo2?useUnicode\=true&characterEncoding\=utf-8
jdbc-1.user=root
jdbc-1.password=123456
jdbc-1.proxool.minimum-connection-count=25
jdbc-1.proxool.maximum-connection-count=100
jdbc-1.proxool.house-keeping-test-sql=select CURRENT_DATE
jdbc-1.proxool.statistics=1m,15m,1d
jdbc-1.proxool.house-keeping-sleep-time=6000
jdbc-1.proxool.simultaneous-build-throttle=20
jdbc-1.proxool.prototype-count=3
jdbc-1.proxool.trace=true
该方法是如何切换数据源
DataSourceContextHolder.setDataSourceType(DataSourceType.DB1);
改段代码是如何在spring中配置多数据源:
<!-- Proxool 数据源 -->
<bean id="dataSource1"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.logicalcobwebs.proxool.ProxoolDriver</value>
</property>
<property name="url">
<value>proxool.db1</value>
</property>
</bean>
<bean id="dataSource2"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.logicalcobwebs.proxool.ProxoolDriver</value>
</property>
<property name="url">
<value>proxool.db2</value>
</property>
</bean>
<bean id="dataSource" class="com.mmc.dataSourceUtil.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="db1" value-ref="dataSource1" />
<entry key="db2" value-ref="dataSource2" />
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSource1" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
<!-- 扫描带注解的实体类 -->
<property name="packagesToScan">
<list>
<value>com.mmc.pojo</value>
</list>
</property>
<!-- 提供注解扫描类的设置 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<!--
<prop key="hibernate.show_sql">true</prop> <prop
key="hibernate.format_sql">true</prop>
-->
<prop key="hibernate.jdbc.batch_size">50</prop>
<prop key="hibernate.connection.autocommit">true</prop>
<prop key="hibernate.cache.use_query_cache">false</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
</props>
</property>
</bean>
分享到:
相关推荐
NULL 博文链接:https://qdjinxin.iteye.com/blog/773488
Proxool-数据源配置详解,内附部分proxool-0.9.1.jar,proxool-cglib.jar 以及 Proxool配制详解.doc
spring+proxool配置spring+proxool配置spring+proxool配置
在Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: ...
spring proxool配置资料 spring proxool配置资料spring proxool配置资料
proxool配置详解,配置是关键,理解深刻才能正确使用
proxool配置参数说明。 spring结合proxool的datasource配置方法 及proxool-0.9.1.jar proxool-cglib.jar
JavaEE源代码 proxool-0.8.3JavaEE源代码 proxool-0.8.3JavaEE源代码 proxool-0.8.3JavaEE源代码 proxool-0.8.3JavaEE源代码 proxool-0.8.3JavaEE源代码 proxool-0.8.3JavaEE源代码 proxool-0.8.3JavaEE源代码 ...
proxool连接池配置详解 proxool连接池配置详解 proxool连接池配置详解 proxool连接池配置详解 proxool连接池配置详解 proxool连接池配置详解
Proxool 是java一个开源的连接池包,使用起来非常方便
proxool配置说明,轻松配置proxool连接池相关属性
Spring中使用proxool的配置 Spring中使用proxool的配置Spring中使用proxool的配置 Spring中使用proxool的配置
基于ssh的proxool连接池配置,希望可以帮助到想了解proxool连接池配置的朋友
博文链接:https://log-cd.iteye.com/blog/199482
项目实用的proxool连接池配置文件,每个标签都有注释,可以直接拿来使用
proxool配置与测试.doc( proxool配置与测试.doc )
proxool 连接mysql连接池用的东西 ,为大家下载。
此Proxool修改包已经加入加密解密功能,直接加入压缩包中的jar再将DecUtil类放于项目,此类中有main方法生成加密和解密文。本人已经自用项目一切OK,希望你也行,因为很费时间费力顾10分对不起了,不会用的可以评论...
由于项目需求的需要,我们引入了连接池。...我们采用了Hibernate,所以可以考虑hibernate自带的连接池机制,但是发现效率不高,而且Hibernate也推荐使用c3p0或Proxool连接池,在我们的项目中采用了Proxool