比较常用的配置,多数据源、主从等等。

大概的逻辑是:

1、spring-mybatis.xml中配置多个数据源

2、使用Spring提供的AbstractRoutingDataSource类来根据请求路由到不同的数据源

3、ThreadLocal解决线程安全问题

详情参考:

【Java】一次SpringMVC+ Mybatis 配置多数据源经历

利用Spring的AbstractRoutingDataSource解决多数据源的问题

spring官网demo:Dynamic DataSource Routing

一直没调通,切换后仍是默认数据库!!!

=================放弃spring动态数据源,用mybatis的environments来解决=============

关于mybatis的environments,请查询官网文档:http://www.mybatis.org/mybatis-3/zh/configuration.html#environments

一、mybatis-conf.xml 配置两个数据源:<environment id="env_stg">,<environment id="env_vtp">

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC
"-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 引入配置文件 -->
<properties resource="jdbc.properties"/>
<settings>
<!-- 驼峰命名自动映射 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- bean短别名 -->
<typeAliases>
<package name="qa.vop.model" />
</typeAliases>
<!-- 多环境配置 -->
<environments default="env_stg">
<environment id="env_stg">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
<environment id="env_vtp">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url_vtp}" />
<property name="username" value="${username_vtp}" />
<property name="password" value="${password_vtp}" />
</dataSource>
</environment>
</environments>
<!-- xml映射文件 -->
<mappers>
<package name="qa.vop.dao"/>
</mappers>
</configuration>

二、写一个类,根据不同的环境来build SqlSessionFactory

public class MySQLSessionFactory {

    private SqlSessionFactory sqlSessionFactory = null;

    public SqlSessionFactory getSqlSessionFactory(String cfgFilePath,String env) {
InputStream is = null;
try {
is = Resources.getResourceAsStream("mybatis-conf.xml");
if (null == env || env.isEmpty()) {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
} else {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is,env);
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
return sqlSessionFactory;
}
}

三、controller中,根据不同环境,来切换数据源。

@Controller
public class SuperController{ private static final String MYBATIS_CFG = "mybatis-conf.xml";
private static SqlSession session = new MySQLSessionFactory().getSqlSessionFactory(MYBATIS_CFG,null).openSession(); @RequestMapping("/queryJit")
public ModelAndView getJit(ModelAndView mv){
mv.addObject("jitList", session.getMapper(JitMapper.class).selectAllJits() );
mv.setViewName("jit");
return mv;
} @RequestMapping("/queryVTP")
public ModelAndView getVTPRunResult(ModelAndView mv){
SqlSession session1 = new MySQLSessionFactory().getSqlSessionFactory(MYBATIS_CFG,"env_vtp").openSession();
mv.addObject("vtpRunResultList", session1.getMapper(VtpRunResultMapper.class).selectAllResults() );
mv.setViewName("quality-vtp");
return mv;
}
}

SpringMVC + Mybatis 多数据源配置的更多相关文章

  1. springmvc+mybatis多数据源配置,AOP注解动态切换数据源

    springmvc与springboot没多大区别,springboot一个jar包配置几乎包含了所有springmvc,也不需要繁琐的xml配置,springmvc需要配置多种jar包,需要繁琐的x ...

  2. 学习笔记_J2EE_SSM_01_spring+springMVC+Mybatis整合_XML配置示例

    spring+springMVC+Mybatis整合_XML配置示例 1.概述 spring+springMVC+Mybatis整合  XML配置方式 1.1 测试环境说明 名称 版本 备注 操作系统 ...

  3. (转)springMVC+mybatis+ehcache详细配置

    一. Mybatis+Ehcache配置 为了提高MyBatis的性能,有时候我们需要加入缓存支持,目前用的比较多的缓存莫过于ehcache缓存了,ehcache性能强大,而且位各种应用都提供了解决方 ...

  4. MyBatis多数据源配置(读写分离)

