dynamic-datasource-spring-boot-starter 組件自帶了兩個負載均衡算法 1 :
其中輪詢是默認算法。
這兩個算法類都實現了 DynamicDataSourceStrategy 接口:
所以如果需要自定義負載均衡算法,就可以實現DynamicDataSourceStrategy 接口。該接口只定義了壹個determineDataSource方法,用於決定多個數據源的選擇策略:
(1)輪詢算法
這裏利用 AtomicInteger 類創建了壹個線程安全 2 的 Integer作為計數器,默認為 0。
然後在 determineDataSource 實現方法中,利用 AtomicInteger#getAndAdd() 累加該計算器,接著把結果值除以數據源總數,求余數。
這裏的 Math.abs() 似乎沒有必要,因為被除數與除數肯定大於 0。
可以改造如下:
(2)隨機算法
這裏使用了ThreadLocalRandom 來生成線程安全的隨機數 3 ,current() 方法是其靜態工廠。