From 33570dad40e4b8d4593faa5c22a6be6f37b3504f Mon Sep 17 00:00:00 2001 From: Eric Zhao Date: Thu, 4 Feb 2021 14:36:11 +0800 Subject: [PATCH] Polish SpiLoader and SentinelConfig Signed-off-by: Eric Zhao --- .../csp/sentinel/config/SentinelConfig.java | 1 + .../alibaba/csp/sentinel/spi/SpiLoader.java | 33 ++++++++++--------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java index ea9a0f02..9ef544e4 100755 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/config/SentinelConfig.java @@ -167,6 +167,7 @@ public final class SentinelConfig { /** * Get the metric log flush interval in second * @return the metric log flush interval in second + * @since 1.8.1 */ public static long metricLogFlushIntervalSec() { String flushIntervalStr = SentinelConfig.getConfig(METRIC_FLUSH_INTERVAL); diff --git a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoader.java b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoader.java index eb6d9fc5..4b78fb10 100644 --- a/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoader.java +++ b/sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoader.java @@ -23,12 +23,13 @@ import com.alibaba.csp.sentinel.util.StringUtil; import java.io.*; import java.lang.reflect.Modifier; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; /** - * A simple SPI loading facility. + * A simple SPI loading facility (refactored since 1.8.1). * *

SPI is short for Service Provider Interface.

* @@ -54,13 +55,14 @@ import java.util.concurrent.atomic.AtomicBoolean; * 3. The comment line character is #, all characters following it are ignored. *

* - *

- * Provide common functions, such as: - * Load all Provider instance unsorted/sorted list. - * Load highest/lowest order priority instance. - * Load first-found or default instance. - * Load instance by aliasname or provider class. - *

+ * + *

{@code SpiLoader} provide common functions, such as:

+ * * * @author Eric Zhao * @author cdfive @@ -92,7 +94,7 @@ public final class SpiLoader { // Cache the singleton instance of Provider, key: classname of Provider, value: Provider instance private final ConcurrentHashMap singletonMap = new ConcurrentHashMap<>(); - // Whether this SpiLoader has beend loaded, that is, loaded the Provider configuration file + // Whether this SpiLoader has been loaded, that is, loaded the Provider configuration file private final AtomicBoolean loaded = new AtomicBoolean(false); // Default provider class @@ -327,11 +329,11 @@ public final class SpiLoader { try { urls = classLoader.getResources(fullFileName); } catch (IOException e) { - fail("Error locating SPI configuration file,filename=" + fullFileName + ",classloader=" + classLoader, e); + fail("Error locating SPI configuration file, filename=" + fullFileName + ", classloader=" + classLoader, e); } if (urls == null || !urls.hasMoreElements()) { - RecordLog.warn("No SPI configuration file,filename=" + fullFileName + ",classloader=" + classLoader); + RecordLog.warn("No SPI configuration file, filename=" + fullFileName + ", classloader=" + classLoader); return; } @@ -342,7 +344,7 @@ public final class SpiLoader { BufferedReader br = null; try { in = url.openStream(); - br = new BufferedReader(new InputStreamReader(in, "utf-8")); + br = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8)); String line; while ((line = br.readLine()) != null) { if (StringUtil.isBlank(line)) { @@ -378,19 +380,20 @@ public final class SpiLoader { String aliasName = spi == null || "".equals(spi.value()) ? clazz.getName() : spi.value(); if (classMap.containsKey(aliasName)) { Class existClass = classMap.get(aliasName); - fail("Found repeat aliasname for " + clazz.getName() + " and " + fail("Found repeat alias name for " + clazz.getName() + " and " + existClass.getName() + ",SPI configuration file=" + fullFileName); } classMap.put(aliasName, clazz); if (spi != null && spi.isDefault()) { if (defaultClass != null) { - fail("Found more than one default Provider,SPI configuration file=" + fullFileName); + fail("Found more than one default Provider, SPI configuration file=" + fullFileName); } defaultClass = clazz; } - RecordLog.info("[SpiLoader]Found SPI,Service={},Provider={},aliasname={},isSingleton={},isDefault={},order={}", + RecordLog.info("[SpiLoader] Found SPI implementation for SPI {}, provider={}, aliasName={}" + + ", isSingleton={}, isDefault={}, order={}", service.getName(), line, aliasName , spi == null ? true : spi.isSingleton() , spi == null ? false : spi.isDefault()