创建基本的包 entity service dao 为了区分多数据源 一个用的是Mysql 一个是Oracle 方便测试,

  

  创建MyBatis dao 映射 xml 文件

  

  创建db.properties

  

  我这里设置了2个数据源

  创建Mybatis.xml 文件

  建议创建2个,也可以创建一个.但是2个 耦合性降低

  还需要用到工具类:

  package com.cp.util.datasources;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;/**

  * 动态切换数据库

  *

  * @author Joey

  * @project:SSM_MultiDataSource_CP

  * @date:2017年4月27日

  *

  */public class DynamicDataSource extends AbstractRoutingDataSource { @Override

  protected Object determineCurrentLookupKey() { return DataSourceContextHolder.getDbType();

  }

  }package com.cp.util.datasources;/**

  * 数据库切换的工具类

  *

  * @author Joey

  * @project:SSM_MultiDataSource_CP

  * @date:2017年4月27日

  *

  */public class DataSourceContextHolder { public static final String DATA_SOURCE_A = dataSource1; public static final String DATA_SOURCE_B = dataSource2; /** 数据源类型 */

  private static final ThreadLocalcontextHolder = new ThreadLocal(); /**

  * 设置数据源类型

  *

  * @param dbType

  * 数据源类型

  */

  public static void setDbType(String dbType) {

  contextHolder.set(dbType);

  } /**

  * 获取数据源类型

  *

  * @return String

  */

  public static String getDbType() { return ((String) contextHolder.get());

  } /**

  * 清除数据源类型

  */

  public static void clearDbType() {

  contextHolder.remove();

  }

  }package com.cp.util.datasources;import java.lang.reflect.Method;import org.springframework.aop.AfterReturningAdvice;import org.springframework.aop.MethodBeforeAdvice;/**

  * 数据源前置增强

  *

  * @author Joey

  * @project:SSM_MultiDataSource_CP

  * @date:2017年4月28日

  *

  */public class DataSourceAspect implements MethodBeforeAdvice, AfterReturningAdvice { @Override

  public void afterReturning(Object returnValue, Method method,

  Object[] args, Object target) throws Throwable {

  DataSourceContextHolder.clearDbType();

  } @Override

  public void before(Method method, Object[] args, Object target)

  throws Throwable { if (method.isAnnotationPresent(DataSource.class)) {

  DataSource datasource = method.getAnnotation(DataSource.class);

  DataSourceContextHolder.setDbType(datasource.value());

  } else {

  DataSourceContextHolder

  .setDbType(DataSourceContextHolder.DATA_SOURCE_A);

  }

  }

  }package com.cp.util.datasources;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/**

  * 动态数据源(default:DataSourceContextHolder.DATA_SOURCE_A)

  *

  * @author Joey

  * @project:SSM_MultiDataSource_CP

  * @date:2017年4月28日

  *

  */@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)@Documentedpublic @interface DataSource { String value() default DataSourceContextHolder.DATA_SOURCE_A;

  }

  Spring配置文件 :

  

  配置扫描包.

  导入数据源连接信息

  设置2个数据源

  

我使用的是Druid 个人觉得不错。推荐一下

  

  Druid的日志记录Filter

  

  DynamicDataSource类是你刚刚自定义的工具类,上面有

  导入2个数据源,默认数据源是DataSource1

  

  事物管理 和 开启事物自动扫描注解

  

  加上前置增强 DataSourceAspect类也是你刚刚自定义的工具类,上面有

  最重要的一步: 开启AOP注解支持

  

  方法注解使用多数据源

  在service里的方法要使用不同的数据源

  方法直接注解:

  @DataSource(DataSourceContextHolder.DATA_SOURCE_B)

  默认的使用是A 可以自己配置

  注意: DataSourceContextHolder类里的DATA_SOURCE_A 和 DATA_SOURCE_B 的值要和spring配置文件对应

