配置示例
數(shù)據(jù)分片 + 讀寫分離
sharding.jdbc.datasource.names=ds_master_0,ds_master_1,ds_master_0_slave_0,ds_master_0_slave_1,ds_master_1_slave_0,ds_master_1_slave_1
sharding.jdbc.datasource.ds_master_0.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.ds_master_0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds_master_0.url=jdbc:mysql://localhost:3306/ds_master_0
sharding.jdbc.datasource.ds_master_0.username=root
sharding.jdbc.datasource.ds_master_0.password=
sharding.jdbc.datasource.ds_master_0_slave_0.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.ds_master_0_slave_0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds_master_0_slave_0.url=jdbc:mysql://localhost:3306/ds_master_0_slave_0
sharding.jdbc.datasource.ds_master_0_slave_0.username=root
sharding.jdbc.datasource.ds_master_0_slave_0.password=
sharding.jdbc.datasource.ds_master_0_slave_1.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.ds_master_0_slave_1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds_master_0_slave_1.url=jdbc:mysql://localhost:3306/ds_master_0_slave_1
sharding.jdbc.datasource.ds_master_0_slave_1.username=root
sharding.jdbc.datasource.ds_master_0_slave_1.password=
sharding.jdbc.datasource.ds_master_1.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.ds_master_1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds_master_1.url=jdbc:mysql://localhost:3306/ds_master_1
sharding.jdbc.datasource.ds_master_1.username=root
sharding.jdbc.datasource.ds_master_1.password=
sharding.jdbc.datasource.ds_master_1_slave_0.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.ds_master_1_slave_0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds_master_1_slave_0.url=jdbc:mysql://localhost:3306/ds_master_1_slave_0
sharding.jdbc.datasource.ds_master_1_slave_0.username=root
sharding.jdbc.datasource.ds_master_1_slave_0.password=
sharding.jdbc.datasource.ds_master_1_slave_1.type=org.apache.commons.dbcp.BasicDataSource
sharding.jdbc.datasource.ds_master_1_slave_1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds_master_1_slave_1.url=jdbc:mysql://localhost:3306/ds_master_1_slave_1
sharding.jdbc.datasource.ds_master_1_slave_1.username=root
sharding.jdbc.datasource.ds_master_1_slave_1.password=
sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id
sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds_$->{user_id % 2}
sharding.jdbc.config.sharding.tables.t_order.actual-data-nodes=ds_$->{0..1}.t_order_$->{0..1}
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order_$->{order_id % 2}
sharding.jdbc.config.sharding.tables.t_order.key-generator-column-name=order_id
sharding.jdbc.config.sharding.tables.t_order_item.actual-data-nodes=ds_$->{0..1}.t_order_item_$->{0..1}
sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.algorithm-expression=t_order_item_$->{order_id % 2}
sharding.jdbc.config.sharding.tables.t_order_item.key-generator-column-name=order_item_id
sharding.jdbc.config.sharding.master-slave-rules.ds_0.master-data-source-name=ds_master_0
sharding.jdbc.config.sharding.master-slave-rules.ds_0.slave-data-source-names=ds_master_0_slave_0, ds_master_0_slave_1
sharding.jdbc.config.sharding.master-slave-rules.ds_1.master-data-source-name=ds_master_1
sharding.jdbc.config.sharding.master-slave-rules.ds_1.slave-data-source-names=ds_master_1_slave_0, ds_master_1_slave_1
配置項說明
數(shù)據(jù)分片
sharding.jdbc.datasource.names= #數(shù)據(jù)源名稱,多數(shù)據(jù)源以逗號分隔
sharding.jdbc.datasource.<data_source_name>.type= #數(shù)據(jù)庫連接池類名稱
sharding.jdbc.datasource.<data_source_name>.driver-class-name= #數(shù)據(jù)庫驅動類名
sharding.jdbc.datasource.<data_source_name>.url= #數(shù)據(jù)庫url連接
sharding.jdbc.datasource.<data_source_name>.username= #數(shù)據(jù)庫用戶名
sharding.jdbc.datasource.<data_source_name>.password= #數(shù)據(jù)庫密碼
sharding.jdbc.datasource.<data_source_name>.xxx= #數(shù)據(jù)庫連接池的其它屬性
sharding.jdbc.config.sharding.tables.<logic_table_name>.actual-data-nodes= #由數(shù)據(jù)源名 + 表名組成,以小數(shù)點分隔。多個表以逗號分隔,支持inline表達式。缺省表示使用已知數(shù)據(jù)源與邏輯表名稱生成數(shù)據(jù)節(jié)點。用于廣播表(即每個庫中都需要一個同樣的表用于關聯(lián)查詢,多為字典表)或只分庫不分表且所有庫的表結構完全一致的情況
#分庫策略,缺省表示使用默認分庫策略,以下的分片策略只能選其一
#用于單分片鍵的標準分片場景
sharding.jdbc.config.sharding.tables.<logic_table_name>.database-strategy.standard.sharding-column= #分片列名稱
sharding.jdbc.config.sharding.tables.<logic_table_name>.database-strategy.standard.precise-algorithm-class-name= #精確分片算法類名稱,用于=和IN。該類需實現(xiàn)PreciseShardingAlgorithm接口并提供無參數(shù)的構造器
sharding.jdbc.config.sharding.tables.<logic_table_name>.database-strategy.standard.range-algorithm-class-name= #范圍分片算法類名稱,用于BETWEEN,可選。該類需實現(xiàn)RangeShardingAlgorithm接口并提供無參數(shù)的構造器
#用于多分片鍵的復合分片場景
sharding.jdbc.config.sharding.tables.<logic_table_name>.database-strategy.complex.sharding-columns= #分片列名稱,多個列以逗號分隔
sharding.jdbc.config.sharding.tables.<logic_table_name>.database-strategy.complex.algorithm-class-name= #復合分片算法類名稱。該類需實現(xiàn)ComplexKeysShardingAlgorithm接口并提供無參數(shù)的構造器
#行表達式分片策略
sharding.jdbc.config.sharding.tables.<logic_table_name>.database-strategy.inline.sharding-column= #分片列名稱
sharding.jdbc.config.sharding.tables.<logic_table_name>.database-strategy.inline.algorithm-inline-expression= #分片算法行表達式,需符合groovy語法
#Hint分片策略
sharding.jdbc.config.sharding.tables.<logic_table_name>.database-strategy.hint.algorithm-class-name= #Hint分片算法類名稱。該類需實現(xiàn)HintShardingAlgorithm接口并提供無參數(shù)的構造器
#分表策略,同分庫策略
sharding.jdbc.config.sharding.tables.<logic_table_name>.table-strategy.xxx= #省略
sharding.jdbc.config.sharding.tables.<logic_table_name>.key-generator-column-name= #自增列名稱,缺省表示不使用自增主鍵生成器
sharding.jdbc.config.sharding.tables.<logic_table_name>.key-generator-class-name= #自增列值生成器類名稱,缺省表示使用默認自增列值生成器。該類需提供無參數(shù)的構造器
sharding.jdbc.config.sharding.tables.<logic_table_name>.logic-index= #邏輯索引名稱,對于分表的Oracle/PostgreSQL數(shù)據(jù)庫中DROP INDEX XXX語句,需要通過配置邏輯索引名稱定位所執(zhí)行SQL的真實分表
sharding.jdbc.config.sharding.binding-tables[0]= #綁定表規(guī)則列表
sharding.jdbc.config.sharding.binding-tables[1]= #綁定表規(guī)則列表
sharding.jdbc.config.sharding.binding-tables[x]= #綁定表規(guī)則列表
sharding.jdbc.config.sharding.default-data-source-name= #未配置分片規(guī)則的表將通過默認數(shù)據(jù)源定位
sharding.jdbc.config.sharding.default-database-strategy.xxx= #默認數(shù)據(jù)庫分片策略,同分庫策略
sharding.jdbc.config.sharding.default-table-strategy.xxx= #默認表分片策略,同分表策略
sharding.jdbc.config.sharding.default-key-generator-class-name= #默認自增列值生成器類名稱,缺省使用io.shardingjdbc.core.keygen.DefaultKeyGenerator。該類需實現(xiàn)KeyGenerator接口并提供無參數(shù)的構造器
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.master-data-source-name= #詳見讀寫分離部分
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.slave-data-source-names[0]= #詳見讀寫分離部分
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.slave-data-source-names[1]= #詳見讀寫分離部分
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.slave-data-source-names[x]= #詳見讀寫分離部分
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.load-balance-algorithm-class-name= #詳見讀寫分離部分
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.load-balance-algorithm-type= #詳見讀寫分離部分
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.config.map.key1= #詳見讀寫分離部分
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.config.map.key2= #詳見讀寫分離部分
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.config.map.keyx= #詳見讀寫分離部分
sharding.jdbc.config.sharding.props.sql.show= #是否開啟SQL顯示,默認值: false
sharding.jdbc.config.sharding.props.executor.size= #工作線程數(shù)量,默認值: CPU核數(shù)
sharding.jdbc.config.sharding.config.map.key1= #用戶自定義配置
sharding.jdbc.config.sharding.config.map.key2= #用戶自定義配置
sharding.jdbc.config.sharding.config.map.keyx= #用戶自定義配置
讀寫分離
#省略數(shù)據(jù)源配置,與數(shù)據(jù)分片一致
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.master-data-source-name= #主庫數(shù)據(jù)源名稱
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.slave-data-source-names[0]= #從庫數(shù)據(jù)源名稱列表
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.slave-data-source-names[1]= #從庫數(shù)據(jù)源名稱列表
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.slave-data-source-names[x]= #從庫數(shù)據(jù)源名稱列表
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.load-balance-algorithm-class-name= #從庫負載均衡算法類名稱。該類需實現(xiàn)MasterSlaveLoadBalanceAlgorithm接口且提供無參數(shù)構造器
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.load-balance-algorithm-type= #從庫負載均衡算法類型,可選值:ROUND_ROBIN,RANDOM。若`load-balance-algorithm-class-name`存在則忽略該配置
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.config.map.key1= #用戶自定義配置
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.config.map.key2= #用戶自定義配置
sharding.jdbc.config.sharding.master-slave-rules.<master-slave-data_source_name>.config.map.keyx= #用戶自定義配置