Sharding-Jdbc源碼探究-讀寫分離


1. Sharding-Jdbc源碼探究-讀寫分離

1.1. 主入口

  • 找到源碼入口

  • 這一個類圍繞了springboot配置屬性的加載,加載了spring.shardingsphere.datasource.names配置的數據源,遍歷存儲到了Map容器

  • 可以看到它還有個@ConditionalOnProperty(prefix = "spring.shardingsphere", name = "enabled", havingValue = "true", matchIfMissing = true)屬性,說明只要引用了sharing-jdbc的pom,默認就會直接初始化加載

  • 此類總共負責加載4個屬性類

//分片屬性配置
private final SpringBootShardingRuleConfigurationProperties shardingProperties;
//主從屬性配置
private final SpringBootMasterSlaveRuleConfigurationProperties masterSlaveProperties;
//加密屬性配置
private final SpringBootEncryptRuleConfigurationProperties encryptProperties;
//額外屬性配置(比如sql是否打印)
private final SpringBootPropertiesConfigurationProperties propMapProperties;

經過該文件的查看,我們大概知道了配置屬性是從哪里加載的和加載的過程

1.2. props

主從配置中主從的屬性逗號理解,也好找到使用的地方,對props是在哪且如何使用的呢?
我找到了這個類:

是不是很熟悉sql.show,沒錯這是官網例子中的sql顯示配置,全稱配置是spring.shardingsphere.props.sql.show = true,說明了還有其它配置可以在這個類找到,比如最大線程數,最大請求連接數,是否簡單sql等等,可以自己看看,一般都是用默認值

1.3. 數據源分離

  • 主從環境的,具體選擇哪個datasource呢?

選完數據源,之后就是在mybatis包里執行具體的解析查詢過程

1.4. sql.show

這里就看看sql.shows是如何發揮作用的,緊接着上述類,進入route方法

在route包中對是否打印這個sql做了判斷,而參數的來源就是showSQL,而這個參數什么時候填進來的呢?1.3的截圖顯示不完整整句的內容如下

masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule(),
                connection.getMasterSlaveDataSource().getShardingProperties().<Boolean>getValue(ShardingPropertiesConstant.SQL_SHOW));

明白了吧,在MasterSlaveRouter類實例化的時候,通過ShardingPropertiesConstant.SQL_SHOW注入進來了,而ShardingPropertiesConstant這個類1.2的時候已經提到過了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM