From f2a9e60a9e90ba3d7e9ac46db9c563742541d022 Mon Sep 17 00:00:00 2001 From: pengbingting Date: Wed, 19 Dec 2018 21:13:26 +0800 Subject: [PATCH] Prevent non-refreshing configurations from retrieving the latest configuration values when refreshing --- .../alibaba/nacos/NacosConfigProperties.java | 27 ++++++++++--------- .../client/NacosPropertySourceLocator.java | 7 +++++ .../nacos/refresh/NacosContextRefresher.java | 1 + 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java index 19d5721f..7483a7fc 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java @@ -16,24 +16,21 @@ package org.springframework.cloud.alibaba.nacos; -import static com.alibaba.nacos.api.PropertyKeyConst.*; +import com.alibaba.nacos.api.NacosFactory; +import com.alibaba.nacos.api.config.ConfigService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.core.env.Environment; +import javax.annotation.PostConstruct; import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.Properties; -import javax.annotation.PostConstruct; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.core.env.Environment; - -import com.alibaba.nacos.api.NacosFactory; -import com.alibaba.nacos.api.config.ConfigService; +import static com.alibaba.nacos.api.PropertyKeyConst.*; /** * nacos properties @@ -110,7 +107,6 @@ public class NacosConfigProperties { */ private String clusterName; - @Value("${spring.application.name}") private String name; private String[] activeProfiles; @@ -271,6 +267,10 @@ public class NacosConfigProperties { this.extConfig = extConfig; } + public void setActiveProfiles(String[] activeProfiles) { + this.activeProfiles = activeProfiles; + } + public static class Config { /** * the data id of extended configuration @@ -348,4 +348,5 @@ public class NacosConfigProperties { return null; } } + } diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceLocator.java b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceLocator.java index fdaca43c..aa9450cc 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceLocator.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceLocator.java @@ -78,6 +78,13 @@ public class NacosPropertySourceLocator implements PropertySourceLocator { dataIdPrefix = name; } + if (StringUtils.isEmpty(dataIdPrefix)) { + dataIdPrefix = env.getProperty("spring.application.name"); + } + + List profiles = Arrays.asList(env.getActiveProfiles()); + nacosConfigProperties.setActiveProfiles(profiles.toArray(new String[0])); + String fileExtension = nacosConfigProperties.getFileExtension(); CompositePropertySource composite = new CompositePropertySource( diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/refresh/NacosContextRefresher.java b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/refresh/NacosContextRefresher.java index 2646c8fd..c726f948 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/refresh/NacosContextRefresher.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/refresh/NacosContextRefresher.java @@ -108,6 +108,7 @@ public class NacosContextRefresher Listener listener = listenerMap.computeIfAbsent(dataId, i -> new Listener() { @Override public void receiveConfigInfo(String configInfo) { + loadCount.incrementAndGet(); String md5 = ""; if (!StringUtils.isEmpty(configInfo)) { try {