From 772555b0e0200b5bb9e68c9ebc08f4d44bd7ec0c Mon Sep 17 00:00:00 2001 From: Fishtail <49390359+fuyuwei01@users.noreply.github.com> Date: Wed, 16 Jul 2025 16:06:00 +0800 Subject: [PATCH] fix: fix ConfigChangeListener and unit test (#1656) --- CHANGELOG.md | 1 + .../listener/SyncConfigChangeListener.java | 2 +- .../listener/ConfigChangeListenerTest.java | 56 +++++++++++++------ 3 files changed, 40 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70eddaad7..7cbe360c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,3 +5,4 @@ - [feat: support tsf gw.](https://github.com/Tencent/spring-cloud-tencent/pull/1645) - [feat:upgrade to 2023.0.6.](https://github.com/Tencent/spring-cloud-tencent/pull/1646) - [feat:Add log output and test scenarios in the FaultToleranceService file.](https://github.com/Tencent/spring-cloud-tencent/pull/1652) +- [fix: fix ConfigChangeListener and unit test](https://github.com/Tencent/spring-cloud-tencent/pull/1656) 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 index c61f142be..7356c3f37 100644 --- 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 @@ -18,6 +18,6 @@ package com.tencent.cloud.polaris.config.listener; public interface SyncConfigChangeListener extends ConfigChangeListener { default boolean isAsync() { - return true; + return false; } } 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 b98d72628..6898bb331 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 @@ -22,6 +22,7 @@ import java.util.HashSet; import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; import com.tencent.cloud.polaris.config.adapter.PolarisConfigFileLocator; import com.tencent.cloud.polaris.config.annotation.PolarisConfigKVFileChangeListener; @@ -52,7 +53,7 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen @ExtendWith(SpringExtension.class) @SpringBootTest(webEnvironment = DEFINED_PORT, classes = ConfigChangeListenerTest.TestApplication.class, properties = {"server.port=48081", "spring.config.location = classpath:application-test.yml", - "spring.cloud.polaris.config.connect-remote-server=true", "spring.cloud.polaris.config.check-address=false" + "spring.cloud.polaris.config.connect-remote-server=true", "spring.cloud.polaris.config.check-address=false", "spring.cloud.polaris.config.internal-enabled=false" }) public class ConfigChangeListenerTest { @@ -81,21 +82,20 @@ public class ConfigChangeListenerTest { public void test() throws InterruptedException { //before change Assertions.assertThat(testConfig.getTimeout()).isEqualTo(1000); - - //submit change event - System.setProperty("timeout", "2000"); Set ketSet = new HashSet<>(); ketSet.add("timeout"); - EnvironmentChangeEvent event = new EnvironmentChangeEvent(applicationContext, ketSet); - - applicationEventPublisher.publishEvent(event); - - //after change - boolean ret = hits.await(2, TimeUnit.SECONDS); - Assertions.assertThat(ret).isEqualTo(true); - - Assertions.assertThat(testConfig.getChangeCnt()).isEqualTo(2); - Assertions.assertThat(testConfig.getTimeout()).isEqualTo(2000); + for (int i = 2; i <= 1000; i++) { + //submit change event + System.setProperty("timeout", String.valueOf(i * 1000)); + EnvironmentChangeEvent event = new EnvironmentChangeEvent(applicationContext, ketSet); + applicationEventPublisher.publishEvent(event); + //after change + boolean ret = hits.await(2, TimeUnit.SECONDS); + Assertions.assertThat(ret).isEqualTo(true); + Assertions.assertThat(testConfig.getChangeCnt()).isEqualTo(2 * i - 2); + Assertions.assertThat(testConfig.getSyncChangeCnt()).isEqualTo(2 * i - 2); + Assertions.assertThat(testConfig.getTimeout()).isEqualTo(i * 1000); + } } @SpringBootApplication @@ -107,7 +107,9 @@ public class ConfigChangeListenerTest { @Value("${timeout:1000}") private int timeout; - private int changeCnt; + private AtomicInteger changeCnt = new AtomicInteger(0); + + private int syncChangeCnt; public int getTimeout() { return timeout; @@ -118,14 +120,18 @@ public class ConfigChangeListenerTest { } public int getChangeCnt() { - return changeCnt; + return changeCnt.get(); + } + + public int getSyncChangeCnt() { + return syncChangeCnt; } @PolarisConfigKVFileChangeListener(interestedKeys = {"timeout"}) public void configChangedListener(ConfigChangeEvent event) { ConfigPropertyChangeInfo changeInfo = event.getChange("timeout"); timeout = Integer.parseInt(changeInfo.getNewValue().toString()); - changeCnt++; + changeCnt.incrementAndGet(); hits.countDown(); } @@ -133,9 +139,23 @@ public class ConfigChangeListenerTest { public void configChangedListener2(ConfigChangeEvent event) { ConfigPropertyChangeInfo changeInfo = event.getChange("timeout"); timeout = Integer.parseInt(changeInfo.getNewValue().toString()); - changeCnt++; + changeCnt.incrementAndGet(); hits.countDown(); } + + @PolarisConfigKVFileChangeListener(interestedKeys = {"timeout"}, async = false) + public void syncConfigChangedListener(ConfigChangeEvent event) { + ConfigPropertyChangeInfo changeInfo = event.getChange("timeout"); + timeout = Integer.parseInt(changeInfo.getNewValue().toString()); + syncChangeCnt++; + } + + @PolarisConfigKVFileChangeListener(interestedKeyPrefixes = {"timeout"}, async = false) + public void syncConfigChangedListener2(ConfigChangeEvent event) { + ConfigPropertyChangeInfo changeInfo = event.getChange("timeout"); + timeout = Integer.parseInt(changeInfo.getNewValue().toString()); + syncChangeCnt++; + } } @Component