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;