Commit f25de54a authored by haocao's avatar haocao
Browse files

Refactor sharding jdbc yaml configuration.

parent 4c62c5b1
Loading
Loading
Loading
Loading
+0 −53
Original line number Diff line number Diff line
/*
 * Copyright 1999-2015 dangdang.com.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * </p>
 */

package io.shardingjdbc.core.yaml.masterslave;

import io.shardingjdbc.core.api.config.MasterSlaveRuleConfiguration;
import io.shardingjdbc.core.rule.MasterSlaveRule;
import lombok.RequiredArgsConstructor;

import javax.sql.DataSource;
import java.util.Map;

/**
 * Master-slave rule builder from yaml.
 *
 * @author caohao
 */
@RequiredArgsConstructor
public final class MasterSlaveRuleBuilder {
    
    private final Map<String, DataSource> dataSourceMap;
    
    private final YamlMasterSlaveConfig yamlMasterSlaveConfig;
    
    /**
     * Build master-slave rule from yaml.
     * 
     * @return master-slave rule from yaml
     */
    public MasterSlaveRule build() {
        MasterSlaveRuleConfiguration result = new MasterSlaveRuleConfiguration();
        result.setName(yamlMasterSlaveConfig.getName());
        result.setMasterDataSourceName(yamlMasterSlaveConfig.getMasterDataSourceName());
        result.setSlaveDataSourceNames(yamlMasterSlaveConfig.getSlaveDataSourceNames());
        result.setLoadBalanceAlgorithmType(yamlMasterSlaveConfig.getLoadBalanceAlgorithmType());
        result.setLoadBalanceAlgorithmClassName(yamlMasterSlaveConfig.getLoadBalanceAlgorithmClassName());
        return result.build(dataSourceMap.isEmpty() ? yamlMasterSlaveConfig.getDataSources() : dataSourceMap);
    }
}
+19 −1
Original line number Diff line number Diff line
@@ -18,10 +18,13 @@
package io.shardingjdbc.core.yaml.masterslave;

import io.shardingjdbc.core.api.algorithm.masterslave.MasterSlaveLoadBalanceAlgorithmType;
import io.shardingjdbc.core.api.config.MasterSlaveRuleConfiguration;
import io.shardingjdbc.core.rule.MasterSlaveRule;
import lombok.Getter;
import lombok.Setter;

import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -35,7 +38,7 @@ import java.util.Properties;
 */
@Getter
@Setter
public class YamlMasterSlaveConfig {
public class YamMasterSlaveRuleConfiguration {
    
    private Map<String, DataSource> dataSources = new HashMap<>();
    
@@ -50,4 +53,19 @@ public class YamlMasterSlaveConfig {
    private String loadBalanceAlgorithmClassName;
    
    private Properties props = new Properties();
    
    /**
     * Build master-slave rule from yaml.
     *
     * @return master-slave rule from yaml
     */
    public MasterSlaveRule build(final Map<String, DataSource> dataSourceMap) throws SQLException {
        MasterSlaveRuleConfiguration result = new MasterSlaveRuleConfiguration();
        result.setName(name);
        result.setMasterDataSourceName(masterDataSourceName);
        result.setSlaveDataSourceNames(slaveDataSourceNames);
        result.setLoadBalanceAlgorithmType(loadBalanceAlgorithmType);
        result.setLoadBalanceAlgorithmClassName(loadBalanceAlgorithmClassName);
        return result.build(dataSourceMap.isEmpty() ? dataSources : dataSourceMap);
    }
}
+8 −8
Original line number Diff line number Diff line
@@ -39,31 +39,31 @@ import java.util.Map;
public class YamlMasterSlaveDataSource extends MasterSlaveDataSource {
    
    public YamlMasterSlaveDataSource(final File yamlFile) throws IOException, SQLException {
        super(new MasterSlaveRuleBuilder(Collections.<String, DataSource>emptyMap(), unmarshal(yamlFile)).build());
        super(unmarshal(yamlFile).build(Collections.<String, DataSource>emptyMap()));
    }
    
    public YamlMasterSlaveDataSource(final Map<String, DataSource> dataSourceMap, final File yamlFile) throws IOException, SQLException {
        super(new MasterSlaveRuleBuilder(dataSourceMap, unmarshal(yamlFile)).build());
        super(unmarshal(yamlFile).build(dataSourceMap));
    }
    
    public YamlMasterSlaveDataSource(final byte[] yamlByteArray) throws IOException, SQLException {
        super(new MasterSlaveRuleBuilder(Collections.<String, DataSource>emptyMap(), unmarshal(yamlByteArray)).build());
        super(unmarshal(yamlByteArray).build(Collections.<String, DataSource>emptyMap()));
    }
    
