diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/example/BeanAutoRefreshConfigExample.java b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/example/BeanAutoRefreshConfigExample.java index 7c8eacf0c..53999d483 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/example/BeanAutoRefreshConfigExample.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/example/BeanAutoRefreshConfigExample.java @@ -45,6 +45,7 @@ public class BeanAutoRefreshConfigExample { result.put("prefix", nacosConfigInfo.getPrefix()); result.put("group", nacosConfigInfo.getGroup()); result.put("namespace", nacosConfigInfo.getNamespace()); + result.put("extendKey", nacosConfigInfo.getExtendKey()); return result; } } diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/model/NacosConfigInfo.java b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/model/NacosConfigInfo.java index 7df847afa..e15b1542c 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/model/NacosConfigInfo.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/model/NacosConfigInfo.java @@ -46,6 +46,8 @@ public class NacosConfigInfo { */ private String namespace; + private String extendKey; + public String getServerAddr() { return serverAddr; } @@ -77,4 +79,12 @@ public class NacosConfigInfo { public void setNamespace(String namespace) { this.namespace = namespace; } + + public String getExtendKey() { + return extendKey; + } + + public void setExtendKey(String extendKey) { + this.extendKey = extendKey; + } } diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/resources/application.yaml b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/resources/application.yaml index 51e8b4fbe..a811973ce 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/resources/application.yaml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/resources/application.yaml @@ -10,6 +10,7 @@ spring: serverAddr: 127.0.0.1:8848 username: 'nacos' password: 'nacos' + extendKey: value config: import: - nacos:nacos-config-example.properties?refresh=true diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigManager.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigManager.java index 3a546002d..d7f53aa0e 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigManager.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigManager.java @@ -38,9 +38,6 @@ public class NacosConfigManager { public NacosConfigManager(NacosConfigProperties nacosConfigProperties) { this.nacosConfigProperties = nacosConfigProperties; - // Compatible with older code in NacosConfigProperties,It will be deleted in the - // future. - createConfigService(nacosConfigProperties); } /** diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java index ad6d69bb8..f4584301e 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java @@ -102,90 +102,50 @@ public class NacosConfigProperties { @Autowired @JsonIgnore private Environment environment; - - @PostConstruct - public void init() { - this.overrideFromEnv(); - } - - private void overrideFromEnv() { - if (environment == null) { - return; - } - if (StringUtils.isEmpty(this.getServerAddr())) { - String serverAddr = environment - .resolvePlaceholders("${spring.cloud.nacos.config.server-addr:}"); - if (StringUtils.isEmpty(serverAddr)) { - serverAddr = environment.resolvePlaceholders( - "${spring.cloud.nacos.server-addr:127.0.0.1:8848}"); - } - this.setServerAddr(serverAddr); - } - if (StringUtils.isEmpty(this.getUsername())) { - this.setUsername( - environment.resolvePlaceholders("${spring.cloud.nacos.username:}")); - } - if (StringUtils.isEmpty(this.getPassword())) { - this.setPassword( - environment.resolvePlaceholders("${spring.cloud.nacos.password:}")); - } - } - /** * nacos config server address. */ private String serverAddr; - /** * the nacos authentication username. */ private String username; - /** * the nacos authentication password. */ private String password; - /** * encode for nacos config content. */ private String encode; - /** * nacos config group, group is config data meta info. */ private String group = "DEFAULT_GROUP"; - /** * nacos config dataId prefix. */ private String prefix; - /** * the suffix of nacos config dataId, also the file extension of config content. */ private String fileExtension = "properties"; - /** * timeout for get config from nacos. */ private int timeout = 3000; - /** * nacos maximum number of tolerable server reconnection errors. */ private String maxRetry; - /** * nacos get config long poll timeout. */ private String configLongPollTimeout; - /** * nacos get config failure retry time. */ private String configRetryTime; - /** * If you want to pull it yourself when the program starts to get the configuration * for the first time, and the registered Listener is used for future configuration @@ -194,65 +154,82 @@ public class NacosConfigProperties { * recommend that you use {@link ConfigService#getConfigAndSignListener} directly. */ private boolean enableRemoteSyncConfig = false; - /** * endpoint for Nacos, the domain name of a service, through which the server address * can be dynamically obtained. */ private String endpoint; - /** * namespace, separation configuration of different environments. */ private String namespace; - /** * access key for namespace. */ private String accessKey; - /** * secret key for namespace. */ private String secretKey; - /** * role name for aliyun ram. */ private String ramRoleName; - /** * context path for nacos config server. */ private String contextPath; - /** * nacos config cluster name. */ private String clusterName; - /** * nacos config dataId name. */ private String name; - /** * a set of shared configurations .e.g: * spring.cloud.nacos.config.shared-configs[0]=xxx . */ private List sharedConfigs; - /** * a set of extensional configurations .e.g: * spring.cloud.nacos.config.extension-configs[0]=xxx . */ private List extensionConfigs; - /** * the master switch for refresh configuration, it default opened(true). */ private boolean refreshEnabled = true; + @PostConstruct + public void init() { + this.overrideFromEnv(); + } + + private void overrideFromEnv() { + if (environment == null) { + return; + } + if (StringUtils.isEmpty(this.getServerAddr())) { + String serverAddr = environment + .resolvePlaceholders("${spring.cloud.nacos.config.server-addr:}"); + if (StringUtils.isEmpty(serverAddr)) { + serverAddr = environment.resolvePlaceholders( + "${spring.cloud.nacos.server-addr:127.0.0.1:8848}"); + } + this.setServerAddr(serverAddr); + } + if (StringUtils.isEmpty(this.getUsername())) { + this.setUsername( + environment.resolvePlaceholders("${spring.cloud.nacos.username:}")); + } + if (StringUtils.isEmpty(this.getPassword())) { + this.setPassword( + environment.resolvePlaceholders("${spring.cloud.nacos.password:}")); + } + } + // todo sts support public String getServerAddr() { @@ -566,7 +543,7 @@ public class NacosConfigProperties { */ public Properties assembleConfigServiceProperties() { Properties properties = new Properties(); - properties.put(SERVER_ADDR, Objects.toString(this.serverAddr, DEFAULT_ADDRESS)); + properties.put(SERVER_ADDR, Objects.toString(this.serverAddr, "")); properties.put(USERNAME, Objects.toString(this.username, "")); properties.put(PASSWORD, Objects.toString(this.password, "")); properties.put(ENCODE, Objects.toString(this.encode, "")); @@ -592,6 +569,12 @@ public class NacosConfigProperties { } enrichNacosConfigProperties(properties); + + // set default value when serverAddr and endpoint is empty + if (StringUtils.isEmpty(this.serverAddr) && StringUtils.isEmpty(this.endpoint)) { + properties.put(SERVER_ADDR, DEFAULT_ADDRESS); + } + return properties; } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/refresh/NacosContextRefresher.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/refresh/NacosContextRefresher.java index a832bb837..a76faa88e 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/refresh/NacosContextRefresher.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/refresh/NacosContextRefresher.java @@ -54,14 +54,12 @@ public class NacosContextRefresher .getLogger(NacosContextRefresher.class); private static final AtomicLong REFRESH_COUNT = new AtomicLong(0); - - private NacosConfigProperties nacosConfigProperties; - private final boolean isRefreshEnabled; - private final NacosRefreshHistory nacosRefreshHistory; + private NacosConfigProperties nacosConfigProperties; + private ConfigService configService; - private final ConfigService configService; + private NacosConfigManager configManager; private ApplicationContext applicationContext; @@ -73,10 +71,18 @@ public class NacosContextRefresher NacosRefreshHistory refreshHistory) { this.nacosConfigProperties = nacosConfigManager.getNacosConfigProperties(); this.nacosRefreshHistory = refreshHistory; - this.configService = nacosConfigManager.getConfigService(); + this.configManager = nacosConfigManager; this.isRefreshEnabled = this.nacosConfigProperties.isRefreshEnabled(); } + public static long getRefreshCount() { + return REFRESH_COUNT.get(); + } + + public static void refreshCountIncrement() { + REFRESH_COUNT.incrementAndGet(); + } + @Override public void onApplicationEvent(ApplicationReadyEvent event) { // many Spring context @@ -127,6 +133,10 @@ public class NacosContextRefresher } }); try { + if (configService == null && configManager != null) { + configService = configManager.getConfigService(); + } + configService.addListener(dataKey, groupKey, listener); log.info("[Nacos Config] Listening config: dataId={}, group={}", dataKey, groupKey); @@ -159,12 +169,4 @@ public class NacosContextRefresher return isRefreshEnabled; } - public static long getRefreshCount() { - return REFRESH_COUNT.get(); - } - - public static void refreshCountIncrement() { - REFRESH_COUNT.incrementAndGet(); - } - } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java index a70e9fa4f..f5e1f97a4 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java @@ -49,7 +49,6 @@ import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.Environment; import static com.alibaba.nacos.api.PropertyKeyConst.ACCESS_KEY; -import static com.alibaba.nacos.api.PropertyKeyConst.CLUSTER_NAME; import static com.alibaba.nacos.api.PropertyKeyConst.ENDPOINT; import static com.alibaba.nacos.api.PropertyKeyConst.ENDPOINT_PORT; import static com.alibaba.nacos.api.PropertyKeyConst.NAMESPACE; @@ -70,14 +69,12 @@ import static com.alibaba.nacos.api.PropertyKeyConst.USERNAME; @ConfigurationProperties("spring.cloud.nacos.discovery") public class NacosDiscoveryProperties { - private static final Logger log = LoggerFactory - .getLogger(NacosDiscoveryProperties.class); - /** * Prefix of {@link NacosDiscoveryProperties}. */ public static final String PREFIX = "spring.cloud.nacos.discovery"; - + private static final Logger log = LoggerFactory + .getLogger(NacosDiscoveryProperties.class); private static final Pattern PATTERN = Pattern.compile("-(\\w)"); private static final String IPV4 = "IPv4"; @@ -134,7 +131,7 @@ public class NacosDiscoveryProperties { /** * cluster name for nacos . */ - private String clusterName = "DEFAULT"; + private String clusterName; /** * group name for nacos. @@ -692,7 +689,7 @@ public class NacosDiscoveryProperties { properties.put(ACCESS_KEY, accessKey); properties.put(SECRET_KEY, secretKey); - properties.put(CLUSTER_NAME, clusterName); +// properties.put(CLUSTER_NAME, clusterName); properties.put(NAMING_LOAD_CACHE_AT_START, namingLoadCacheAtStart); enrichNacosDiscoveryProperties(properties);