From d0fde952cf667126ad44149cf3a32f951867b401 Mon Sep 17 00:00:00 2001
From: Haotian Zhang <928016560@qq.com>
Date: Mon, 9 Oct 2023 21:39:42 +0800
Subject: [PATCH] fix:fix system env variable read bug.

---
 changes/changes-1.12.0.md                     |  1 +
 .../PolarisConfigChangeEventListener.java     | 20 +++++++++++++++++--
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/changes/changes-1.12.0.md b/changes/changes-1.12.0.md
index 7c2ab4c03..ed5402897 100644
--- a/changes/changes-1.12.0.md
+++ b/changes/changes-1.12.0.md
@@ -28,3 +28,4 @@
 - [fix:upgrade spring version.](https://github.com/Tencent/spring-cloud-tencent/pull/1086)
 - [fix:Update README-zh.md](https://github.com/Tencent/spring-cloud-tencent/pull/1090).
 - [feature: support Polaris configuration center extension plugin interface and support dynamic modification of log levels.](https://github.com/Tencent/spring-cloud-tencent/pull/1103).
+- fix:fix system env variable read bug.
diff --git a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/listener/PolarisConfigChangeEventListener.java b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/listener/PolarisConfigChangeEventListener.java
index e77b59014..e05a939d8 100644
--- a/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/listener/PolarisConfigChangeEventListener.java
+++ b/spring-cloud-starter-tencent-polaris-config/src/main/java/com/tencent/cloud/polaris/config/listener/PolarisConfigChangeEventListener.java
@@ -26,6 +26,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import com.google.common.collect.Maps;
 import com.tencent.cloud.polaris.config.spring.event.ConfigChangeSpringEvent;
 import com.tencent.polaris.configuration.api.core.ConfigPropertyChangeInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import org.springframework.boot.context.event.ApplicationStartedEvent;
 import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
@@ -37,6 +39,7 @@ import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.core.env.ConfigurableEnvironment;
 import org.springframework.core.env.Environment;
 import org.springframework.core.env.MutablePropertySources;
+import org.springframework.core.env.StandardEnvironment;
 import org.springframework.lang.NonNull;
 
 import static com.tencent.cloud.polaris.config.listener.PolarisConfigListenerContext.fireConfigChange;
@@ -50,6 +53,8 @@ import static com.tencent.cloud.polaris.config.listener.PolarisConfigListenerCon
  */
 public final class PolarisConfigChangeEventListener implements ApplicationListener<ApplicationEvent>, ApplicationEventPublisherAware {
 
+	private static final Logger LOG = LoggerFactory.getLogger(PolarisConfigChangeEventListener.class);
+
 	private static final AtomicBoolean started = new AtomicBoolean();
 
 	private ApplicationEventPublisher eventPublisher;
@@ -95,12 +100,23 @@ public final class PolarisConfigChangeEventListener implements ApplicationListen
 		Map<String, Object> ret = Maps.newHashMap();
 		MutablePropertySources sources = environment.getPropertySources();
 		sources.iterator().forEachRemaining(propertySource -> {
+			// Don't read system env variable.
+			if (StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME.equals(propertySource.getName())) {
+				return;
+			}
+
 			Object o = propertySource.getSource();
 			if (o instanceof Map) {
 				for (Map.Entry<String, Object> entry : ((Map<String, Object>) o).entrySet()) {
 					String key = entry.getKey();
-					String value = environment.getProperty(key);
-					ret.put(key, value);
+					try {
+						String value = environment.getProperty(key);
+						ret.put(key, value);
+					}
+					catch (Exception e) {
+						LOG.warn("Read property from {} with key {} failed.", propertySource.getName(), key, e);
+					}
+
 				}
 			}
 			else if (o instanceof Collection) {