Spring动态配置多数据源
Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性。而这样的方案就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时的请求及系统状态来动态的决定将数据存储在哪个数据库实例中,以及从哪个数据库提取数据。
基本信息
实现
一、动态配置多数据源
1. 数据源的名称常量类:
package com.frogking.datasource;
public class DataSourceConst {
public static final String Admin="Admin";
public static final String User = "User";
}
2. 建立一个获得和设置上下文环境的类,主要负责改变上下文数据源的名称:
package com.frogking.datasource;
public class DataSourceContextHolder {
private static final ThreadLocal contextHolder =
new ThreadLocal(); // 线程本地环境
// 设置数据源类型
public static void setDataSourceType(String dataSourceType) {
contextHolder.set(dataSourceType);
}
// 获取数据源类型
public static String getDataSourceType() {
return (String) contextHolder.get();
}
// 清除数据源类型
public static void clearDataSourceType () {
contextHolder.remove();
}
}
3. 建立动态数据源类,注意,这个类必须继承AbstractRoutingDataSource,且实现方法determineCurrentLookupKey,该方法返回一个Object,一般是返回字符串:
package com.frogking.datasource;
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
// 在进行DAO操作前,通过上下文环境变量,获得数据源的类型
return DataSourceContextHolder. getDataSourceType();
}
}
4. 编写spring的配置文件配置多个数据源
<!-- 数据源相同的内容 -->
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="parentDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>1234</value>
</property>
</bean>
<!-- 以下配置各个数据源的特性 -->
<!-- 数据库test -->
<bean parent="parentDataSource" id="adminDataSource">
<property name="url">
<value>jdbc:mysql://localhost:3306/test</value>
</property>
</bean>
<!-- 不同的数据库test2 -->
<bean parent="parentDataSource" id="userDataSource">
<property name="url">
<value>jdbc:mysql://localhost:3306/test2</value>
</property>
</bean>
<!-- end 配置各个数据源的特性 -->
5. 编写spring配置文件配置多数据源映射关系
<bean class="com.frogking.datasource.DynamicDataSource" id="dataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry value-ref=" adminDataSource " key="Admin"></entry>
<entry value-ref=" userDataSource " key="User"></entry>
</map>
</property>
<property name="defaultTargetDataSource" ref="adminDataSource"></property>
</bean>
6. 配置hibernate,和普通的hibernate、spring结合的配置一样:
<!-- sessionFactory的配置 -->
<BEAN class="org".springframework.orm.hibernate3.LocalSessionFactoryBean id=sessionFactory>
<property name="dataSource">
<REF local="dataSource"> </REF>
</property>
<!-- 实体类资源映射 -->
<property name="mappingResources">
<LIST>
<VALUE>com/frogking/entity/User.hbm.xml </VALUE>
<VALUE>com/frogking/entity/Admin.hbm.xml</VALUE> </LIST>
</property>
<!-- 为sessionFactory 配置Hibernate属性 -->
<property name="hibernateProperties">
<PROPS>
<PROP key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</PROP>
<PROP key="hibernate.show_sql">true</PROP>
<PROP key="hibernate.connection.autocommit">false</PROP>
<PROP key="hibernate.cache.use_query_cache">false</PROP>
<PROP key="hibernate.max_fetch_depth">2</PROP>
<PROP key="hibernate.bytecode.use_reflection_optimizer">true</PROP>
</PROPS>
</property>
</BEAN>
<!-- 为dao配置sessionFactory -->
<BEAN class="com.frogking.dao.LoginHibernateDao" id=loginDao>
<property name="sessionFactory">
<REF local="sessionFactory"> </REF>
</property>
</BEAN>
基于spring和ibatis的多数据源切换方案编辑
基本介绍:
该方案的优势:
该方案的缺点
Spring动态配置多数据源的更多相关文章
- 一文读懂Spring动态配置多数据源---源码详细分析
Spring动态多数据源源码分析及解读 一.为什么要研究Spring动态多数据源 期初,最开始的原因是:想将答题服务中发送主观题答题数据给批改中间件这块抽象出来, 但这块主要使用的是mq消息的方式 ...
- Spring动态切换多数据源解决方案
Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性.而这样的方案就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时 ...
- spring+myBatis 配置多数据源,切换数据源
注:本文来源于 tianzhiwuqis <spring+myBatis 配置多数据源,切换数据源> 一个项目里一般情况下只会使用到一个数据库,但有的需求是要显示其他数据库的内容,像这样 ...
- Spring Boot配置多数据源并实现Druid自动切换
原文:https://blog.csdn.net/acquaintanceship/article/details/75350653 Spring Boot配置多数据源配置yml文件主数据源配置从数据 ...
- spring+mybatis 配置双数据源
配置好后,发现网上已经做好的了, 不过,跟我的稍有不同, 我这里再拿出来现个丑: properties 文件自不必说,关键是这里的xml: <?xml version="1.0&quo ...
- Spring项目配置多数据源
项目中有用到多数据源,并进行动态切换,使用的是阿里的druid.看网上有一篇大致一样的就偷偷懒 import java.sql.SQLFeatureNotSupportedException; imp ...
- springboot基于注解动态配置多数据源以及多数据源的事务统一
参考文档:https://www.cnblogs.com/zhangboyu/p/7622412.html https://blog.csdn.net/qq_34322777/article/deta ...
- Spring+Hibernate配置多数据源
配置说明 在实际应用中,经常会用到读写分离,这里就这种情况进行Spring+Hibernate的多数据源配置.此处的配置只是让读的方法操作一个数据库,写的方法操作另外一个数据库. 注:我这里的配置JD ...
- spring boot 配置双数据源mysql、sqlServer
背景:原来一直都是使用mysql数据库,在application.properties 中配置数据库信息 spring.datasource.url=jdbc:mysql://xxxx/test sp ...
随机推荐
- Ubuntu系统如何查看硬件配置信息
查看ubuntu硬件信息 1, 主板信息 .查看主板的序列号 -------------------------------------------------- #使用命令 dmidecode | ...
- 【转】如何用 Chrome for Android 做远程遥控 debugging
http://blog.csdn.net/wuchengzhi82/article/details/22190435
- spring mvc 406 (Not Acceptable) json转换错误
spring mvc通过@RequestMapping("/register")和@ResponseBody返回json格式的字符串时出现如下异常: The resource id ...
- VMware安装64位操作系统提示Intel VT-x处于禁用状态的解决办法
用VMware安装64位操作系统时,如果目前本地的操作系统是64位的,那么可以说明CPU是肯定支持64位的,这时候如果提示此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态.这个 ...
- 手动创建第一个JSP应用
当按照上一篇文章所说的,配置好了tomcat服务器之后,我们就可以开发运行在tomcat上的第一个web应用了,在对tomcat的目录了解之后,我们知道webapps是存放我们编写相应应用程序的目录, ...
- Spring MVC程序中得到静态资源文件css,js,图片
转载自:http://www.blogjava.net/fiele/archive/2014/08/24/417283.html 用 Spring MVC 开发应用程序,对于初学者有一个很头疼的问题, ...
- fedora 损坏,开机出现GRUB 2 启动提示符
如果设置不当,GRUB 2 可能会加载失败,随后进入启动提示符中.要解决此问题,按如下步骤执行: 1. 列出 GRUB 2 识别的驱动器: grub2> ls 2. 对于一个含有三个分区的 do ...
- 通过扩展让ASP.NET Web API支持W3C的CORS规范(转载)
转载地址:http://www.cnblogs.com/artech/p/cors-4-asp-net-web-api-04.html CORS(Cross-Origin Resource Shari ...
- adbWireless 简单教程
adbWireless:无线使用ADB(siir.es.adbWireless) 下载: http://www.coolapk.com/apk/siir.es.adbWireless >> ...
- hdu 2050:折线分割平面(水题,递归)
折线分割平面 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...