`

Spring的AbstractRoutingDataSource解决多数据源切换

阅读更多
01:在project中配置多个数据源
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
	    <property name="driverClassName"         value="net.sourceforge.jtds.jdbc.Driver">
		</property>
		<property name="url" value="jdbc:jtds:sqlserver://10.82.81.51:1433;databaseName=standards">
		</property>
		<property name="username" value="youguess"></property>
		<property name="password" value="youguess"></property>
	</bean>
<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource">
	    <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver">
		</property>
		<property name="url" value="jdbc:jtds:sqlserver://10.82.81.52:1433;databaseName=standards">
		</property>
		<property name="username" value="youguess"></property>
		<property name="password" value="youguess"></property>
</bean>


02写一个DynamicDataSource类继承AbstractRoutingDataSource,并实现determineCurrentLookupKey方法
package com.qingce.appweb.java.control.datasource;

import java.sql.SQLFeatureNotSupportedException;
import java.util.logging.Logger;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;


public class DynamicDataSource extends AbstractRoutingDataSource {

	protected Object determineCurrentLookupKey() {

		return CustomerContextHolder.getCustomerType();
	}

	public Logger getParentLogger() throws SQLFeatureNotSupportedException {
		// TODO Auto-generated method stub
		return null;
	}

}

03:利用ThreadLocal解决线程安全问题
package com.zbb.core.util;
public class CustomerContextHolder {
	public static final String DATA_SOURCE_A = "dataSource";
	public static final String DATA_SOURCE_B = "dataSource2";
	private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
	public static void setCustomerType(String customerType) {
		contextHolder.set(customerType);
	}
	public static String getCustomerType() {
		return contextHolder.get();
	}
	public static void clearCustomerType() {
		contextHolder.remove();
	}
}

04:再次配置数据源
<bean id="dynamicDataSource" class="com.zbb.core.util.DynamicDataSource" >
		<property name="targetDataSources">
			<map key-type="java.lang.String">
				<entry value-ref="dataSource" key="dataSource"></entry>
				<entry value-ref="dataSource2" key="dataSource2"></entry>
			</map>
		</property>
		<property name="defaultTargetDataSource" ref="dataSource" >
		</property>
	</bean> 


05:daoImpl中调用
CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B);

CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_A);




参考学习http://www.cnblogs.com/davidwang456/p/4318303.html
分享到:
评论

相关推荐

    使用Spring的AbstractRoutingDataSource实现多数据源切换示例

    在Spring框架中,多数据源切换是一个常见的需求,特别是在大型分布式系统中,可能需要根据不同的业务逻辑或条件访问不同的数据库。`AbstractRoutingDataSource` 是Spring提供的一种动态数据源解决方案,它允许我们在...

    spring+druid+AtomikosDataSource实现多数据源切换及分布式事务控制

    综上所述,"spring+druid+AtomikosDataSource"的组合为开发者提供了一套强大的工具,用于实现多数据源切换和分布式事务控制。在实际项目中,通过合理的配置和编码,可以构建出高效、健壮的分布式系统。在`mult-table...

    Spring(AbstractRoutingDataSource)实现动态数据源切换示例

    【Spring 动态数据源切换】使用 `AbstractRoutingDataSource` 的详细实现在处理多数据库环境时,Spring 提供了一个强大的工具 `AbstractRoutingDataSource`,它允许我们根据特定条件动态地切换数据源。本文将深入...

    Springcloud 多数库 多数据源整合,查询动态切换数据库

    创建一个自定义的数据源切换注解,比如`@SwitchDataSource`,并在需要切换数据源的方法上使用。通过AspectJ的切面处理,我们可以在方法执行前后动态改变ThreadLocal中的数据源引用。 3. **Spring Cloud Config ...

    Spring动态切换多数据源Demo

    "Spring动态切换多数据源Demo"是一个示例项目,它展示了如何在Spring中实现灵活的数据源切换。 首先,我们需要了解Spring中的数据源。在Spring中,数据源(DataSource)是Java中定义的javax.sql.DataSource接口的...

    详解利用Spring的AbstractRoutingDataSource解决多数据源的问题

    Spring框架提供了多种方式来处理多数据源问题,其中`AbstractRoutingDataSource`是一个非常实用的解决方案。本文将详细解析如何利用`AbstractRoutingDataSource`来解决多数据源的问题。 `AbstractRoutingDataSource...

    Spring+SpringMvc+MybatisPlus+Aop(自定义注解)动态切换数据源

    - AOP切面的Java类,实现了方法执行前后的拦截和数据源切换。 - 数据源相关的Java配置类,用于配置Spring的DataSource和MybatisPlus。 - Mapper接口和对应的XML文件,定义数据库操作。 - 业务逻辑层的Java类,其中的...

    mybatis+spring实现动态切换数据源

    通过以上步骤,我们就实现了MyBatis与Spring配合下的动态数据源切换。这种机制有助于在多租户系统、读写分离或者高可用架构中灵活地管理数据库访问,提高了系统的可扩展性和灵活性。在实际应用中,还需要考虑数据源...

    spring整合mybatis多数据源

    总的来说,Spring整合MyBatis的多数据源切换是解决复杂数据库应用场景的有效手段。通过灵活的数据源路由,我们可以轻松地实现读写分离、数据库分片等高级架构,提升系统的可扩展性和性能。理解并掌握这一技术对于...

    Mybatis+Spring+SpringMVC+quartz多数据源切换

    "Mybatis+Spring+SpringMVC+quartz多数据源切换"的架构设计就是为了满足这样的场景。这个项目结合了四个关键的技术组件,它们分别是Mybatis、Spring、SpringMVC和Quartz,下面将详细介绍这些技术以及它们在多数据源...

    spring多数据源动态切换方案

    在企业级应用开发中,Spring框架的广泛使用使得...通过这种方式,我们可以灵活地处理复杂的数据源切换场景,适应不同业务的需求。在实际项目中,还需要考虑线程安全、异常处理、测试等方面的问题,确保系统稳定运行。

    浅谈利用Spring的AbstractRoutingDataSource解决多数据源的问题

    总结起来,利用Spring的`AbstractRoutingDataSource`解决多数据源问题的关键在于自定义一个继承自`AbstractRoutingDataSource`的类,实现数据源的选择逻辑,以及使用`ThreadLocal`保持线程上下文。配合AOP,可以在...

    Spring+Hibernate多数据源

    Spring提供了AbstractRoutingDataSource类,允许我们根据某种规则(如事务、请求上下文等)动态切换数据源。我们需要扩展这个类,并实现determineCurrentLookupKey方法来决定当前应该使用哪个数据源。 接着,描述中...

    spring boot多数据源配置

    2. 使用`AbstractRoutingDataSource`实现动态数据源切换 创建一个继承自`AbstractRoutingDataSource`的类,通过设置当前数据源上下文来实现数据源的切换: ```java @Component public class DynamicDataSource ...

    spring 动态切换数据源

    - 在生产环境中,需要确保数据源切换的正确性,可以使用监控工具(如Spring Actuator)跟踪数据源切换情况,同时编写单元测试和集成测试确保功能正常。 综上所述,Spring动态切换数据源是通过配置不同数据源,结合...

    spring boot数据源切换demo

    在Spring Boot应用中,数据源切换是一个常见的需求,特别是在分布式系统或者微服务架构中,可能需要连接多个数据库来实现不同的业务功能。本示例“spring boot数据源切换demo”将展示如何在Spring Boot中集成MyBatis...

    spring mybatis 多数据源动态切换

    在 `thc-datasources` 压缩包中,可能包含了更详细的配置示例、数据源切换注解的实现以及相关的辅助工具类,如 `DynamicDataSourceContextHolder`。读者可以结合这些资源,进一步理解和实践多数据源动态切换的实现。

    springboot实现多数据源而且加上事务不会使aop切换数据源失效

    本示例主要讲解如何使用Spring Boot结合MyBatis实现多数据源切换,并确保AOP事务管理仍然有效。 首先,我们需要配置多数据源。在Spring Boot中,可以使用`DataSource`接口的实现类,如`HikariCP`或`Druid`,创建两...

    Spring多数据源分布式事务管理

    在Spring中,我们可以通过DataSourceProxy和AbstractRoutingDataSource来实现多数据源的切换。DataSourceProxy是Spring的一个代理类,它可以对数据源进行包装,以便在执行SQL语句前决定使用哪个数据源。...

    SpringBoot2.x 继承 AbstractRoutingDataSource 动态数据源切换实现 JPA读写分离

    SpringBoot2.x 继承 AbstractRoutingDataSource 动态数据源切换实现 JPA读写分离。 使用MyCat代理MySQL8数据库,添加root账户(读写)和user账户(只读)模拟读写简单分离。

Global site tag (gtag.js) - Google Analytics