Spring MyBatis多数据源(同包)
来源:互联网 发布:苹果numbers是什么软件 编辑:程序博客网 时间:2024/05/22 04:31
分包的同学点这里: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 {@Overrideprotected 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 ThreadLocal<String> contextHolder = new ThreadLocal<String>();/** * 设置数据源类型 * * @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 {@Overridepublic void afterReturning(Object returnValue, Method method,Object[] args, Object target) throws Throwable {DataSourceContextHolder.clearDbType();}@Overridepublic 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配置文件对应
可以自己去试试
附上楼主的源码
亲,点我去下载
chuagn 创建
1 1
- Spring MyBatis多数据源(同包)
- spring mybatis 多数据源
- spring Mybatis 多数据源
- spring(spring-boot) + mybatis多数据源
- spring + mybatis多数据源配置
- Mybatis+Proxool+Spring多数据源切换
- spring+mybatis 多数据源整合
- Spring+mybatis 多数据源整合[备用]
- spring mybatis多数据源实践
- spring+mybatis 多数据源整合
- spring+mybatis 多数据源整合
- spring+mybatis 多数据源整合
- spring MVC+MyBatis 多数据源配置
- Spring下mybatis 多数据源配置
- Spring - 集成多数据源的mybatis
- Spring下mybatis配置多数据源
- Spring+Mybatis 多数据源配置
- spring+mybatis 多数据源整合
- OpenCV中提取SIFT特征点、图像匹配、图像配准
- 机器学习笔记(四)经验误差与过拟合
- android-每次进入Activity控制横竖屏幕的情况
- spring-mvc 抓取视图报错:No mapping found for HTTP
- ios 常用的30个动画效果
- Spring MyBatis多数据源(同包)
- pyasn1模块缺失解决
- 算法导论 练习题 13.1-4
- Spring速查手册(三)——Spring+JDBC
- Linux下C++的开发实践
- C++11 变量初始化方法汇总
- 驱动的定义、分类、安全性
- postgresql扩展uuid
- Android动态获取运行时权限RxPermissions