java 连接2个数据源_Spring 配置多个数据源 并实现动态切换
应用一
主数据源和应用数据源(代码中手动切换数据源)
1.jdbc.properties(连接两个库)jdbc.user=root jdbc.password=123456 jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/survey?rewriteBatchedStatements=true log.url=jdbc:mysql://localhost:3306/survey_log?rewriteBatchedStatements=true
2.Spring配置文件的配置
3.定义一个类继承AbstractRoutingDataSource实现determineCurrentLookupKey方法,该方法可以实现数据库的动态切换,如下(方法返回的数据源的key值 根据key值去配响应的数据源)public class SurveyRouterDataSource extends AbstractRoutingDataSource{ @Override protected Object determineCurrentLookupKey() { //尝试从当前线程获取令牌 String token = RouterToken.getToken(); //检测令牌是否等于日志数据源对应的键 if(RouterToken.DATASOURCE_LOG.equals(token)){ //当前线程上的令牌,在使用过后需要移除 //避免影响当前线程内其他的数据库操作 RouterToken.removeToken(); //如果是日志数据源对应的键,将日志数据源的键返回 return RouterToken.DATASOURCE_LOG; } //如果不是日志数据源对应的键则返回null采用默认的数据源(主数据源) return null; } }
4.将路由器数据源的key值绑定到本地线程中/** * 连接数据源的令牌,返回字符串,根据返回的字符串名称判定连接那个数据源 * @author dongdong */ public class RouterToken { // 声明一个本地线程 private static ThreadLocal local = new ThreadLocal(); // 将返回的字符串声明为静态全局final形式的 public static final String DATASOURCE_LOG = "DATASOURCE_LOG"; // 将字符串绑定到线程上 public static void bindToken(String token) { local.set(token); } // 获取当前线程的字符串 public static String getToken() { return local.get(); } //将当前线程的字符串移除 public static void removeToken(){ local.remove(); } }
5.代码中的使用//将路由器数据源的key绑定到当前线程,必须在Service方法前绑定,因为Service有事物,事物也要连接数据源 RouterToken.bindToken(RouterToken.DATASOURCE_LOG); Page page = logService.getPage(pageNoStr, Page.PAGE_SIZE_SMALL);
应用二
主数据源和从数据源(AOP实现自动数据源的切换)
1.jdbc.propertiesssjdbc.driver=com.mysql.jdbc.Driver #主数据库 jdbc.master.url=jdbc:mysql://192.168.0.68:3306/master_lxg jdbc.master.username=root jdbc.master.password=root #从数据库 jdbc.slaver.url=jdbc:mysql://192.168.0.12:3306/slave_lxg jdbc.slaver.username=root jdbc.slaver.password=root
2.Spring配置文件的配置
3.定义数据源的AOP切面,通过该Service的方法名判断是应该走读库还是写库,并且设置数据源public class DataSourceAspect { /** * 在进入Service方法之前执行 */ public void before(JoinPoint point) { // 获取到当前执行的方法名 String methodName = point.getSignature().getName(); if (isSlave(methodName)) { // 标记为从库 应当先clear一下 DBContextHolder.clearDBType (); DBContextHolder.setDBType(DBContextHolder.DATA_SOURCE_SLAVER); } else { // 标记为主库 应当先clear一下 DBContextHolder.clearDBType (); DBContextHolder.setDBType(DBContextHolder.DATA_SOURCE_MASTER); } } /** * 判断是否为读库 */ private Boolean isSlave(String methodName) { // 方法名以query、find、get开头的方法名走从库 return StringUtils.startsWithAny(methodName, "query", "find", "get"); } }4.定义一个类继承AbstractRoutingDataSource实现determineCurrentLookupKey方法,该方法可以实现数据库的动态切换,如下(方法返回的数据源的key值 根据key值去配响应的数据源)
public class DynamicDataSource extends AbstractRoutingDataSource{ @Override protected Object determineCurrentLookupKey() { return DBContextHolder.getDBType(); } }5.将路由器数据源的key值绑定到本地线程中
public class DBContextHolder{ public static final String DATA_SOURCE_MASTER = "Master"; public static final String DATA_SOURCE_SLAVER = "Slaver"; private static final ThreadLocal THREAD_LOCAL = new ThreadLocal(); public static void setDBType(String dbType) { THREAD_LOCAL.set(dbType); } public static String getDBType() { return THREAD_LOCAL.get(); } public static void clearDBType() { THREAD_LOCAL.remove(); } }
相关信息
- 多数据源切换-Druid
- springmvc+mybatis多数据源配置,AOP注解动态切换数据源
- 四、Spring Boot 多数据源 自动切换
- SpringMVC+Mybatis 如何配置多个数据源并切换?
- springboot+多数据源配置
- spring多数据源配置
- MyBatis 配置多数据源
- 三、Spring Boot 多数据源配置
- MybatisPlus--切换多个数据源
- Spring Boot2.x 动态数据源配置
- spring的jdbcTemplate的多数据源的配置,springboot的jdbcTemplate的多数据源的配置
- Spring3.0配置多个事务管理器(即操作多个数据源)的方法
- 基于spring boot 2.0 实现动态数据源切换
- 数据库连接池-数据源配置
- Spring+Hibernate+SpringMVC+MySql实现配置多个数据源!
- Tomcat7配置数据源
- Spring 配置多个数据源,并实现动态切换
- Spring boot多数据源实现动态切换
- Spring+Mybatis 多数据源配置——静态数据源配置
- spring多个数据源配置
- 数据源管理 | 基于JDBC模式,适配和管理动态数据源
- springmvc 配置多个数据源,并动态切换
- Spring配置多个数据源,并实现数据源的动态切换转载)
- SpringBoot(十一)-- 动态数据源
- Spring配置DataSource数据源
- Jndi配置数据源
- Python:多态(一个接口多种实现)
- EJB 配置多个数据源
- springboot 学习(整合动态数据源 及 各个spring-boot-starter)
- 数据库读取数据源配置实现动态数据源
- 数据库读取数据源配置实现动态数据源
- java配置数据库连接池
- spring mybatis 多个数据源配置
- 基于Spring的Web项目运行时切换数据源的一种解决方案
- SpringMVC配置双数据源,一个java项目同时连接两个数据库
- Spring动态数据源实现读写分离
- MySQL多数据源笔记2-Spring多数据源一主多从读写分离(手写)
- spring mybaits多数据源动态切换
- springboot配置多个数据源
- 实现动态图谱数据
- 手把手教你用springboot配置多数据源
- BIEE11G配置Oracle数据源
- spring(16)------spring的数据源配置
- java 动态数据源切换,Java+Spring+MyBatis实现多数据源的动态切换
- 基于xml的Spring多数据源配置和使用
- SSM配置多数据源
- MyBatis动态切换数据源/多数据源配置
- SpringBoot配置多数据源, 动态切换数据源.
- springboot之jpa多数据源
- SpringMVC+Mybatis 如何配置多个数据源并切换?
热门资讯
推荐资讯
最新资讯
- 每个程序员必学的10个Git命令
- [nginx] - 使用nginx实现反向代理,动静分离,负载均衡,session共享
- 【小白学算法】10.递归的调用机制、使用时要注意的规则
- nginx反向代理之缓存,负载均衡,动静分离的配置详解
- Android连载24-本地广播和强制下线功能
- Android开机广播和关机广播
- android仿iphone的地区选择
- 入坑 Android Gradle 插件开发(一)
- Android——实现【搜索框】与点击搜索事件监听 —— SearchView
- oracle 10g r2 安装clusterware ocr 指定/dev/raw/raw1 报错
- Android资源文件assets和raw的比较
- android 读取 raw 中的文件。
- Android 读取res文件中raw的json文件
- 线性回归算法之鸢尾花特征分类【机器学习】
- 机器学习 | 鸢尾花分类项目实战
- 路由/三层交换机DHCP下发地址详解【华为eNSP】
- tensorflow--鸢尾花分类
- 生产者-消费者问题详细分析【操作系统原理】
- 机器学习之Python使用KNN算法进行电影类型预测,对鸢尾花进行分类
- 支持向量机算法之鸢尾花特征分类【机器学习】
评论