spring mybatis配置多数据源

通过打断点,确定数据源配置成功,而且数据源的配置信息都对的上。

但是一步一步跟进的时候,当mybatis使用到SpringManagedTransaction 的getConnection()方法,尽管dataSource是另外一个数据源,但还是会创建一个默认的数据库连接。

最后只能采取暴力措施了,考虑到Spring结合mybatis主要就是指定数据源和扫描sql的xml文件,于是自己创建一个数据源,通过读取配置的sqlSession,自己创建一个新的sqlSession。

private static DataSource getDataSource(){
		if(dataSource==null){
			synchronized (SqlHelper.class) {
			    if(dataSource ==null){	
				dataSource = new PooledDataSource(driver, url, username, password);
			    }
			}
		}
		return dataSource;
	}
	
	public static SqlSession getReadOnlySqlSession(SqlSession sqlSession){
		Transaction transaction = new SpringManagedTransaction(dataSource);
		Executor executor = new SimpleExecutor(sqlSession.getConfiguration(),transaction);
		SqlSession readOnlySqlSession = new DefaultSqlSession(sqlSession.getConfiguration(), executor);
		return readOnlySqlSession;
	}

dao层的方法

	public String queryNewUsersFromSo(OperationDataQuery query) {
		return SqlHelper.getReadOnlySqlSession(this.getSqlSession()).selectOne(NAME_SPACE+".queryNewUsersFromSo", query);
	}

当然这种方法感觉处理有点麻烦,但是目前找不到合适的办法,先这样吧。后期在研究。



你可能感兴趣的:(spring mybatis配置多数据源)