The read/write splitting configured in Java API form can be easily applied to various scenarios without relying on additional jar packages. Users only need to construct the read/write splitting data source through java code to be able to use the read/write splitting function.
Class name: org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration
Configurable Properties:
| Name | DataType | Description | 
|---|---|---|
| dataSources (+) | Collection<ReadwriteSplittingDataSourceRuleConfiguration> | Data sources of write and reads | 
| loadBalancers (*) | Map<String, AlgorithmConfiguration> | Load balance algorithm name and configurations of replica data sources | 
Class name: org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration
Configurable Properties:
| Name | DataType | Description | Default Value | 
|---|---|---|---|
| name | String | Readwrite-splitting data source name | - | 
| staticStrategy | String | Static Readwrite-splitting configuration | - | 
| dynamicStrategy | Properties | Dynamic Readwrite-splitting configuration | - | 
| loadBalancerName (?) | String | Load balance algorithm name of replica sources | Round robin load balance algorithm | 
Class name:org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration
Configurable Properties:
| Name | DataType | Description | 
|---|---|---|
| writeDataSourceName | String | Write data source name | 
| readDataSourceNames | List<String> | Read data sources list | 
Class name:org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration
Configurable Properties:
| Name | DataType | Description | Default Value | 
|---|---|---|---|
| autoAwareDataSourceName | String | Database discovery logic data source name | - | 
| writeDataSourceQueryEnabled (?) | String | All read data source are offline, write data source whether the data source is responsible for read traffic | true | 
Please refer to Built-in Load Balance Algorithm List for details on algorithm types. Please refer to Read-write splitting-Core features for more details about query consistent routing.
public DataSource getDataSource() throws SQLException {
        ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = new ReadwriteSplittingDataSourceRuleConfiguration(
                "demo_read_query_ds", new StaticReadwriteSplittingStrategyConfiguration("demo_write_ds",
                Arrays.asList("demo_read_ds_0", "demo_read_ds_1")), null,"demo_weight_lb");
        Properties algorithmProps = new Properties();
        algorithmProps.setProperty("demo_read_ds_0", "2");
        algorithmProps.setProperty("demo_read_ds_1", "1");
        Map<String, AlgorithmConfiguration> algorithmConfigMap = new HashMap<>(1);
        algorithmConfigMap.put("demo_weight_lb", new AlgorithmConfiguration("WEIGHT", algorithmProps));
        ReadwriteSplittingRuleConfiguration ruleConfig = new ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceConfig), algorithmConfigMap);
        Properties props = new Properties();
        props.setProperty("sql-show", Boolean.TRUE.toString());
        return ShardingSphereDataSourceFactory.createDataSource(createDataSourceMap(), Collections.singleton(ruleConfig), props);
    }
    
    private Map<String, DataSource> createDataSourceMap() {
        Map<String, DataSource> result = new HashMap<>(3, 1);
        result.put("demo_write_ds", DataSourceUtil.createDataSource("demo_write_ds"));
        result.put("demo_read_ds_0", DataSourceUtil.createDataSource("demo_read_ds_0"));
        result.put("demo_read_ds_1", DataSourceUtil.createDataSource("demo_read_ds_1"));
        return result;
    }
