1.动态数据源工具类
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; /** * 动态数据源 * @author FengMy * * @since 2012-11-13 */ public class RoutingDataSource extends AbstractRoutingDataSource { protected Object determineCurrentLookupKey() { return DataSourceHolder.getDataSource(); } }
/** * * 数据源存放类 * @author FengMy * * @since 2012-11-13 */ public class DataSourceHolder { private static final ThreadLocal<Map<String, Object>> currentDataSource = new ThreadLocal<Map<String, Object>>(); private static final String DATA_SOURCE = "DATA_SOURCE"; public static void setDataSource(String dataSource) { if(!StringUtils.isEmpty(dataSource)){ Map<String, Object> holder = currentDataSource.get(); if(holder == null) { holder = new HashMap<String, Object>(); currentDataSource.set(holder); } holder.put(DATA_SOURCE, dataSource); } } public static String getDataSource() { Map<String, Object> holder = currentDataSource.get(); if(holder == null) return null; return (String) holder.get(DATA_SOURCE); } public static void clear() { currentDataSource.remove(); } }
2.数据连接配置applicationContext.xml
<bean id="dataSource" class="com.cstp.common.database.RoutingDataSource"> <property name="targetDataSources"> <map key-type="java.lang.String"> <entry value-ref="dataSource01" key="dataSource01"></entry> <entry value-ref="dataSource02" key="dataSource02"></entry> </map> </property> <property name="defaultTargetDataSource" ref="dataSource01"/> </bean> <bean id="dataSource01" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" dependency-check="none"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://...:3306/test01?useUnicode=true&characterEncoding=UTF-8" /> <property name="user" value="root" /> <property name="password" value="cmpc" /> <property name="minPoolSize" value="1" /> <property name="maxPoolSize" value="20" /> <property name="maxIdleTime" value="25000" /> <property name="acquireIncrement" value="1" /> <property name="acquireRetryDelay" value="1000" /> <property name="acquireRetryAttempts" value="30" /> <property name="initialPoolSize" value="3" /> <property name="idleConnectionTestPeriod" value="1800" /> <property name="testConnectionOnCheckin" value="true" /> </bean> <bean id="dataSource02" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" dependency-check="none"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://.....:3306/test02?useUnicode=true&characterEncoding=UTF-8" /> <property name="user" value="root" /> <property name="password" value="cmpc" /> <property name="minPoolSize" value="1" /> <property name="maxPoolSize" value="20" /> <property name="maxIdleTime" value="25000" /> <property name="acquireIncrement" value="1" /> <property name="acquireRetryDelay" value="1000" /> <property name="acquireRetryAttempts" value="30" /> <property name="initialPoolSize" value="3" /> <property name="idleConnectionTestPeriod" value="1800" /> <property name="testConnectionOnCheckin" value="true" /> </bean> <bean id="client" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="dataSource"> <ref bean="dataSource"/> </property> <property name="configLocation"> <value>classpath:SqlMapConfig.xml</value> </property> </bean>
3.操作时,调用
DataSourceHolder.setDataSource("dataSource01");
相关推荐
在IT行业中,数据库管理是核心任务之一,而动态数据源技术则是实现多数据库灵活切换的重要手段。本项目涉及的关键技术是"Mybatis-Plus"与"动态数据源"的结合使用,以及一系列相关的配置和扩展。下面将详细阐述这些...
本示例代码将介绍如何在项目中配置和使用MyBatis-Plus实现多数据源和动态数据源切换。 首先,我们需要理解多数据源的概念。多数据源意味着系统中存在不止一个数据存储,每个数据源可能对应不同的数据库,如MySQL、...
Spring Boot配置动态数据源访问多个数据库实现代码详解 通过Spring Boot配置动态数据源访问多个数据库可以实现数据库的动态增删和数量无限的支持,下面将详细介绍该实现代码的知识点。 数据源配置管理 在Spring ...
整理的分布式事务 及动态数据源切换 基于数据库XA协议 maven 包可直接使用 maven 引入路径: <groupId>com.maple</groupId> <artifactId>DCSDataSourcesServer <version>0.0.1-SNAPSHOT 事务及数据源标签...
"spring动态数据源+mybatis分库分表"是一个针对大型数据库场景的解决方案,它利用Spring框架的动态数据源功能和MyBatis的SQL映射能力,实现数据库的透明化分片。以下是这个主题的详细知识点: 1. **Spring动态数据...
《SpringBoot 3.2.3 集成 ShardingSphere 5.4.1 及动态数据源实战解析》 在现代企业级应用开发中,数据分片和多数据源管理是提升系统性能和扩展性的关键技术。本文将详细探讨如何在SpringBoot 3.2.3环境下集成...
基于 SpringBoot 多数据源 动态数据源 主从分离 快速启动器 支持分布式事务。一个基于springboot的快速集成多数据源的启动器。支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。支持数据库...
在Spring框架中,动态数据源实现是一个重要的特性,它允许应用程序根据特定的条件或用户需求在运行时切换数据源。这种灵活性对于多租户系统、数据隔离或者在不同环境(如开发、测试、生产)之间切换数据库配置尤其...
【标题】"druid-动态数据源"是一个针对SpringBoot和Maven集成的项目,它实现了多数据源的管理,并且具有动态切换数据源的能力。这个项目特别适用于那些需要处理多个数据库系统的单体项目或微服务架构。它支持MySQL、...
项目实现了使用SpringBoot实现动态数据源,实现步骤: 1.租户通过域名访问接口,用filter获取租户独立标识,比如 zhangsan.localhost.com 、lisi.localhost.com 2.实现AbstractRoutingDataSource类来跟进当前访问的...
springboot+mybatis多数据源+动态数据源配置(连接池),mysql数据库,代码实现了简单的读写分离,但是不建议这种操作,建议使用数据库中间件进行读写分离,例如使用mycat进行读写分离主从热备,使用该代码对于多个...
读写库分离,动态数据源切换,mybitis动态数据源,SSM动态数据源,多数据源
在Spring Boot应用中,MyBatis是一个常用的持久层框架,而动态数据源则是解决多数据库环境问题的关键技术。本文将详细讲解如何在Spring Boot中结合MyBatis实现动态数据源的配置,同时涵盖MyBatis的基本使用和Email的...
MySQL.C3p0配置动态数据源是Java开发中常见的数据库连接池管理技术,它结合了MySQL数据库驱动和C3p0连接池库,为应用程序提供高效、稳定的数据库连接管理。在进行这样的配置时,需要引入特定的依赖包,确保项目的...
在Java开发中,特别是在SpringBoot框架下,动态数据源是一个重要的功能,它允许应用程序根据不同的业务需求或用户权限切换到不同的数据库。动态数据源的实现能够极大地提高系统的灵活性和可扩展性,使得一个应用可以...
在大型分布式系统中,通常需要处理多个数据库,这就涉及到了动态数据源的概念。本文将深入探讨如何在Spring Boot 1.5.9版本中结合MyBatis实现动态指定数据源,并通过自定义注解来实现这一功能。 首先,我们需要理解...
在Java和SpringMVC开发中,动态数据源是一种常见的需求,尤其在大型系统中,为了实现高可用性和负载均衡,通常会采用分库策略。"动态数据源之分库解析1(固定N数据源,切换多数据源)"这个主题正是针对这样的场景,...
动态数据源配置1
本文将深入探讨如何在Spring Boot项目中实现Atomikos分布式事务以及动态数据源切换的两种示例。 首先,我们需要理解什么是分布式事务。在分布式系统中,事务需要跨越多个独立的数据库或服务进行操作。分布式事务的...
在企业级应用开发中,动态数据源是一种常见需求,它允许程序在运行时根据不同的业务逻辑切换到不同的数据库。在本项目中,我们将探讨如何利用MyBatis与Spring框架实现动态切换数据源的功能。首先,我们需要理解...