AbstractRoutingDataSource动态切换数据源
来源:互联网 发布:淘宝多付款退款流程图 编辑:程序博客网 时间:2024/05/17 22:06
spring2.0以后增加了AbstractRoutingDataSource这个东西提供动态切换数据源。
AbstractRoutingDataSource继承了AbstractDataSource,AbstractDataSource是javax.sql.DataSource的子类。
下面是一个动态切换数据源的例子:
1、在spring.xml配置文件配置
<!--配置连接池 -->
<bean id="readAndWriteDataSouce" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${driver}"/> <!-- 指定连接数据库的驱动 -->
<property name="jdbcUrl" value="${url}"/> <!-- 指定连接数据库的URL -->
<property name="user" value="${user}"/> <!-- 指定连接数据库的用户名 -->
<property name="password" value="${password}"/> <!-- 指定连接数据库的密码 -->
<property name="maxPoolSize" value="1000"/> <!-- 指定连接数据库连接池的最大连接数 -->
<property name="minPoolSize" value="100"/> <!-- 指定连接数据库连接池的最小连接数(生产使用时可改大些) -->
<property name="initialPoolSize" value="100"/> <!-- 指定连接数据库连接池的初始化连接数(生产使用时可改大些) -->
<property name="maxIdleTime" value="60"/> <!-- 指定连接数据库连接池的连接的最大空闲时间 -->
<!-- 当连接池连接耗尽时,客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。默认: 0 -->
<property name="checkoutTimeout" value="5000"/>
<property name="acquireIncrement" value="10"/> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireRetryDelay" value="100"/><!--两次连接中间隔时间,单位毫秒。Default: 1000 -->
<property name="idleConnectionTestPeriod" value="60"/> <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
</bean>
<bean id="readDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${driver}"/>
<property name="jdbcUrl" value="${urlForRead}"/>
<property name="user" value="${userForRead}"/>
<property name="password" value="${passwordForRead}"/>
<property name="maxPoolSize" value="1000"/>
<property name="minPoolSize" value="100"/>
<property name="initialPoolSize" value="100"/>
<property name="maxIdleTime" value="60"/>
<property name="checkoutTimeout" value="5000"/>
<property name="acquireIncrement" value="10"/>
<property name="acquireRetryDelay" value="100"/>
<property name="idleConnectionTestPeriod" value="60"/>
</bean>
<!--MultipleDataSource是我们自己写的类继承AbstractRoutingDataSource类,实现动态数据源切换-->
<bean id="multipleDataSource" class="cn.hicard.common.MultipleDataSource">
<property name="defaultTargetDataSource" ref="readAndWriteDataSouce"/>
<property name="targetDataSources">
<map>
<entry key="defaultDataSource" value-ref="readAndWriteDataSouce"/>
<entry key="readDataSource" value-ref="readDataSource"/>
</map>
</property>
</bean>
2、创建动态切换数据源的实现类MultipleDataSource
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
/**
* 多数据源支持, 再调用DAO之前, 执行MultipleDataSource.changeRead(); 更改为读 <br/>
* 读写数据源为默认数据源
*/
public class MultipleDataSource extends AbstractRoutingDataSource{
private static final ThreadLocal<String> dataSourceKey = new InheritableThreadLocal<String>();
/** 更改当前数据源为读数据源*/
public static void changeRead(){
dataSourceKey.set("readDataSource");
}
/*** 更改当前数据源为读写数据源,此数据源为默认数据源 */
public static void changeReadAndWirte(){
dataSourceKey.set("readAndWriteDataSouce");
}
//实现determineCurrentLookupKey方法这个是主要方法获取数据源
@Override
protected Object determineCurrentLookupKey() {
return dataSourceKey.get();
}
}
3、在调用数据库前切换到指定数据源即可
@Service
public class LogServiceImpl implements ILogService {
@Resource
private ILogDao logDao;
@Override
public List<Log> search(Map<String, Object> paramter)throws Exception {
MultipleDataSource.changeRead();//切换数据源
return logDao.search(paramter);
}
}
- AbstractRoutingDataSource动态切换数据源
- AbstractRoutingDataSource动态数据源切换,AOP实现动态数据源切换
- 利用AbstractRoutingDataSource实现动态数据源切换
- 利用AbstractRoutingDataSource实现动态数据源切换
- 利用AbstractRoutingDataSource实现动态数据源切换
- 利用AbstractRoutingDataSource实现动态数据源切换
- 利用AbstractRoutingDataSource实现动态数据源切换
- 利用AbstractRoutingDataSource实现动态数据源切换
- Spring(AbstractRoutingDataSource)实现动态数据源切换
- Spring(AbstractRoutingDataSource)实现动态数据源切换
- 利用AbstractRoutingDataSource实现动态数据源切换
- Spring(AbstractRoutingDataSource)实现动态数据源切换
- Spring(AbstractRoutingDataSource)实现动态数据源切换
- Spring(AbstractRoutingDataSource)实现动态数据源切换
- Spring AbstractRoutingDataSource 实现动态数据源切换
- Spring(AbstractRoutingDataSource)实现动态数据源切换
- Spring(AbstractRoutingDataSource)实现动态数据源切换
- 利用AbstractRoutingDataSource+注解实现动态数据源切换
- Jamon 新能监测工具
- 深入字节码 -- 计算方法执行时间
- java学习笔记-java开发中的23种设计模式
- Calendar和Date-Android Day09
- 【写给自己】项目组件化,修改远程依赖库的流程,特殊情况处理。
- AbstractRoutingDataSource动态切换数据源
- 某中国500强企业BI系统成功应用案例
- live555安装配置
- 程序运行提示msvcp100d.dll和msvcp100r.dll缺少的解决方案 http://blog.csdn.net/ztz0223/article/details/8886247
- 移动互联网未来发展趋势
- String字符补充
- memset+strcpy+strncpy的函数详解以及字符数组输出的特殊情况
- intent.putExtra()方法参数
- 安卓菜单的使用系列1:使用java代码显示菜单