springboot 配置多数据源

原文地址:点击打开链接

此文采用spring boot官方文档中推荐的方法是用的多数据源,但非mybatis官网推荐的使用配置的 mybatis-spring-boot-starter 的方法


1.首先在创建应用对象时引入autoConfig

  1. @ComponentScan  
  2. @EnableAutoConfiguration  
  3. public class Application extends SpringBootServletInitializer {  
  4.   
  5.     public static void main(String[] args) {  
  6.         SpringApplication app = new SpringApplication(Application.class);  
  7.         app.run(args);  
  8.         //SpringApplication.run(Application.class, args);  
  9.     }  
  10.       
  11.     @Override  
  12.     protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {  
  13.         return application.sources(Application.class);  
  14.     }  
  15. }  

2.其次配置文件

  1. ######primary#############  
  2. datasource.primary.url=jdbc:sqlserver://xx.xx.xx.xx:1433;DatabaseName=PlayNowLog  
  3. datasource.primary.username=sa  
  4. datasource.primary.password=xxxxxx  
  5. datasource.primary.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver  
  6.   
  7.   
  8. ######secondary#############  
  9. datasource.secondary.url=jdbc:sqlserver://xx.xx.xx.xx:1433;DatabaseName=PlayNow_New  
  10. datasource.secondary.username=sa  
  11. datasource.secondary.password=xxxxxx  
  12. datasource.secondary.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver  

3.再其次是数据源的创建

  1. @Configuration  
  2. public class GlobalDataConfiguration {  
  3.     @Bean(name="primaryDataSource")  
  4.     @Primary  
  5.     @ConfigurationProperties(prefix="datasource.primary")  
  6.     public DataSource primaryDataSource() {  
  7.         System.out.println("-------------------- primaryDataSource init ---------------------");  
  8.         return DataSourceBuilder.create().build();  
  9.     }  
  10.       
  11.     @Bean(name="secondaryDataSource")  
  12.     @ConfigurationProperties(prefix="datasource.secondary")  
  13.     public DataSource secondaryDataSource() {  
  14.         System.out.println("-------------------- secondaryDataSource init ---------------------");  
  15.         return DataSourceBuilder.create().build();  
  16.     }  
  17. }  


4.Dao层使用数据源

  1. @Component  
  2. public class UserDaoImpl<T extends com.sonychina.backend.entity.statistic.SysUser> extends MyBatisBaseDao<SysUser> implements UserDao {  
  3.       
  4.     @Autowired  
  5.     public UserDaoImpl(@Qualifier("secondaryDataSource") DataSource dataSource) {  
  6.         super(dataSource);  
  7.     }  
  8. }  


 

import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSession;

import com.sonychina.backend.global.Constants;
import com.sonychina.backend.utility.GenericsUtils;
import com.sonychina.backend.utility.MapResultHandler;
import com.sonychina.backend.utility.MyBatisUtil;
import com.sonychina.backend.utility.PageView;

public class MyBatisBaseDao<T>{
    private Class<T> type;
    private SqlSession session;
    
    @SuppressWarnings("unchecked")
	public MyBatisBaseDao(DataSource dataSource){
		type = (Class<T>) GenericsUtils.getActualReflectArgumentClass(this.getClass());
		System.out.println("------------- BaseMybatisDao initialize--------------------------");
		System.out.println("------------- T:" + type.toString());
		try {
			MyBatisUtil myBatisUtil = MyBatisUtil.getInstance(dataSource);
			session = myBatisUtil.getSession();
		} catch (Exception e) {
			e.printStackTrace();
		}
    }
    
    
    private String getMethodPath(String methodType){
        return getMethodPath(methodType, "");
    }
    
    private String getMethodPath(String methodType, String methodSuffix){
        return Constants.MYBATIS_MAPPER_PRIX + methodType + type.getSimpleName() + methodSuffix;
    }
    
