在spring中配置多个数据源,并实现动态切换
朋友遇到的问题,整理好了,我觉得不错,贴出来分享下。
spring中xml文件中的配置:
<bean id="dataSource1"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass"><value>oracle.jdbc.driver.OracleDriver</value></property>
<property name="jdbcUrl"><value>jdbc:oracle:thin:@127.0.0.1:1521:ORACLE</value></property>
<property name="user"><value>htctposp</value></property>
<property name="password"><value>htctposp</value></property>
<property name="minPoolSize"><value>1</value></property>
<property name="maxPoolSize"><value>5</value></property>
<property name="maxIdleTime"><value>1800</value></property>
</bean>
<bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/mysql?characterEncoding=UTF8"></property>
<property name="username" value="root"></property>
<property name="password" value="1111"></property>
</bean>
<bean id="dataSource" class="com.huateng.util.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="dataSource1" value-ref="dataSource1"/>
<entry key="dataSource2" value-ref="dataSource2"/>
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSource1"/>
</bean>
写两个工具类DbContextHolder和DynamicDataSource,如下:
public class DynamicDataSource extends AbstractRoutingDataSource{
static Logger log=Logger.getLogger("DynamicDataSource");
/* (non-Javadoc)
* @see org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource#determineCurrentLookupKey()
*/
protected Object determineCurrentLookupKey() {
// DbContextHolder.setDbType("2");
return DbContextHolder.getDbType();
}
}
public class DbContextHolder {
private static final ThreadLocal contextHolder = new ThreadLocal();
public static void setDbType(String dbType){
contextHolder.set(dbType);
}
public static String getDbType(){
return (String)contextHolder.get();
}
public static void clearDbType(){
contextHolder.remove();
}
}
一般在调用service层之前就要切换数据库(一般要在action中),切换数据库的代码:
DbContextHolder.setDbType("dataSource2");
分享到:
相关推荐
Springcloud 多数库 多数据源整合,查询动态切换数据库
本篇文章主要介绍了Spring配置多个数据源并实现动态切换示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
请自行修改com/resources/datasource.properties中数据库配置,Demo中配置的两个数据源,一个是Mysql,一个是Oracle。 运行之前请自行建立数据库的表。
SpringBoot整合mybatis-plus实现多数据源的动态切换且支持分页查询,案例以postgresql和oracle数据库为数据源,分别使用mybatis-plus分页插件和pagehelper分页插件实现分页查询。
一个spring boot动态切换多数据源的完整demo。
Spring 动态切换 数据源 可同事在多个数据源中切换
用springboot 集成mybatis多数据源,用aop实现的动态切换,支持事务,不会使aop动态切换失效。注意:此代码不涉及分布式事务,如果需要分布式事务 需要采取其他方案。
基于注解的Spring多数据源配置和使用 前一段时间研究了一下spring多数据源的配置和使用,为了后期从多个数据源拉取数据定时进行数据分析和报表统计做准备。由于之前做过的项目都是单数据源的,没有遇到这种场景,...
首先,这个方案完全是在spring的框架下解决的,数据源依然配置在spring的配置文件中,sessionFactory依然去配置它的dataSource属性,它甚至都不知道dataSource的改变。 其次,实现简单,易于维护。这个方案虽然我说...
可操作多个数据源,在多个数据源之间切换。
在查阅大量多数据源配置资料和文章并结合工作实践的基础上开发了一个简单实用的spring boot动态多数据源demo,该demo主要功能如下: 自定义多数据源类MultiplyDataSource(继承HikariDataSource),通过多线程类...
主要实现了整合spring过程中,实现了多个数据源之间的动态切换,同样适用于数据库的读写分离模式,
项目中我们经常会遇到多数据源的问题,尤其是数据同步或定时任务等项目更是如此。多数据源让人最头痛的,不是配置多个数据源,而是如何能灵活动态的切换数据源。 spring多数据源 动态 创建 切换使用
1.配置数据源,2.动态数据源切换,3.注册动态数据源,4.动态数据源注解切点,5.通过切点切换数据源,6.在service层通过注解切换不同数据源,7.启动项目
Spring Boot整合Mybatis使用druid实现多数据源自动切换
spring-boot2.0多数据源 下载直接可以使用。支持扩展多个数据库。动态切换数据库
自定义注解,结合spring-boot-aop,整合druid与mybaits-plus,实现多个数据源在项目中的自动切换。
在数据源切换的场景中,我们通常将数据源信息存储在 `ThreadLocal` 中,然后在数据访问层(如 DAO)中通过 `ThreadLocal` 来获取当前线程的数据源信息,从而动态地切换数据源。 `AbstractRoutingDataSource` 是 ...
项目背景: ... 一个副数据源,数据库名称每天都在变,比如今天1号,是db_01; 明天2号,是db_02。 4.不重启项目切换数据源。 5.项目介绍: https://blog.csdn.net/qq_38105536/article/details/122296977
SpringMVC+Mybatis(多数据源)+Mongo(多数据源),框架适合同时访问多种DB,且支持每种DB配置多个数据源。正如我代码中的demo,配置了两个mysql数据源+2个mongo数据源,可以在service实现中随意访问。除此之外还通过...