前面使用spring+mybatis+uncode dal
实现应用与postgresql主从数据库集成实现读写分离
那么在主数据库连接错误的情况下,如何保证在主数据库发生异常情况下任何数据库请求都能够正确执行
并且能够快速的尝试其他数据库
可以有两种方式
1.目前的DynamicDataSource获取数据库连接异常就会立即抛出异常,不会重试
对dal的cn.uncode.dal.datasource.DynamicDataSource类进行扩展
重写其getConnection方法
在获得datasource的connection错误时,立即切换到其他数据库并重新获取其连接,
指定mybatis使用这种新的datasource

2.实现mybatis的拦截器,
这种方式可以指定哪类方法访问哪些数据库,并且在获取数据库连接错误的时候
可以尝试获取其他数据库的连接
需要做以下修改
a.定义新的inteceptor
Mybatis拦截器只能拦截四种类型的接口:Executor、StatementHandler、ParameterHandler和ResultSetHandler。
这是在Mybatis的Configuration中写死了的,如果要支持拦截其他接口就需要我们重写Mybatis的Configuration。
Mybatis可以对这四个接口中所有的方法进行拦截。
参照http://haohaoxuexi.iteye.com/blog/1851081
拦截器中可以根据方法名来设定route
(例如下面定义拦截器对所有executor的query方法进行拦截,设定路由为读,那么后面获取连接只会从从数据库列表中获取
并且设定重试机制)
@Intercepts(  @Signature(method = "query", type = Executor.class, args = {
        MappedStatement.class, Object.class, RowBounds.class,
        ResultHandler.class }))
public class MyInterceptor implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
       int count=0;
        DBContextHolder.switchRead()
        while(count<=3) {
            try {
                return 
invocation.proceed();
            } catch (Exception e) {
                count=count+1;
            }
        }
        return invocation.proceed();
    }

@Override
    public Object plugin(Object o) {
        return Plugin.wrap(o, this);
    }

@Override
    public void setProperties(Properties properties) {

}

}
2.在mybatis配置文件中注册新的interceptor
在mybatis-config.xml中指定拦截器
<?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>
    <plugins>
        <plugin interceptor="<包名.MyInterceptor"></plugin>
    </plugins>
</configuration>
3.为了能够快速切换数据源,需要指定druiddatasource的
jdbc.pool.maxWait = 1000
这样1s内连接不成功,就会抛出异常,拦截器捕获到异常就会重试
4.原有使用mybatis dao的代码不用做任何修改

实现spring+mybatis+uncode dal,应用自动切换连接数据库相关推荐

  1. Spring+MyBatis 多数据源配置和切换

    两台 MySQL 数据库(属于 master-slave 主从关系),基于 Java8,Spring4,MyBatis3.2 环境. maven 依赖配置 <dependencies>&l ...

  2. Spring+Mybatis多数据源配置(一)——MySQL与Oracle通过配置切换

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  3. java 动态数据源切换,Java+Spring+MyBatis实现多数据源的动态切换

    在实际的项目开发过程中我们经常会遇到一个项目需要使用多个数据源的情况,而多数据源又可分为固定多数据源和动态多数据源两种情况. 固定多数据源是指在项目中需要使用多个数据源,但数据源的个数是确定的,不会改 ...

  4. spring+mybatis 多数据源切换

    spring+mybatis 多数据源切换 摘自: http://www.oschina.net/code/snippet_347813_12525 1. 代码: DbContextHolder pu ...

  5. Spring MyBatis多数据源分包

    创建基本的entity service dao 不同的数据源创建不同的包 我这里为了分辨 一个用的是Mysql 一个是Oracle 方便测试, 我这里使用的是MyBatis 创建MyBatis dao ...

  6. springBoot集成多数据源mybatisPlus(自动切换数据源)

    文章目录 1 背景 2 版本 3 配置 3.1 pom配置 3.1.1 父类pom 3.1.2 pom依赖 3.1.3 插件 3.2 application.yml配置 3.3 bean配置 3.3. ...

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

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

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

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

  9. 利用SSM(springmvc+spring+mybatis)实现多表联合查询

    最近在做在eclipse + maven搭建SSM框架下做一个简单的后台管理系统,因为是第一次搭建SSM项目,在mybatis进行多表连接查询的时候遇到问题,不知道如何进行处理?在网上搜了一下解决方法 ...

  10. sqlserver数据驱动bao1_自动切换数据源 - 一个人看日出,一个人看夕阳,一个人走路,一个人欢笑 - OSCHINA - 中文开源技术交流社区...

    背景: spring+mybatis项目 数据源: xmlns:context="http://www.springframework.org/schema/context" xm ...

最新文章

  1. 为什么抢红包抢不过别人?学了这个算法就明白了!
  2. win10 系统安装 服务器失败怎么回事,Win10正式版安装出现问题怎么办
  3. PID控制器开发笔记之二:积分分离PID控制器的实现
  4. java 教室借用管理系统_[内附完整源码和文档] 基于JAVA语言的学生选课信息管理系统...
  5. 数据可视化的基础知识·翻译完成
  6. Flutter社区和资源传送门
  7. BMFONT制作位图字体并在CocosCreator中使用
  8. 柴静采访剑桥大学校长乐思哲
  9. 吉他音阶训练——问题解答
  10. 阿里云域名的注册到使用流程
  11. Designing Network Design Spaces
  12. 企业授权:SOA被低估的经济价值
  13. word-wrap控制长单词或URL地址换行
  14. Nginx配置静态访问txt文件(微信校验文件)
  15. 2022央企施工企业加速推进数字化转型赋能高质量发展
  16. 我,32岁零基础转大数据,不需要别人怎么看!
  17. 从零开始搭建创业公司后台技术栈
  18. html转成16进制数,16进制转换(十六进制,二进制(包含小数)相互转换)
  19. java基于Springboot+vue的医院体检预约挂号系统 elementui
  20. 4.使用Keras和Tensorflow Hub对电影评论进行文本分类

热门文章

  1. python np arange_python – 为什么np.arccos(1.0)在np.arange的情况下给出nan?
  2. 大气压力换算公式_压力换算公式
  3. 1194. 锦标赛优胜者
  4. 《熊出没·原始时代》首映 导演点赞宋祖儿配音
  5. java 判断星期几_Java中如何判断某天是星期几
  6. IBM WMB 使用方法
  7. linux系统卸载git,linux卸载gitlab
  8. 排序算法二:二分(折半)插入排序
  9. 计算机教师成绩分析总结与反思,成绩分析总结与反思
  10. 120日均线金叉250日均线是大牛市来临的重要信号