有时候在一个项目中会连接多个数据库,须要在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配置文件例如以下:

測试类例如以下:

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

}



相关文章:

  • 2021-11-19
  • 2021-06-17
  • 2021-11-28
  • 2022-12-23
  • 2021-05-26
猜你喜欢
  • 2021-11-08
  • 2021-11-19
  • 2021-11-19
  • 2021-11-19
  • 2022-02-08
相关资源
相似解决方案