    public YamlMasterSlaveDataSource(final Map<String, DataSource> dataSourceMap, final byte[] yamlByteArray) throws IOException, SQLException {
        super(new MasterSlaveRuleBuilder(dataSourceMap, unmarshal(yamlByteArray)).build());
        super(unmarshal(yamlByteArray).build(dataSourceMap));
    }
    
    private static YamlMasterSlaveConfig unmarshal(final File yamlFile) throws IOException {
    private static YamMasterSlaveRuleConfiguration unmarshal(final File yamlFile) throws IOException {
        try (
                FileInputStream fileInputStream = new FileInputStream(yamlFile);
                InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8")
        ) {
            return new Yaml(new Constructor(YamlMasterSlaveConfig.class)).loadAs(inputStreamReader, YamlMasterSlaveConfig.class);
            return new Yaml(new Constructor(YamMasterSlaveRuleConfiguration.class)).loadAs(inputStreamReader, YamMasterSlaveRuleConfiguration.class);
        }
    }
    
    private static YamlMasterSlaveConfig unmarshal(final byte[] yamlByteArray) throws IOException {
        return new Yaml(new Constructor(YamlMasterSlaveConfig.class)).loadAs(new ByteArrayInputStream(yamlByteArray), YamlMasterSlaveConfig.class);
    private static YamMasterSlaveRuleConfiguration unmarshal(final byte[] yamlByteArray) throws IOException {
        return new Yaml(new Constructor(YamMasterSlaveRuleConfiguration.class)).loadAs(new ByteArrayInputStream(yamlByteArray), YamMasterSlaveRuleConfiguration.class);
    }
}
+4 −4
Original line number Diff line number Diff line
@@ -54,16 +54,16 @@ public class YamlShardingDataSource extends ShardingDataSource {
        super(unmarshal(yamlByteArray).build(dataSourceMap), unmarshal(yamlByteArray).getProps());
    }
    
    private static YamlShardingConfiguration unmarshal(final File yamlFile) throws IOException {
    private static YamlShardingRuleConfiguration unmarshal(final File yamlFile) throws IOException {
        try (
                FileInputStream fileInputStream = new FileInputStream(yamlFile);
                InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8")
        ) {
            return new Yaml(new Constructor(YamlShardingConfiguration.class)).loadAs(inputStreamReader, YamlShardingConfiguration.class);
            return new Yaml(new Constructor(YamlShardingRuleConfiguration.class)).loadAs(inputStreamReader, YamlShardingRuleConfiguration.class);
        }
    }
    
    private static YamlShardingConfiguration unmarshal(final byte[] yamlByteArray) throws IOException {
        return new Yaml(new Constructor(YamlShardingConfiguration.class)).loadAs(new ByteArrayInputStream(yamlByteArray), YamlShardingConfiguration.class);
    private static YamlShardingRuleConfiguration unmarshal(final byte[] yamlByteArray) throws IOException {
        return new Yaml(new Constructor(YamlShardingRuleConfiguration.class)).loadAs(new ByteArrayInputStream(yamlByteArray), YamlShardingRuleConfiguration.class);
    }
}
+4 −4
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ package io.shardingjdbc.core.yaml.sharding;
import io.shardingjdbc.core.api.config.MasterSlaveRuleConfiguration;
import io.shardingjdbc.core.api.config.ShardingRuleConfiguration;
import io.shardingjdbc.core.rule.ShardingRule;
import io.shardingjdbc.core.yaml.masterslave.YamlMasterSlaveConfig;
import io.shardingjdbc.core.yaml.masterslave.YamMasterSlaveRuleConfiguration;
import lombok.Getter;
import lombok.Setter;

@@ -41,7 +41,7 @@ import java.util.Properties;
 */
@Getter
@Setter
public class YamlShardingConfiguration {
public class YamlShardingRuleConfiguration {
    
    private Map<String, DataSource> dataSources = new HashMap<>();
    
@@ -57,7 +57,7 @@ public class YamlShardingConfiguration {
    
    private String defaultKeyGeneratorClass;
    
    private Map<String, YamlMasterSlaveConfig> masterSlaveRules = new HashMap<>();
    private Map<String, YamMasterSlaveRuleConfiguration> masterSlaveRules = new HashMap<>();
    
    private Properties props = new Properties();
    
@@ -85,7 +85,7 @@ public class YamlShardingConfiguration {
        }
        result.setDefaultKeyGeneratorClass(defaultKeyGeneratorClass);
        Collection<MasterSlaveRuleConfiguration> masterSlaveRuleConfigs = new LinkedList<>();
        for (Map.Entry<String, YamlMasterSlaveConfig> each : masterSlaveRules.entrySet()) {
        for (Map.Entry<String, YamMasterSlaveRuleConfiguration> each : masterSlaveRules.entrySet()) {
            MasterSlaveRuleConfiguration config = new MasterSlaveRuleConfiguration();
            config.setName(each.getKey());
            config.setMasterDataSourceName(each.getValue().getMasterDataSourceName());