多数据源配置

        在做项目的过程中, 需要对接一家医院的数据, 院方直接把数据库扔给我们了, 看了一下, 是mysql, 有3个库, 在询问后得知, 因为医院的数据量较大, 每年都会新建一个库, 但是表结构是一样的, 我们的需求是要取出每年的员工查体信息.

        在这么一个需求背景下, 查找资料后决定新搭建一个中间项目, 用于获取数据以webService方式传递给主项目.

        1> 配置数据源:

        
	
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	
        
		
			
				
				
				
				
			
		
		
		
	

        2> db.properties

#mysql_1数据源
url_xxx2015:jdbc:mysql://11.11.11.111:3306/xxx2015?useUnicode=true&characterEncoding=UTF8
username_xxx2015:xxxx
password_xxx2015:xxxx
driverClassName_xxx2015:com.mysql.jdbc.Driver
#mysql_2数据源
url_xxx2016:jdbc:mysql://11.11.11.111:3306/xxx2016?useUnicode=true&characterEncoding=UTF8
username_xxx2016:xxxx
password_xxx2016:xxxx
driverClassName_xxx2016:com.mysql.jdbc.Driver

        3> service

@Service
@WebService
public class FWHospitalServiceImpl implements FWHospitalService {
	@Autowired
	DaoSupport dao;
	/**
	 * 根据用户工号查询体检信息
	 * 创建人: mxs
	 * 创建时间: 2017年12月15日
	 */
	@SuppressWarnings("unchecked")
	@Override
	public byte[] listVoByUserId(String userId,String dataSource) throws Exception {
		
		DynamicDataSourceHolder.setDataSource(dataSource); // 动态设置数据源
		System.out.println(DynamicDataSourceHolder.getDataSource());
		List list = (List) dao.findForList("FWHospitalMapper.listVoByUserId", userId);// 查询数据库返回信息


		// 序列化结果集后再传输, 可以大幅度提高webservice传输效率, 调用者需要反序列化
		byte[] bytes = null;      
        	ByteArrayOutputStream bos = new ByteArrayOutputStream();      
        	try {        
         		ObjectOutputStream oos = new ObjectOutputStream(bos);         
            		oos.writeObject(list);        
            		oos.flush();         
            		bytes = bos.toByteArray ();      
            		oos.close();         
            		bos.close();        
        	} catch (IOException ex) {        
            		ex.printStackTrace();   
        	}      
		DynamicDataSourceHolder.clearDataSource(); // 清空绑定的数据源
        	return bytes;
	}
}


你可能感兴趣的:(多数据源,java后端)