博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring+mybatis利用interceptor(plugin)实现数据库读写分离
阅读量:4214 次
发布时间:2019-05-26

本文共 627 字,大约阅读时间需要 2 分钟。

1. 前提

    好长时间不写博客了,应该吐槽,写点什么东西了!最近在研究数据库读写分离,分表分库的一些东西。其实这个问题好早之前就想好,只是以前使用hibernate,难点是不好判断什么样的sql走读库,什么样的sql走主库?用正则匹配开头或许可以,/^select 没想出什么好的解决方法,mybatis就不一样了,mappedstatement有commandtype属性,象select,update,delete等类型,为实现读写分离打下来良好的基础。

2. 解决方法

    LazyConnectionProxy + RoutingDataSource +   Plugin

在SqlSessionTemplate,创建DefaultSqlSession的时候,使用connection proxy的代理,这时并没有真正的获取connection,因为我们不知道是要取读还是写的数据源。待到StatementHandler的prepare()使用connection创建PreparedStatement的时候再根据mappedstatement的commandType去路由获取真实的connection。

   RoutingDataSource支持一主一从,或者一主多从并采用round robin的方式简单负载均衡,预留接口路由和负载均衡策略可自定义。

   不支持事务,适合auto commit为true的场景。表述能力不强,有兴趣的可以看看代码,欢迎拍砖!

   

 

转载地址:http://hmdmi.baihongyu.com/

你可能感兴趣的文章
hdoj 1875 畅通工程再续 Prim / kruscal
查看>>
csp 2016_4_3 路径解析
查看>>
优先队列优化的 Dijkstra算法
查看>>
SPFA算法
查看>>
拓扑排序+最短路径(无环加权有向图最短路径算法)
查看>>
无环有向图最长路径
查看>>
Bellman_ford 边表示
查看>>
hdoj 1010 DFS +减枝
查看>>
hdoj 1595 最短路中的最长路(good)
查看>>
C++优先队列使用
查看>>
hdoj 1026
查看>>
csp 2017_3_3 markdown
查看>>
CSP 2017_9_4 通信网络
查看>>
hdoj 1026 搜索
查看>>
递归 理解
查看>>
欧几里德求最大公约数/最小公倍数
查看>>
hdoj 1016 素数环
查看>>
POJ 3617 字典序最小
查看>>
筛法求素数
查看>>
atoi/atof 字符串转Int/float
查看>>