栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring基于通用Dao的多数据源配置详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring基于通用Dao的多数据源配置详解

有时候在一个项目中会连接多个数据库,需要在spring中配置多个数据源,最近就遇到了这个问题,由于我的项目之前是基于通用Dao的,配置的时候问题不断,这种方式和资源文件冲突;扫描映射文件的话,SqlSessionFactory的bean名字必须是sqlSessionFactory 他读不到sqlSessioNFactory2或者其他名字,最终解决方法如下:

1.在项目中加入如下类MultipleDataSource.java

package com.etoak.util; 
 
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; 
 
public class MultipleDataSource extends AbstractRoutingDataSource { 
   
  private static final ThreadLocal dataSourceKey = new InheritableThreadLocal();  
  public static void setDataSourceKey(String dataSource) { 
    dataSourceKey.set(dataSource); 
  } 
  @Override 
  protected Object determineCurrentLookupKey() { 
    // TODO Auto-generated method stub 
    return dataSourceKey.get(); 
  } 
 
} 

spring配置文件如下:

 
 
   
   
   
   
 
   
   
   
   
   
   
     
     
       
  
  
       
     
   
   
   
   
   
     
  
     
   
 

测试类如下:

package com.etoak.test; 
 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.FileSystemXmlApplicationContext; 
 
import com.etoak.dao.ProductDaoIf; 
import com.etoak.util.MultipleDataSource; 
 
public class Test { 
 
  public static void main(String[] args) { 
    ApplicationContext ac = new  
      FileSystemXmlApplicationContext("WebContent/WEB-INF/etoak-servlet.xml"); 
     
    ProductDaoIf proDao = (ProductDaoIf)ac.getBean(ProductDaoIf.class); 
     
    MultipleDataSource.setDataSourceKey("ds1"); 
    int count1 = proDao.selectProductCount(); 
    MultipleDataSource.setDataSourceKey("ds2"); 
    int count2 = proDao.selectProductCount(); 
    System.out.println(count1); 
    System.out.println(count2); 
  } 
 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/141334.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号