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


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

  • 相关阅读:
    17.异常(三)之 e.printStackTrace()介绍
    16.异常(二)
    15.异常(一)
    AuthCodeTool验证码
    FileUploadTool
    JdbcTool
    myeclipse-java项目转换成web项目
    中文注释乱码change
    css鼠标样式
    java script 弹出框
  • 原文地址:https://www.cnblogs.com/java-synchronized/p/6918069.html
Copyright © 2020-2023  润新知