diff --git a/pom.xml b/pom.xml
index 69d9b1295..211ea4103 100644
--- a/pom.xml
+++ b/pom.xml
@@ -330,12 +330,12 @@
- nexus-snapshots
- https://oss.sonatype.org/content/repositories/snapshots/
+ sctt-dev
+ https://mirrors.tencent.com/repository/maven/ScttDev
- nexus-releases
- https://oss.sonatype.org/service/local/staging/deploy/maven2/
+ sctt-dev
+ https://mirrors.tencent.com/repository/maven/ScttDev
diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigPropertyAutoRefresher.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigPropertyAutoRefresher.java
index 71c13c8e3..f82642a37 100644
--- a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigPropertyAutoRefresher.java
+++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/adapter/PolarisConfigPropertyAutoRefresher.java
@@ -117,7 +117,7 @@ public abstract class PolarisConfigPropertyAutoRefresher implements ApplicationL
try {
if (changedKey.startsWith("logging.level") && changedKey.length() >= 14) {
String loggerName = changedKey.substring(14);
- String newValue = (String) configPropertyChangeInfo.getNewValue();
+ String newValue = (String) configPropertyChangeInfo.getNewValue().toString();
LOGGER.info("[SCT Config] set logging.level loggerName:{}, newValue:{}", loggerName, newValue);
PolarisConfigLoggerContext.setLevel(loggerName, newValue);
}
diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/annotation/PolarisConfigAnnotationProcessor.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/annotation/PolarisConfigAnnotationProcessor.java
index e8e245e51..85e1f2259 100644
--- a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/annotation/PolarisConfigAnnotationProcessor.java
+++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/annotation/PolarisConfigAnnotationProcessor.java
@@ -27,6 +27,7 @@ import com.google.common.base.Preconditions;
import com.google.common.collect.Sets;
import com.tencent.cloud.polaris.config.listener.ConfigChangeEvent;
import com.tencent.cloud.polaris.config.listener.ConfigChangeListener;
+import com.tencent.cloud.polaris.config.listener.SyncConfigChangeListener;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
@@ -90,8 +91,19 @@ public class PolarisConfigAnnotationProcessor implements BeanPostProcessor, Prio
ReflectionUtils.makeAccessible(method);
String[] annotatedInterestedKeys = annotation.interestedKeys();
String[] annotatedInterestedKeyPrefixes = annotation.interestedKeyPrefixes();
+ boolean isAsync = annotation.async();
- ConfigChangeListener configChangeListener = changeEvent -> ReflectionUtils.invokeMethod(method, bean, changeEvent);
+ ConfigChangeListener configChangeListener = new SyncConfigChangeListener() {
+ @Override
+ public void onChange(ConfigChangeEvent changeEvent) {
+ ReflectionUtils.invokeMethod(method, bean, changeEvent);
+ }
+
+ @Override
+ public boolean isAsync() {
+ return isAsync;
+ }
+ };
Set interestedKeys =
annotatedInterestedKeys.length > 0 ? Sets.newHashSet(annotatedInterestedKeys) : null;
diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/annotation/PolarisConfigKVFileChangeListener.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/annotation/PolarisConfigKVFileChangeListener.java
index eba43e819..8517e774a 100644
--- a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/annotation/PolarisConfigKVFileChangeListener.java
+++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/annotation/PolarisConfigKVFileChangeListener.java
@@ -54,4 +54,6 @@ public @interface PolarisConfigKVFileChangeListener {
* @return interested key-prefixed in the listener
*/
String[] interestedKeyPrefixes() default {};
+
+ boolean async() default true;
}
diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/listener/PolarisConfigListenerContext.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/listener/PolarisConfigListenerContext.java
index debefe712..0c2df3149 100644
--- a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/listener/PolarisConfigListenerContext.java
+++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/listener/PolarisConfigListenerContext.java
@@ -72,11 +72,11 @@ public final class PolarisConfigListenerContext {
/**
* All custom interested keys defined in application .
*/
- private static final Map> interestedKeys = Maps.newHashMap();
+ private static final Map> interestedKeys = Maps.newConcurrentMap();
/**
* All custom interested key prefixes defined in application .
*/
- private static final Map> interestedKeyPrefixes = Maps.newHashMap();
+ private static final Map> interestedKeyPrefixes = Maps.newConcurrentMap();
/**
* Cache all latest configuration information for users in the application environment .
*/
@@ -89,7 +89,7 @@ public final class PolarisConfigListenerContext {
* Get or Created new execute server .
* @return execute service instance of {@link ExecutorService}
*/
- private static ExecutorService executor() {
+ public static ExecutorService executor() {
if (EAR.get() == null) {
synchronized (PolarisConfigListenerContext.class) {
int coreThreadSize = Runtime.getRuntime().availableProcessors();
@@ -187,6 +187,15 @@ public final class PolarisConfigListenerContext {
Map modifiedChanges = new HashMap<>(interestedChangedKeys.size());
interestedChangedKeys.parallelStream().forEach(key -> modifiedChanges.put(key, changes.get(key)));
ConfigChangeEvent event = new ConfigChangeEvent(modifiedChanges, interestedChangedKeys);
+
+ if (listener instanceof SyncConfigChangeListener) {
+ SyncConfigChangeListener l = (SyncConfigChangeListener) listener;
+ if (!l.isAsync()) {
+ listener.onChange(event);
+ continue;
+ }
+ }
+
PolarisConfigListenerContext.executor().execute(() -> listener.onChange(event));
}
}
diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/listener/SyncConfigChangeListener.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/listener/SyncConfigChangeListener.java
new file mode 100644
index 000000000..a2bd194b3
--- /dev/null
+++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/listener/SyncConfigChangeListener.java
@@ -0,0 +1,7 @@
+package com.tencent.cloud.polaris.config.listener;
+
+public interface SyncConfigChangeListener extends ConfigChangeListener {
+ default boolean isAsync() {
+ return true;
+ }
+}
diff --git a/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/listener/ConfigChangeListenerTest.java b/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/listener/ConfigChangeListenerTest.java
index 562fe9d1b..7a0bd5b60 100644
--- a/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/listener/ConfigChangeListenerTest.java
+++ b/spring-cloud-starter-tencent-polaris-config/src/test/java/com/tencent/cloud/polaris/config/listener/ConfigChangeListenerTest.java
@@ -18,14 +18,16 @@
package com.tencent.cloud.polaris.config.listener;
-import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.DEFINED_PORT;
-
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+import com.google.common.collect.Sets;
+import com.tencent.cloud.polaris.config.annotation.PolarisConfigKVFileChangeListener;
+import com.tencent.polaris.configuration.api.core.ConfigPropertyChangeInfo;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -36,9 +38,7 @@ import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.test.context.junit.jupiter.SpringExtension;
-import com.google.common.collect.Sets;
-import com.tencent.cloud.polaris.config.annotation.PolarisConfigKVFileChangeListener;
-import com.tencent.polaris.configuration.api.core.ConfigPropertyChangeInfo;
+import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.DEFINED_PORT;
/**
* Integration testing for change listener.
@@ -104,7 +104,7 @@ public class ConfigChangeListenerTest {
@PolarisConfigKVFileChangeListener(interestedKeys = {"timeout"})
public void configChangedListener(ConfigChangeEvent event) {
ConfigPropertyChangeInfo changeInfo = event.getChange("timeout");
- timeout = Integer.parseInt((String)changeInfo.getNewValue());
+ timeout = Integer.parseInt(changeInfo.getNewValue().toString());
changeCnt++;
hits.countDown();
}
@@ -112,7 +112,7 @@ public class ConfigChangeListenerTest {
@PolarisConfigKVFileChangeListener(interestedKeyPrefixes = {"timeout"})
public void configChangedListener2(ConfigChangeEvent event) {
ConfigPropertyChangeInfo changeInfo = event.getChange("timeout");
- timeout = Integer.parseInt((String)changeInfo.getNewValue());
+ timeout = Integer.parseInt(changeInfo.getNewValue().toString());
changeCnt++;
hits.countDown();
}
diff --git a/spring-cloud-tencent-examples/polaris-config-example/src/main/java/com/tencent/cloud/polaris/config/example/PersonConfigChangeListener.java b/spring-cloud-tencent-examples/polaris-config-example/src/main/java/com/tencent/cloud/polaris/config/example/PersonConfigChangeListener.java
index 150e25e20..108b22038 100644
--- a/spring-cloud-tencent-examples/polaris-config-example/src/main/java/com/tencent/cloud/polaris/config/example/PersonConfigChangeListener.java
+++ b/spring-cloud-tencent-examples/polaris-config-example/src/main/java/com/tencent/cloud/polaris/config/example/PersonConfigChangeListener.java
@@ -42,7 +42,25 @@ public final class PersonConfigChangeListener {
Set changedKeys = event.changedKeys();
for (String changedKey : changedKeys) {
- System.out.printf("%s = %s \n", changedKey, event.getChange(changedKey));
+ System.out.printf("%s = %s , ThreadId: %s\n", changedKey, event.getChange(changedKey), Thread.currentThread().getId());
+ }
+ }
+
+ @PolarisConfigKVFileChangeListener(interestedKeyPrefixes = "teacher", async = false)
+ public void syncListen(ConfigChangeEvent event) {
+ Set changedKeys = event.changedKeys();
+
+ for (String changedKey : changedKeys) {
+ System.out.printf("%s = %s , ThreadId: %s\n", changedKey, event.getChange(changedKey), Thread.currentThread().getId());
+ }
+ }
+
+ @PolarisConfigKVFileChangeListener(interestedKeyPrefixes = "teacher", async = false)
+ public void syncListen2(ConfigChangeEvent event) {
+ Set changedKeys = event.changedKeys();
+
+ for (String changedKey : changedKeys) {
+ System.out.printf("%s = %s , ThreadId: %s\n", changedKey, event.getChange(changedKey), Thread.currentThread().getId());
}
}
}