码迷,mamicode.com
首页 > 数据库 > 详细

学习Sharding JDBC 从入门到出门-02:源码揣测

时间:2017-05-29 15:55:30      阅读:471      评论:0      收藏:0      [点我收藏+]

标签:算法   线程   man   情况   adb   适用于   名称   load   节点   

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();

学习Sharding JDBC 从入门到出门-02:源码揣测

标签:算法   线程   man   情况   adb   适用于   名称   load   节点   

原文地址:http://www.cnblogs.com/java-synchronized/p/6918069.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!