You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2022/04/28 14:21:53 UTC

[shardingsphere] branch master updated: Refactor ReadwriteSplittingDataSourceProcessorFactory (#17183)

This is an automated email from the ASF dual-hosted git repository.

panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 6da3c5362ea Refactor ReadwriteSplittingDataSourceProcessorFactory (#17183)
6da3c5362ea is described below

commit 6da3c5362ea3b98cce256bf30e3be22d3e712131
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Thu Apr 28 22:21:44 2022 +0800

    Refactor ReadwriteSplittingDataSourceProcessorFactory (#17183)
---
 .../rule/ReadwriteSplittingDataSourceRule.java       |  9 ++++++---
 ...ReadwriteSplittingDataSourceProcessorFactory.java | 20 +++++++++++++++++++-
 ...DynamicReadwriteSplittingDataSourceProcessor.java |  9 ++-------
 .../StaticReadwriteSplittingDataSourceProcessor.java | 13 ++-----------
 4 files changed, 29 insertions(+), 22 deletions(-)

diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
index 953c9641ca4..f7c9793377c 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
@@ -34,6 +34,7 @@ import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.stream.Collectors;
 
 /**
@@ -102,17 +103,19 @@ public final class ReadwriteSplittingDataSourceRule {
     /**
      * Get data sources.
      *
-     * @param removeDisabled Whether to remove the disabled resource
+     * @param removeDisabled whether to remove the disabled resource
      * @return data sources
      */
     public Map<String, String> getDataSources(final boolean removeDisabled) {
         Map<String, String> result = new LinkedHashMap<>();
-        dataSourceProcessor.getDataSources().forEach((key, value) -> {
+        for (Entry<String, String> entry : dataSourceProcessor.getDataSources().entrySet()) {
+            String key = entry.getKey();
+            String value = entry.getValue();
             if (ExportableConstants.REPLICA_DATA_SOURCE_NAMES.equals(key) && removeDisabled) {
                 value = removeDisabledDataSources(value);
             }
             result.put(key, value);
-        });
+        }
         return result;
     }
     
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/type/ReadwriteSplittingDataSourceProcessorFactory.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/type/ReadwriteSplittingDataSourceProcessorFactory.java
index c1265986b54..df8d765448b 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/type/ReadwriteSplittingDataSourceProcessorFactory.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/type/ReadwriteSplittingDataSourceProcessorFactory.java
@@ -17,11 +17,15 @@
 
 package org.apache.shardingsphere.readwritesplitting.type;
 
+import com.google.common.base.Preconditions;
+import com.google.common.base.Splitter;
+import com.google.common.base.Strings;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.readwritesplitting.type.impl.DynamicReadwriteSplittingDataSourceProcessor;
 import org.apache.shardingsphere.readwritesplitting.type.impl.StaticReadwriteSplittingDataSourceProcessor;
 
+import java.util.List;
 import java.util.Properties;
 
 /**
@@ -38,6 +42,20 @@ public final class ReadwriteSplittingDataSourceProcessorFactory {
      * @return readwrite splitting data source processor
      */
     public static ReadwriteSplittingDataSourceProcessor newInstance(final String type, final Properties props) {
-        return "STATIC".equalsIgnoreCase(type) ? new StaticReadwriteSplittingDataSourceProcessor(props) : new DynamicReadwriteSplittingDataSourceProcessor(props);
+        return "STATIC".equalsIgnoreCase(type) ? createStaticDataSourceProcessor(props) : createDynamicDataSourceProcessor(props);
+    }
+    
+    private static StaticReadwriteSplittingDataSourceProcessor createStaticDataSourceProcessor(final Properties props) {
+        String writeDataSourceName = props.getProperty("write-data-source-name");
+        Preconditions.checkArgument(!Strings.isNullOrEmpty(writeDataSourceName), "Write data source name is required.");
+        Preconditions.checkArgument(!Strings.isNullOrEmpty(props.getProperty("read-data-source-names")), "Read data source names are required.");
+        List<String> readDataSourceNames = Splitter.on(",").trimResults().splitToList(props.getProperty("read-data-source-names"));
+        return new StaticReadwriteSplittingDataSourceProcessor(writeDataSourceName, readDataSourceNames);
+    }
+    
+    private static DynamicReadwriteSplittingDataSourceProcessor createDynamicDataSourceProcessor(final Properties props) {
+        String autoAwareDataSourceName = props.getProperty("auto-aware-data-source-name");
+        Preconditions.checkArgument(!Strings.isNullOrEmpty(autoAwareDataSourceName), "Auto aware data source name is required.");
+        return new DynamicReadwriteSplittingDataSourceProcessor(autoAwareDataSourceName);
     }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/type/impl/DynamicReadwriteSplittingDataSourceProcessor.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/type/impl/DynamicReadwriteSplittingDataSourceProcessor.java
index 740a2e8923e..62fe657065e 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/type/impl/DynamicReadwriteSplittingDataSourceProcessor.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/type/impl/DynamicReadwriteSplittingDataSourceProcessor.java
@@ -17,9 +17,9 @@
 
 package org.apache.shardingsphere.readwritesplitting.type.impl;
 
-import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.aware.DataSourceNameAware;
 import org.apache.shardingsphere.infra.aware.DataSourceNameAwareFactory;
 import org.apache.shardingsphere.infra.distsql.constant.ExportableConstants;
@@ -33,21 +33,16 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Properties;
 
 /**
  * Dynamic readwrite splitting data source processor.
  */
+@RequiredArgsConstructor
 @Getter
 public final class DynamicReadwriteSplittingDataSourceProcessor implements ReadwriteSplittingDataSourceProcessor {
     
     private final String autoAwareDataSourceName;
     
-    public DynamicReadwriteSplittingDataSourceProcessor(final Properties props) {
-        autoAwareDataSourceName = props.getProperty("auto-aware-data-source-name");
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(autoAwareDataSourceName), "auto aware data source name is required.");
-    }
-    
     @Override
     public String getWriteDataSource() {
         Optional<DataSourceNameAware> dataSourceNameAware = DataSourceNameAwareFactory.newInstance();
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/type/impl/StaticReadwriteSplittingDataSourceProcessor.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/type/impl/StaticReadwriteSplittingDataSourceProcessor.java
index c15d1cca418..69142ef13b7 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/type/impl/StaticReadwriteSplittingDataSourceProcessor.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/type/impl/StaticReadwriteSplittingDataSourceProcessor.java
@@ -18,9 +18,7 @@
 package org.apache.shardingsphere.readwritesplitting.type.impl;
 
 import com.google.common.base.Joiner;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Splitter;
-import com.google.common.base.Strings;
+import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.distsql.constant.ExportableConstants;
 import org.apache.shardingsphere.readwritesplitting.type.ReadwriteSplittingDataSourceProcessor;
 
@@ -29,24 +27,17 @@ import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Properties;
 
 /**
  * Static readwrite splitting data source processor.
  */
+@RequiredArgsConstructor
 public final class StaticReadwriteSplittingDataSourceProcessor implements ReadwriteSplittingDataSourceProcessor {
     
     private final String writeDataSourceName;
     
     private final List<String> readDataSourceNames;
     
-    public StaticReadwriteSplittingDataSourceProcessor(final Properties props) {
-        writeDataSourceName = props.getProperty("write-data-source-name");
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(writeDataSourceName), "Write data source name is required.");
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(props.getProperty("read-data-source-names")), "Read data source names are required.");
-        readDataSourceNames = Splitter.on(",").trimResults().splitToList(props.getProperty("read-data-source-names"));
-    }
-    
     @Override
     public String getWriteDataSource() {
         return writeDataSourceName;