zoukankan      html  css  js  c++  java
  • 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<String> dataSourceKey = new InheritableThreadLocal<String>();
    
        public static void setDataSourceKey(String dataSource) {
            dataSourceKey.set(dataSource);
        }
    	@Override
    	protected Object determineCurrentLookupKey() {
    		// TODO Auto-generated method stub
    		return dataSourceKey.get();
    	}
    
    }
    

    spring配置文件例如以下:

    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xmlns:mvc="http://www.springframework.org/schema/mvc"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans 
    		http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    		http://www.springframework.org/schema/context
    		http://www.springframework.org/schema/context/spring-context-3.2.xsd
    		http://www.springframework.org/schema/mvc
    		http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
    
    	<context:component-scan base-package="com"/>
    	
    	<mvc:annotation-driven/>
    	
    
    	<context:property-placeholder location="classpath:db.properties"/>
    	<bean id="ds1" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    		p:driverClassName="${mysql.driver}"
    		p:url="${mysql.url}"
    		p:username="${mysql.username}"
    		p:password="${mysql.password}"/>
    	<bean id="ds2" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    		p:driverClassName="${mysql2.driver}"
    		p:url="${mysql2.url}"
    		p:username="${mysql2.username}"
    		p:password="${mysql2.password}"/>
    	
    	
    	<bean id="multipleDataSource" class="com.etoak.util.MultipleDataSource">
            <property name="defaultTargetDataSource" ref="ds1"/>
            <property name="targetDataSources">
                <map>
                    <entry key="ds1" value-ref="ds1"/>
                    <entry key="ds2" value-ref="ds2"/>
                </map>
            </property>
        </bean>
    	
    	<bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean"
    		p:dataSource-ref="multipleDataSource"
    		p:mapperLocations="classpath:com/etoak/dao/*-mapper.xml"/>
    	
    	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    		<property name="basePackage" value="com.etoak.dao"/>
                    <property name="markerInterface" value="com.etoak.dao.BaseDao" />
    	</bean>
    	
    	
    	
    </beans>
    
    
    
    
    
    
    
    
    
    
    
    測试类例如以下:

    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);
    	}
    
    }
    



  • 相关阅读:
    Kibana安装
    25.Spring Cloud Sleuth与ELK
    Spring Cloud Sleuth综合整理
    26.Spring Cloud Sleuth与Zipkin
    算法与数据结构实验题 1.3 寻找幸运值
    算法与数据结构实验题 1.1 互质序列
    课程作业八
    课程作业七
    课程作业六
    课程作业五
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7112475.html
Copyright © 2011-2022 走看看