`

利用AbstractRoutingDataSource实现动态数据源切换(Spring+Ibatis)

 
阅读更多

Spring+Ibatis 与 Spring+Hibernate的区别在于Ibatis和Hibernate的配置不同,下面来看下Ibatis的配置

 

<jee:jndi-lookup id="ds0" jndi-name="jdbc/ds0"/>
	<jee:jndi-lookup id="ds1" jndi-name="jdbc/ds1"/>
	<jee:jndi-lookup id="ds2" jndi-name="jdbc/ds2"/>
	<bean id="dataSource" class="com.xxx.xxx.util.DynamicDataSource"> 
		<property name="targetDataSources"> 
			<map key-type="java.lang.String"> 
				<entry key="1" value-ref="ds1"/> 
				<entry key="2" value-ref="ds2"/> 
			</map> 
		</property> 
		<property name="defaultTargetDataSource" ref="ds0"/> 
	</bean> 
	<!-- SqlMap setup for iBATIS Database Layer --> 
	<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> 
		<property name="dataSource" ref="dataSource"/> 
		<property name="configLocation" value="classpath:com/xxx/xxx/dao/sqlmap/sql-map-config.xml"/>
	</bean> 
 

sql-map-config.xml 如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" 
   	"http://www.ibatis.com/dtd/sql-map-config-2.dtd">  
   	<sqlMapConfig>      
   		<sqlMap resource="com/xxx/xxx/dao/sqlmap/Object.xml"/>  
   	</sqlMapConfig> 
 

核心是DynamicDataSource 与 上下文DynamicDataSourceHolder为一线程安全的ThreadLocal,都和上一篇文章的中对应的类相同。

 

 

 

分享到:
评论
3 楼 youjianbo_han_87 2014-05-03  
597272095 写道
弱弱的问一下 如果连接了多个库,是不是都交给spring来管理 如果一个数据库使用完了,会马上关闭连接吗,会有多数据库会话同时连着的状态吗?会不会有性能问题?

这个和spring没关系了,你配置了连接池,就是池化的访问数据库,和配置动态数据源之前是一样的。
2 楼 youjianbo_han_87 2014-05-03  
动态切换了数据源后,service里面跨多库操作,算分布式事务吧,没法正常回滚吧,得配置分布式事务
1 楼 597272095 2014-04-22  
弱弱的问一下 如果连接了多个库,是不是都交给spring来管理 如果一个数据库使用完了,会马上关闭连接吗,会有多数据库会话同时连着的状态吗?会不会有性能问题?

相关推荐

    maven搭建SpringMVC+spring+ibatis

    在Spring中,可以通过DataSourceRouter或AbstractRoutingDataSource实现动态数据源切换。这些组件可以根据预定义的规则(如事务上下文、请求参数等)选择不同的数据源,提高了系统的灵活性和可扩展性。 在压缩包的...

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

    使用Spring的`AbstractRoutingDataSource`,我们可以实现数据源的动态选择。这个抽象类会根据当前的业务上下文(例如,通过`ThreadLocal`变量)决定使用哪个数据源。这样,我们可以在运行时根据业务需求灵活地切换...

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

    在这个项目中,我们利用自定义的Aop注解来实现数据源的动态切换。自定义注解可以附加在方法上,当该方法被调用时,AOP会捕获这个调用并执行相应的逻辑,即切换到指定的数据源。 具体实现步骤如下: 1. 定义数据源...

    springboot+mybatis+mysql+AbstractRoutingDataSource实现多数据源切换(一写多读数据源)

    springboot+mybatis+mysql+AbstractRoutingDataSource实现多数据源切换(一写多读数据源)项目中包含完整的demo案例配备文档说明,亲测可用;实现简单,代码思路清晰.

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

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

    SpringBoot+Atomikos+动态多数据源+事务+2种切换数据源的方式

    本主题将深入探讨如何利用SpringBoot结合Atomikos实现动态多数据源以及事务管理,并介绍两种切换数据源的方法。 首先,SpringBoot简化了传统Spring应用的初始化过程,它通过自动配置和starter包让开发者快速搭建...

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

    以下是如何使用`AbstractRoutingDataSource` 来实现数据源切换的步骤: 1. **创建自定义数据源路由类**: 首先,你需要创建一个类继承自`AbstractRoutingDataSource`,并覆盖`determineCurrentLookupKey()` 方法。...

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

    我们需要创建一个自定义的DataSource,继承自`AbstractRoutingDataSource`,并在`determineCurrentLookupKey`方法中实现数据源的选择逻辑。 ```java public class DynamicDataSource extends ...

    使用springboot + JPA / MyBatis 实现多数据源动态切换

    本教程将详细讲解如何使用Spring Boot结合JPA或MyBatis框架实现多数据源的动态切换。 **一、Spring Boot与JPA** 1. **Spring Boot简介**:Spring Boot是Spring Framework的一个模块,旨在简化Spring应用的初始搭建...

    Spring+SpringMVC+Mybatis动态链接多数据源

    在多数据源场景下,Mybatis可以通过SqlSessionFactoryBuilder创建多个SqlSessionFactory实例,每个实例对应一个数据源,从而实现数据源的隔离。 实现多数据源通常有以下步骤: 1. **配置数据源**:首先,你需要...

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

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

    动态数据源实现spring

    在Spring框架中,动态数据源实现是一个重要的特性,它允许应用程序根据特定的条件或用户需求在运行时切换数据源。这种灵活性对于多租户系统、数据隔离或者在不同环境(如开发、测试、生产)之间切换数据库配置尤其...

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

    综上所述,这个项目利用了Mybatis、Spring、SpringMVC和Quartz的强大功能,构建了一个能够灵活切换数据源并实现跨数据库同步的系统。通过合理的配置和调度,可以有效地处理复杂的分布式数据库环境中的数据一致性问题...

    Spring+Struts+ibatis下配置数据读写分离及事务(一)

    总之,Spring+Struts+iBATIS的组合可以构建出高效、灵活的企业级应用。通过对事务管理和数据读写分离的合理配置,我们可以优化系统的性能和可靠性。同时,这三个框架的融合使用,使得代码结构清晰,降低了模块间的...

    spring+hibernate和spring+myBatis实现连接多个数据库,同时操作的项目

    Spring的AbstractRoutingDataSource类可以用来实现动态数据源切换,它可以根据一定的规则(如事务上下文、请求参数等)选择使用哪个数据源。 Hibernate,是一个对象关系映射(ORM)框架,它允许开发者用面向对象的...

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

    2. **动态切换数据源**:在Spring框架中,我们可以利用AOP(面向切面编程)和ThreadLocal来实现数据源的动态切换。创建一个自定义的数据源切换注解,比如`@SwitchDataSource`,并在需要切换数据源的方法上使用。通过...

    SpringBoot+Atomikos分布式事务及多数据源动态切换,两种demo

    1. 使用AbstractRoutingDataSource:这是一种基于数据源路由的实现,通过动态设置当前线程绑定的数据源,从而达到切换数据源的效果。需要自定义一个DataSource类,覆写determineCurrentLookupKey方法,根据业务逻辑...

    cobar+spring+oracle数据源切换

    本文将详细介绍如何利用Cobar、Spring和Oracle来实现数据源的无缝切换。 Cobar,全称是Cluster-based Bar,是一个开源的中间件,主要用于提供数据库的读写分离和负载均衡。它作为一个数据库代理,可以将用户的SQL...

    使用注解配置实现Spring动态数据源切换

    使用注解配置实现Spring动态数据源切换,实现原理 1、自定义动态数据源类DynamicDataSource: 实现spring类AbstractRoutingDataSource的方法determineCurrentLookupKey 2、自定义Spring AOP类DataSourceAspect 3、...

    真正意义的spring动态切换数据源源码

    同时,也可以查看`DataSourceTransactionManager`类,理解它是如何与`AbstractRoutingDataSource`协同工作,以在事务管理中实现数据源的切换。 8. **最佳实践**:在实际项目中,确保正确处理数据源切换的异常,避免...

Global site tag (gtag.js) - Google Analytics