    原文:http://blog.csdn.net/isea533/article/details/46815385 MyBatis多数据源配置(读写分离) 首先说明,本文的配置使用的最直接的方式,实际用 ...

  5. Spring Boot 2.X(五):MyBatis 多数据源配置

    前言 MyBatis 多数据源配置,最近在项目建设中,需要在原有系统上扩展一个新的业务模块,特意将数据库分库,以便减少复杂度.本文直接以简单的代码示例,如何对 MyBatis 多数据源配置. 准备 创 ...

  6. 记录:springmvc + mybatis + maven 搭建配置流程

    前言:不会配置 spring mvc,不知道为什么那样配置,也不知道从何下手,那么看这里就对了. 在 IDEA 中搭建 maven + springmvc + mybatis: 一.在 IDEA 中首 ...

  7. Spring+SpringMVC+Mybatis 多数据源整合(转)

    转载自:http://blog.csdn.net/q908555281/article/details/50316137 目录(?)[-]拷贝所需jar拷贝jar文件需要的jar文件入下图所示因为我的 ...

  8. springboot mybatis 多数据源配置

    首先导入mybatis等包,这里就不多说. 下面是配置多数据源和mybatis,每个数据源对应一套mybatis模板 数据源1: package com.aaaaaaa.config.datasour ...

  9. Spring MVC+Mybatis 多数据源配置及发现的几个问题

    1.CustomerContextHolder 数据源管理类,负责管理当前的多个数据源,基于ThreadLocal实现,对每个线程设置不同的目标数据源 public class CustomerCon ...

随机推荐

  1. Array.prototype.slice.call(arguments)探究

    Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组 首先,slice有两个用法,一个是String.slice,一个是Array.slic ...

  2. yugabyte 集成JanusGraph测试

    yugabyte 集成图数据库JanusGraph,原理比较简单就是yugabyte 内置Cassandra,配置好JanusGraph 的访问就可以了. 使用docker 模式部署 创建yugaby ...

  3. NTLM 了解

    NTLM是NT LAN Manager的缩写,这也说明了协议的来源.NTLM 是 Windows NT 早期版本的标准安全协议,Windows 2000 支持 NTLM 是为了保持向后兼容.Windo ...

  4. H.264帧结构详解

    6.1.2.源码简单浏览 6.1.3.重点1:h.264帧结构6.1.4.重点2:帧结构分析软件的使用6.1.5.重点3:rtsp网络编程6.1.6.重点4:wireshark网络抓包工具的使用 6. ...

  5. oracle之 手动创建 emp 表 与 dept 表

    说明: 有时候我们需要通用的实验数据,emp表 与 dept表  但是数据库中有没有. 这时,我们可以手动创建. -- 创建表与数据CREATE TABLE EMP(EMPNO NUMBER(4) N ...

  6. spring cloud 之 Eureka 知识点

    Eureka原理 当服务消费者想要调用服务提供者的API时,首先会在注册中心中查询当前可用的实例的网络地址(也可能是定时查询可用实例,本地缓存好可用服务列表),然后再使用客户端负载均衡,命中到其中一个 ...

  7. zsh 使用

    使用ctrl+r,弹出搜索框: bck-i-search: mac os 系统默认的终端为bash,切换该终端为zsh,可以用以下命令: chsh -s /bin/zsh 如过要切回默认终端bash, ...

  8. 服务检测sh脚本

    如mysql cat check_mysql.sh #!/bin/bash servicename="mysqld"showname="mysql" pid=& ...

  9. redux学习与使用

    Redux: 主要概念Action,reducer,store,state 原理:dispatch ({ type:action, preload: { val } } ) --->reduce ...

  10. GitHub + circleCI 自动构建/自动部署 应用

    GitHub + circleCI 自动构建/自动部署, 这里略过了单元测试,以部署 laravel 应用为例子 比起 gitlab + ansible + genkins 操作起来节省了很多硬件资源 ...