Spring MyBatis多数据源(同包)
创建基本的包 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多数据源(同包)的更多相关文章
- Spring+Mybatis多数据源的一种实现方式,支持事务
最近一个项目用到了多个数据库,所以需要实现动态切换数据源来查询数据,http://www.cnblogs.com/lzrabbit/p/3750803.html这篇文章让我受益匪浅,提供了一种自动切换 ...
- 一个基本的spring+mybatis所需要的包
spring+mybatis需要的包:org.springframework.spring-webmvc(spring框架DispatcherServlet需要,spring-webmvc会依赖spr ...
- spring+mybatis多数据源动态切换
spring mvc+mybatis+多数据源切换 选取oracle,mysql作为例子切换数据源.oracle为默认数据源,在测试的action中,进行mysql和oracle的动态切换. web. ...
- Spring + MyBatis 多数据源实现
近期,在项目中需要做分库,但是因为某些原因,没有采用开源的分库插件,而是采用了同事之前弄得多数据源形式实现的分库.对于多数据源,本人在实际项目也中遇到的不多,之前的项目大多是服务化,以RPC的形式获得 ...
- Spring+MyBatis多数据源配置实现
最近用到了MyBatis配置多数据源,原以为简单配置下就行了,实际操作后发现还是要费些事的,这里记录下,以作备忘 不多废话,直接上代码,后面会有简单的实现介绍 jdbc和log4j的配置 #定义输出格 ...
- Spring, MyBatis 多数据源的配置和管理
同一个项目有时会涉及到多个数据库,也就是多数据源.多数据源又可以分为两种情况: 1)两个或多个数据库没有相关性,各自独立,其实这种可以作为两个项目来开发.比如在游戏开发中一个数据库是平台数据库,其它还 ...
- spring+mybatis多数据源切换
在实际的公司项目中,很可能会遇到一个问题就是,一个java项目,但是项目中涉及两个数据库,这两个数据库还在不同IP的机子上. 遇到这种情况的时候,我们有两个选择 1.不走spring的aop方式,直接 ...
- spring+mybatis 多数据源整合
<!-- 数据源配置 --> <bean id="ds1" class="org.apache.commons.dbcp.BasicDataSour ...
- spring ,mybatis多数据源
同一个项目有时会涉及到多个数据库,也就是多数据源.多数据源又可以分为两种情况: 1)两个或多个数据库没有相关性,各自独立,其实这种可以作为两个项目来开发.比如在游戏开发中一个数据库是平台数据库,其 ...
随机推荐
- 干了这杯Java之HashMap
类: public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneab ...
- JAVA项目中文件重命名方式
可以直接改类名,之后eclipse会报错: 点击×号会给出解决方案: 注意:不能通过右击servlet文件直接重命名.否则运行之后程序会报错(文件路径不对之类的)
- java学习之成员内部类
//成员内部类:直接在类中定义 /*成员内部类的通常用法: * 通常是提供给外部类使用不进行内部类的实例化 * 因此一般把他设为私有的类用private限定 * * */ /*Demo*/ class ...
- 排序之冒泡排序(bubblesort)
package com.pailian; /* * 冒泡排序 * 比较相邻的俩位数,这样每轮比较都会出现一个最大值或最小值 * 下一轮比较就会减少一次(因为已经知道了一个最大值或最小值) * 注意根据 ...
- 修改hostname
修改hostname步骤 1. 修改/etc/sysconfig/network中的hostname选项 2. 在/etc/hosts中添加hostname对应的ip地址 3.执行命令:hostnam ...
- 小程序开发-Now you can provide attr "wx:key" for a "wx:for" to improve performance
Now you can provide attr "wx:key" for a "wx:for" to improve performance 是一个关于性能优 ...
- 解决postman环境切换,自动获取api签名时间及签名
postman调试api接口时,常遇到两个问题: 1.环境分为开发环境,测试环境,正式环境,如何只写一个接口,通过切换postman环境来实现不同环境的接口调用? 2. api接口请求时往往会添加,来 ...
- [NOIP2017普及组]棋盘
题目 题目描述 有一个m × m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的),你只 ...
- 无序数组求第k大/第k小的数
根据http://www.cnblogs.com/zhjp11/archive/2010/02/26/1674227.html 博客中所总结的7种解法,我挑了其中的解法3和解法6进行了实现. 解法3: ...
- pickel加速caffe读图
64*64*3小图(12KB),batchSize=128,训练样本100万, 全部load进来内存受不了,load一次需要大半天 训练时读入一个batch,ali云服务器上每个batch读入时间1. ...