Spring MyBatis多数据源(同包)的更多相关文章

  1. Spring+Mybatis多数据源的一种实现方式,支持事务

    最近一个项目用到了多个数据库,所以需要实现动态切换数据源来查询数据,http://www.cnblogs.com/lzrabbit/p/3750803.html这篇文章让我受益匪浅,提供了一种自动切换 ...

  2. 一个基本的spring+mybatis所需要的包

    spring+mybatis需要的包:org.springframework.spring-webmvc(spring框架DispatcherServlet需要,spring-webmvc会依赖spr ...

  3. spring+mybatis多数据源动态切换

    spring mvc+mybatis+多数据源切换 选取oracle,mysql作为例子切换数据源.oracle为默认数据源,在测试的action中,进行mysql和oracle的动态切换. web. ...

  4. Spring + MyBatis 多数据源实现

    近期,在项目中需要做分库,但是因为某些原因,没有采用开源的分库插件,而是采用了同事之前弄得多数据源形式实现的分库.对于多数据源,本人在实际项目也中遇到的不多,之前的项目大多是服务化,以RPC的形式获得 ...

  5. Spring+MyBatis多数据源配置实现

    最近用到了MyBatis配置多数据源,原以为简单配置下就行了,实际操作后发现还是要费些事的,这里记录下,以作备忘 不多废话,直接上代码,后面会有简单的实现介绍 jdbc和log4j的配置 #定义输出格 ...

  6. Spring, MyBatis 多数据源的配置和管理

    同一个项目有时会涉及到多个数据库,也就是多数据源.多数据源又可以分为两种情况: 1)两个或多个数据库没有相关性,各自独立,其实这种可以作为两个项目来开发.比如在游戏开发中一个数据库是平台数据库,其它还 ...

  7. spring+mybatis多数据源切换

    在实际的公司项目中,很可能会遇到一个问题就是,一个java项目,但是项目中涉及两个数据库,这两个数据库还在不同IP的机子上. 遇到这种情况的时候,我们有两个选择 1.不走spring的aop方式,直接 ...

  8. spring+mybatis 多数据源整合

    <!-- 数据源配置 -->   <bean id="ds1" class="org.apache.commons.dbcp.BasicDataSour ...

  9. spring ,mybatis多数据源

    同一个项目有时会涉及到多个数据库,也就是多数据源.多数据源又可以分为两种情况:   1)两个或多个数据库没有相关性,各自独立,其实这种可以作为两个项目来开发.比如在游戏开发中一个数据库是平台数据库,其 ...

随机推荐

  1. 铁大Facebook隐私保护NABCD

    隐私保护功能: N:满足了用户保护自己隐私信息的需求 A:对每一项用户可能需要保护的信息,我们都会添加仅自己可见.指定人可见.部分人可见或所有人可见设置 B:让用户的信息受到更全面的保护,而不仅仅是对 ...

  2. CF822C Hacker, pack your bags!(思维)

    Hacker, pack your bags [题目链接]Hacker, pack your bags &题意: 有n条线段(n<=2e5) 每条线段有左端点li,右端点ri,价值cos ...

  3. scanf函数的返回值

    #include <stdio.h> int main() { ]; ]); printf("%d\n", n); ; } 此刻注意scanf函数里面的格式限定,该代码 ...

  4. 灵雀云获邀加入CDF(持续交付基金会),成为中国区三大创始成员之一

    3月12日,在加州Half Moon Bay举行的开源领导者峰会(Open Leadership Summit 2019 )上,CDF(Continuous Delivery Foundation ) ...

  5. 灵雀云CTO陈恺:从“鸿沟理论”看云原生,哪些技术能够跨越鸿沟?

    灵雀云CTO陈恺:从“鸿沟理论”看云原生,哪些技术能够跨越鸿沟? 历史进入2019年,放眼望去,今天的整个技术大环境和生态都发生了很大的变化.在己亥猪年春节刚刚过去的早春时节,我们来梳理和展望一下整个 ...

  6. ld命令

    ld 用于把目标代码文件连接为可执行文件或者库文件 参数 -b: 指定目标代码输入文件的格式 -Bstatic: 只使用静态库 -Bdynamic: 只使用动态库 -Bsymbolic: 把引用捆绑到 ...

  7. 淘宝客订单api处理优化

    首选我们看看api定义: http://open.taobao.com/api.htm?docId=38078&docType=2&scopeId=14474 注意下span这个参数 ...

  8. 解决pycharm左侧项目文件名中文字体乱码情况?中文显示口口口口.

    解决pycharm左侧项目文件名中文字体乱码情况?中文显示口口口口. 点击file,进入settings 出现 Appearance & Behavior 点击Appearance UI Op ...

  9. C++笔记整理(参考整理自各大博客)

    为什么构造函数不能是虚函数,析构函数往往是虚函数? 静态存储区.无论在那里构建,其过程都是两步:首先,分配一块内存:其次,调用构造函数.好,问题来了,如果构造函数是虚函数,那么就需要通过vtable  ...

  10. 解析url成对象形式

    请编写一个JavaScript函数parseQueryString,他的用途是把URL参数解析为一个对象 var url = "https://www.baidu.com/s?ie=utf- ...