知识大全 使用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

相关参考

知识大全 ibatis+spring 集成

  作为开源的Orm对象映射框架ibatis是一个线程安全学习容易但是开发相对于hibernate来说的话就要繁锁些没有很好的工具支持ibatis所有的配置几乎是通过手写这样增加了开发者的难度好啦言归

知识大全 Spring+Ibatis+事务处理

Spring+Ibatis+事务处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  applic

知识大全 基于Spring+Ibatis的安全线程实现

基于Spring+Ibatis的安全线程实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  过去

知识大全 ibatis动态多条件组合查询以及模糊查询

  这几天在学习使用IBATIS突然要使用模糊查询以及动态多个条件查询按照自己的想法试了很久都没解决这个问题  首先是模糊查询的问题开始时我使用如下条件:select*fromuserwherenam

知识大全 抽取spring数据库连接部分到项目中

  用spring来管理项目的数据库部分往往比自己去写连接要容易管理的多步骤也比较简单  项目根目录下建立conflib目录将spring相关包coop到lib中并导入建立个文件jdbcpropert

知识大全 spring连接池配置详解

  数据库连接池概述  数据库连接是一种关键的有限的昂贵的资源这一点在多用户的网页应用程序中体现得尤为突出对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性影响到程序的性能指标数据库连接池正是

知识大全 Spring 数据源配置与应用

Spring数据源配置与应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Spring数据源配

知识大全 Spring配置数据源四种方式

Spring配置数据源四种方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用spring框

知识大全 Spring配置DHCP数据源

Spring配置DHCP数据源  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  <beani

知识大全 配置Spring的Proxool数据源

配置Spring的Proxool数据源  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Proxo