    public void save(T obj) {
        session.insert(getMethodPath("save"), obj);
    }

    public void delete(T obj) {
        session.delete(getMethodPath("delete"), obj);
    }

    public void update(T obj) {
        session.update(getMethodPath("update"), obj);
        //HashMap<String,Object> map = null;
    }

    public T get(Integer id) {
        return session.selectOne(getMethodPath("get"),id);
    }
    
    public List<T> getList(T entity){
    	return session.selectList(getMethodPath("get", "List"), entity);
    }
    
    public List<T> getListByAnyObject(Object entity){
    	return session.selectList(getMethodPath("get", "List"), entity);
    }
    
    /**
     * 
     * @param entity
     * @param selectId:mapper。xml文件中<select>标签ID
     * @return
     */
    public List<T> getList(T entity, String selectId){
    	return session.selectList(selectId, entity);
    }
    
    public List<T> getListByAnyObject(Object entity, String selectId){
    	return session.selectList(selectId, entity);
    }
    
    public List<Map<String, Object>> getMapList(Map<String, Object> map){
    	MapResultHandler mh = new MapResultHandler();
    	session.select(getMethodPath("get", "MapList"), map, mh);
    	return mh.getMappedResults();
    }
    
    /**
     * 
     * @param map
     * @param selectId:mapper。xml文件中<select>标签ID
     * @return List<Map<String, Object>>
     */
    public List<Map<String, Object>> getMapList(Map<String, Object> map, String selectId){
    	MapResultHandler mh = new MapResultHandler();
    	session.select(selectId, map, mh);
    	return mh.getMappedResults();
    }
    
    public List<Map<String, Object>> getMapList(T entity){
    	MapResultHandler mh = new MapResultHandler();
    	session.select(getMethodPath("get", "MapList"), entity, mh);
    	return mh.getMappedResults();
    }

    public List<Map<String, Object>> getMapList(T entity,String queryName){
    	MapResultHandler mh = new MapResultHandler();
    	session.select(queryName, entity, mh);
    	return mh.getMappedResults();
    }

    public Long getCount(Map<String, Object> pm){
    	MapResultHandler mh = new MapResultHandler();
    	session.select(getMethodPath("get", "Count"),pm, mh);
    	return mh.getCount();
    }
    
    /**
     * 
     * @param pm
     * @param selectId:mapper。xml文件中<select>标签ID
     * @return Long
     */
    public Long getCount(Map<String,Object> pm, String selectId){
    	MapResultHandler mh = new MapResultHandler();
    	session.select(selectId,pm, mh);
    	return mh.getCount();
    }
    
    /**
     * map 中必须包含 key:currentPageNum 且其值不能为空, 页面显示的记录数不是10必须包含key:pageShowCnt
     * 且其值不能为空
     * @param map
     * @return PageView
     */
    public PageView getPageList(Map<String, Object> map){
    	
    	if(map == null || map.get("currentPageNum") == null){
    		return null;
    	} else{
    		PageView page = null;
    		Integer pageNum = Integer.valueOf(map.get("currentPageNum").toString());
    		if(map.get("pageShowCnt") == null){
    			page = new PageView(pageNum);
    		} else {
    			Integer showCnt = Integer.valueOf(map.get("pageShowCnt").toString());
    			page = new PageView(pageNum, showCnt);
    		}
    		map.put("start", page.getStart());
    		map.put("end", page.getCurrentMaxCnt());
    		//System.out.println("-----------start:" + map.get("start"));
    		//System.out.println("-----------start:" + map.get("maxCnt"));
    		MapResultHandler mh = new MapResultHandler();
    		page.setTotalRecord(this.getCount(map));
        	session.select(getMethodPath("get", "MapPageList"), map, mh);
        	page.setResultList(mh.getMappedResults());
        	
        	return page;
    	}
    }
    
