sharding-jdbc源码分析(二)之读写分离
程序员文章站
2022-07-13 15:32:42
...
sjdbc有读写分离的功能,要使用这个功能,在创建数据源对象是要使用类:MasterSlaveDataSource,并且设置主备数据源和数据库名称
这个对象有下面的属性:
name:数据库的名称
masterDataSource:主数据源对象
slaveDataSources:备库数据源类别
slaveLoadBalanceStrategy:选从算法
/** * 获取主或从节点的数据源名称. * * @param sqlStatementType SQL类型 * @return 主或从节点的数据源 */ public DataSource getDataSource(final SQLStatementType sqlStatementType) { if (SQLStatementType.SELECT != sqlStatementType || DML_FLAG.get() || HintManagerHolder.isMasterRouteOnly()) { DML_FLAG.set(true); return masterDataSource; } return slaveLoadBalanceStrategy.getDataSource(name, slaveDataSources); }
以下三种情况下会走主库
(1)写走主库,读走从库
(2)当前线程,前面的操作走了主库,查询也要走主库。适用于进行了写的操作,然后接着查询的场景,这个时候如果读走从库,有可能会查询不到,因为主从的同步会有延迟
(3)使用Hint强制走主库
HintManager hintManager = HintManager.getInstance();
hintManager.setMasterRouteOnly();
上一篇: 判断应用是安装还是卸载了 androidreceiver
下一篇: android特定短信拦截
推荐阅读
-
Netty源码分析之ChannelPipeline(二)—ChannelHandler的添加与删除
-
netty之NioEventLoopGroup源码分析二
-
MySQL主从复制配置指导及PHP读写分离源码分析
-
Android基础之Handler机制(二)之Message源码分析
-
sharding-jdbc源码分析(二)之读写分离
-
死磕 java集合之TreeMap源码分析(二)- 内含红黑树分析全过程
-
Dubbo源码分析之SPI(二)
-
Netty源码分析之ChannelPipeline(二)—ChannelHandler的添加与删除
-
透彻理解AQS源码分析系列之AQS基础二
-
透彻理解AQS源码分析系列之AQS基础二