知识大全 使用Spring解决ibatis多数据源的苦恼
Posted 知
篇首语:敢说敢作敢为, 无怨无恨无悔。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用Spring解决ibatis多数据源的苦恼相关的知识,希望对你有一定的参考价值。
使用Spring解决ibatis多数据源的苦恼 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
iBatis多数据源的苦恼
在仅使用ibatis时 多数据源简直就是梦魇 每多一个数据源就需要多一份sql map config配置文件
采用spring的AbstractRoutingDataSource就可以简单的解决这个问题
AbstractRoutingDataSource实现了javax sql DataSource接口 因此可以理解为一个虚拟的动态DataSource 在需要的时候根据上下文Context动态决定使用哪个数据源
Spring+iBatis多数据源的配置
下面是一个完整的配置
< beans xmlns= xmlns:xsi= instance xmlns:aop= xmlns:tx= xmlns:jee= xsi:schemaLocation= beans xsd aop xsd tx xsd jee xsd >
< ! ========================= GENERAL DEFINITIONS ========================= > < jee:jndi lookup id= ds jndi name= jdbc/ds /> < jee:jndi lookup id= ds jndi name= jdbc/ds /> < jee:jndi lookup id= ds jndi name= jdbc/ds />
< bean id= dataSource class= xxx xxx util DynamicDataSource > < property name= targetDataSources > < map key type= java lang String > < entry key= value ref= ds /> < entry key= value ref= ds /> < entry key= value ref= ds /> < /map> < /property> < property name= defaultTargetDataSource ref= /> < /bean> < ! SqlMap setup for iBATIS Database Layer > < bean id= sqlMapClient class= springframework orm ibatis SqlMapClientFactoryBean > < property name= dataSource ref= dataSource /> < property name= configLocation value= classpath:/xxx/xxx/dao/sqlmap/sql map config xml /> < /bean> < bean id= testDAO class= xxx xxx dao impl TestDAO > < property name= sqlMapClient ref= sqlMapClient /> < /bean> < bean id= testService class= xxx xxx service impl TestService > < property name= testDAO ref= testDAO /> < /bean>< /beans>
其核心是DynamicDataSource 代码如下
package xxx xxx util;
import apache log j Logger;import springframework jdbc datasource lookup AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource
static Logger log = Logger getLogger( DynamicDataSource ); @Override protected Object determineCurrentLookupKey() // TODO Auto generated method stub return DbContextHolder getDbType();
上下文DbContextHolder为一线程安全的ThreadLocal 如下
package xxx xxx util;
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();
sql map config xml如下
< ?xml version= encoding= UTF standalone= no ?>< !DOCTYPE sqlMapConfig PUBLIC ////DTD SQL Map Config //EN map config dtd >
< sqlMapConfig>
< sqlMap resource= /xxx/xxx/dao/sqlmap/Object xml />
< /sqlMapConfig>
这样在调用service之前只需要设置一下上下文即可调用相应的数据源 如下
DbContextHolder setDbType( );//execute services//
dao如下
package xxx xxx dao impl;
import java util HashMap;import java util List;import java util Map;
import apache log j Logger;import springframework orm ibatis support SqlMapClientDaoSupport;
import xxx xxx vo TestObj;
public class TestDAO extends SqlMapClientDaoSupport implements ITestDAO
static Logger log = Logger getLogger(TestDAO class);
public TestObj getTestObj(String objID) throws Exception return (TestObj) getSqlMapClientTemplate() queryForObject( getTestObj objID);
cha138/Article/program/Java/ky/201311/28536相关参考
作为开源的Orm对象映射框架ibatis是一个线程安全学习容易但是开发相对于hibernate来说的话就要繁锁些没有很好的工具支持ibatis所有的配置几乎是通过手写这样增加了开发者的难度好啦言归
Spring+Ibatis+事务处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! applic
基于Spring+Ibatis的安全线程实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 过去
这几天在学习使用IBATIS突然要使用模糊查询以及动态多个条件查询按照自己的想法试了很久都没解决这个问题 首先是模糊查询的问题开始时我使用如下条件:select*fromuserwherenam
用spring来管理项目的数据库部分往往比自己去写连接要容易管理的多步骤也比较简单 项目根目录下建立conflib目录将spring相关包coop到lib中并导入建立个文件jdbcpropert
数据库连接池概述 数据库连接是一种关键的有限的昂贵的资源这一点在多用户的网页应用程序中体现得尤为突出对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性影响到程序的性能指标数据库连接池正是
Spring数据源配置与应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Spring数据源配
Spring配置数据源四种方式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 使用spring框
Spring配置DHCP数据源 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! <beani
配置Spring的Proxool数据源 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Proxo