    /**
     * map 中必须包含 key:currentPageNum 且其值不能为空, 页面显示的记录数不是10必须包含key:pageShowCnt
     * 且其值不能为空
     * @param map
     * @param selectConutId, mapper.xml文件中<select>标签Id, 查询总记录数的sql语句
     * @param selectPageListId, mapper.xml文件中<select>标签Id,查询分页后数据列表的sql语句
     * @return
     */
    public PageView getPageList(Map<String, Object> map, String selectConutId, String selectPageListId){
    	
    	if(map == null || map.get("currentPageNum") == null){
    		return null;
    	} else{
    		PageView page = null;
    		Integer pageNum = Integer.valueOf(map.get("currentPageNum").toString());
    		if(map.get("pageShowCnt") == null){
    			page = new PageView(pageNum);
    		} else {
    			Integer showCnt = Integer.valueOf(map.get("pageShowCnt").toString());
    			page = new PageView(pageNum, showCnt);
    		}
    		map.put("start", page.getStart());
    		map.put("end", page.getCurrentMaxCnt());
    		//System.out.println("-----------start:" + map.get("start"));
    		//System.out.println("-----------start:" + map.get("maxCnt"));
    		MapResultHandler mh = new MapResultHandler();
    		page.setTotalRecord(this.getCount(map, selectConutId));
        	session.select(selectPageListId, map, mh);
        	page.setResultList(mh.getMappedResults());
        	
        	return page;
    	}
    }
    
    /**
     * map 中必须包含 key:currentPageNum 且其值不能为空, 页面显示的记录数不是10必须包含key:pageShowCnt
     * 且其值不能为空
     * @param map
     * @param selectConutId, mapper.xml文件中<select>标签Id, 查询总记录数的sql语句
     * @param selectPageListId, mapper.xml文件中<select>标签Id,查询分页后数据列表的sql语句
     * @return
     */
    public PageView getEntityPageList(Map<String, Object> map, String selectConutId, String selectPageListId){
    	
    	if(map == null || map.get("currentPageNum") == null){
    		return null;
    	} else{
    		PageView page = null;
    		Integer pageNum = Integer.valueOf(map.get("currentPageNum").toString());
    		if(map.get("pageShowCnt") == null){
    			page = new PageView(pageNum);
    		} else {
    			Integer showCnt = Integer.valueOf(map.get("pageShowCnt").toString());
    			page = new PageView(pageNum, showCnt);
    		}
    		map.put("start", page.getStart());
    		map.put("end", page.getCurrentMaxCnt());
    		//System.out.println("-----------start:" + map.get("start"));
    		//System.out.println("-----------start:" + map.get("maxCnt"));
    		page.setTotalRecord(this.getCount(map, selectConutId));
        	page.setResultList(session.selectList(selectPageListId, map));
        	
        	return page;
    	}
    }
    
    /**
     * map 中必须包含 key:currentPageNum 且其值不能为空, 页面显示的记录数不是10必须包含key:pageShowCnt
     * 且其值不能为空
     * @param map
     * @return PageView
     */
    public PageView getEntityPageList(Map<String, Object> map){
    	
    	if(map == null || map.get("currentPageNum") == null){
    		return null;
    	} else{
    		PageView page = null;
    		Integer pageNum = Integer.valueOf(map.get("currentPageNum").toString());
    		if(map.get("pageShowCnt") == null){
    			page = new PageView(pageNum);
    		} else {
    			Integer showCnt = Integer.valueOf(map.get("pageShowCnt").toString());
    			page = new PageView(pageNum, showCnt);
    		}
    		map.put("start", page.getStart());
    		map.put("end", page.getCurrentMaxCnt());
    		//System.out.println("-----------start:" + map.get("start"));
    		//System.out.println("-----------start:" + map.get("maxCnt"));
    		page.setTotalRecord(this.getCount(map));
        	page.setResultList(session.selectList(getMethodPath("get", "PageList"), map));
        	
        	return page;
    	}
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值