From 6c882db41844c875ce77f65e6ff303b8d6124904 Mon Sep 17 00:00:00 2001 From: mengxiangrui003 Date: Tue, 11 Dec 2018 21:05:37 +0800 Subject: [PATCH 1/3] optimize nacos config client code --- .../nacos/NacosConfigAutoConfiguration.java | 42 ++++++------ .../NacosConfigBootstrapConfiguration.java | 5 +- .../nacos/NacosPropertySourceRepository.java | 10 +-- .../client/NacosPropertySourceBuilder.java | 22 +++--- .../client/NacosPropertySourceLocator.java | 18 +++-- .../nacos/refresh/NacosContextRefresher.java | 68 ++++++++++++------- 6 files changed, 90 insertions(+), 75 deletions(-) diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigAutoConfiguration.java b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigAutoConfiguration.java index 5dbdb50a..163c3417 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigAutoConfiguration.java @@ -16,14 +16,11 @@ package org.springframework.cloud.alibaba.nacos; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.cloud.alibaba.nacos.refresh.NacosContextRefresher; import org.springframework.cloud.alibaba.nacos.refresh.NacosRefreshHistory; import org.springframework.cloud.alibaba.nacos.refresh.NacosRefreshProperties; -import org.springframework.cloud.context.refresh.ContextRefresher; import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -31,19 +28,23 @@ import org.springframework.context.annotation.Configuration; * @author juven.xuxb */ @Configuration -public class NacosConfigAutoConfiguration implements ApplicationContextAware { +public class NacosConfigAutoConfiguration { - private ApplicationContext applicationContext; - - @Autowired - private NacosConfigProperties nacosConfigProperties; - - @Autowired - private NacosRefreshProperties nacosRefreshProperties; + @Bean + public NacosConfigProperties nacosConfigProperties(ApplicationContext context) { + if (context.getParent() != null + && BeanFactoryUtils.beanNamesForTypeIncludingAncestors( + context.getParent(), NacosConfigProperties.class).length > 0) { + return BeanFactoryUtils.beanOfTypeIncludingAncestors(context.getParent(), + NacosConfigProperties.class); + } + NacosConfigProperties nacosConfigProperties = new NacosConfigProperties(); + return nacosConfigProperties; + } @Bean public NacosPropertySourceRepository nacosPropertySourceRepository() { - return new NacosPropertySourceRepository(applicationContext); + return new NacosPropertySourceRepository(); } @Bean @@ -57,17 +58,12 @@ public class NacosConfigAutoConfiguration implements ApplicationContextAware { } @Bean - public NacosContextRefresher nacosContextRefresher(ContextRefresher contextRefresher, + public NacosContextRefresher nacosContextRefresher( + NacosConfigProperties nacosConfigProperties, + NacosRefreshProperties nacosRefreshProperties, NacosRefreshHistory refreshHistory, NacosPropertySourceRepository propertySourceRepository) { - return new NacosContextRefresher(contextRefresher, nacosConfigProperties, - nacosRefreshProperties, refreshHistory, propertySourceRepository, - nacosConfigProperties.configServiceInstance()); - } - - @Override - public void setApplicationContext(ApplicationContext applicationContext) - throws BeansException { - this.applicationContext = applicationContext; + return new NacosContextRefresher(nacosRefreshProperties, refreshHistory, + propertySourceRepository, nacosConfigProperties.configServiceInstance()); } } diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigBootstrapConfiguration.java b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigBootstrapConfiguration.java index e643d35a..1be9157f 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigBootstrapConfiguration.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigBootstrapConfiguration.java @@ -28,8 +28,9 @@ import org.springframework.context.annotation.Configuration; public class NacosConfigBootstrapConfiguration { @Bean - public NacosPropertySourceLocator nacosPropertySourceLocator() { - return new NacosPropertySourceLocator(); + public NacosPropertySourceLocator nacosPropertySourceLocator( + NacosConfigProperties nacosConfigProperties) { + return new NacosPropertySourceLocator(nacosConfigProperties); } @Bean diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosPropertySourceRepository.java b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosPropertySourceRepository.java index fab891b5..47075ca1 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosPropertySourceRepository.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosPropertySourceRepository.java @@ -21,6 +21,7 @@ import java.util.List; import org.springframework.cloud.alibaba.nacos.client.NacosPropertySource; import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.CompositePropertySource; import org.springframework.core.env.PropertySource; @@ -28,11 +29,12 @@ import org.springframework.core.env.PropertySource; /** * @author xiaojing */ -public class NacosPropertySourceRepository { +public class NacosPropertySourceRepository implements ApplicationContextAware { - private final ApplicationContext applicationContext; + private ApplicationContext applicationContext; - public NacosPropertySourceRepository(ApplicationContext applicationContext) { + @Override + public void setApplicationContext(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } @@ -54,7 +56,7 @@ public class NacosPropertySourceRepository { } private void collectNacosPropertySources(CompositePropertySource composite, - List result) { + List result) { for (PropertySource p : composite.getPropertySources()) { if (p instanceof NacosPropertySource) { result.add((NacosPropertySource) p); diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceBuilder.java b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceBuilder.java index 589a3bac..aed33180 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceBuilder.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceBuilder.java @@ -16,32 +16,28 @@ package org.springframework.cloud.alibaba.nacos.client; -import com.alibaba.nacos.api.config.ConfigService; -import com.alibaba.nacos.api.exception.NacosException; +import java.io.StringReader; +import java.util.*; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; import org.springframework.core.io.ByteArrayResource; import org.springframework.util.StringUtils; -import java.io.StringReader; -import java.util.*; +import com.alibaba.nacos.api.config.ConfigService; +import com.alibaba.nacos.api.exception.NacosException; /** * @author xiaojing * @author pbting */ public class NacosPropertySourceBuilder { - - private static final Logger logger = LoggerFactory + private static final Logger LOGGER = LoggerFactory .getLogger(NacosPropertySourceBuilder.class); - private ConfigService configService; private long timeout; - public NacosPropertySourceBuilder() { - } - public NacosPropertySourceBuilder(ConfigService configService, long timeout) { this.configService = configService; this.timeout = timeout; @@ -82,7 +78,7 @@ public class NacosPropertySourceBuilder { try { data = configService.getConfig(dataId, group, timeout); if (!StringUtils.isEmpty(data)) { - logger.info(String.format("Loading nacos data, dataId: '%s', group: '%s'", + LOGGER.info(String.format("Loading nacos data, dataId: '%s', group: '%s'", dataId, group)); if (fileExtension.equalsIgnoreCase("properties")) { @@ -101,10 +97,10 @@ public class NacosPropertySourceBuilder { } } catch (NacosException e) { - logger.error("get data from Nacos error,dataId:{}, ", dataId, e); + LOGGER.error("get data from Nacos error,dataId:{}, ", dataId, e); } catch (Exception e) { - logger.error("parse data from Nacos error,dataId:{},data:{},", dataId, data, + LOGGER.error("parse data from Nacos error,dataId:{},data:{},", dataId, data, e); } 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 a6d69783..6bc45ae4 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 @@ -16,10 +16,11 @@ package org.springframework.cloud.alibaba.nacos.client; -import com.alibaba.nacos.api.config.ConfigService; +import java.util.Arrays; +import java.util.List; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.alibaba.nacos.NacosConfigProperties; import org.springframework.cloud.bootstrap.config.PropertySourceLocator; import org.springframework.core.annotation.Order; @@ -27,8 +28,8 @@ import org.springframework.core.env.CompositePropertySource; import org.springframework.core.env.Environment; import org.springframework.core.env.PropertySource; import org.springframework.util.StringUtils; -import java.util.Arrays; -import java.util.List; + +import com.alibaba.nacos.api.config.ConfigService; /** * @author xiaojing @@ -36,7 +37,7 @@ import java.util.List; @Order(0) public class NacosPropertySourceLocator implements PropertySourceLocator { - private static final Logger logger = LoggerFactory + private static final Logger LOGGER = LoggerFactory .getLogger(NacosPropertySourceLocator.class); private static final String NACOS_PROPERTY_SOURCE_NAME = "NACOS"; private static final String SEP1 = "-"; @@ -45,9 +46,12 @@ public class NacosPropertySourceLocator implements PropertySourceLocator { private static final List SUPPORT_FILE_EXTENSION = Arrays.asList("properties", "yaml", "yml"); - @Autowired private NacosConfigProperties nacosConfigProperties; + public NacosPropertySourceLocator(NacosConfigProperties nacosConfigProperties) { + this.nacosConfigProperties = nacosConfigProperties; + } + private NacosPropertySourceBuilder nacosPropertySourceBuilder; @Override @@ -56,7 +60,7 @@ public class NacosPropertySourceLocator implements PropertySourceLocator { ConfigService configService = nacosConfigProperties.configServiceInstance(); if (null == configService) { - logger.warn( + LOGGER.warn( "no instance of config service found, can't load config from nacos"); return null; } 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 448f6dd1..908e1f9e 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 @@ -16,19 +16,6 @@ package org.springframework.cloud.alibaba.nacos.refresh; -import com.alibaba.nacos.api.config.ConfigService; -import com.alibaba.nacos.api.config.listener.Listener; -import com.alibaba.nacos.api.exception.NacosException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.cloud.alibaba.nacos.NacosConfigProperties; -import org.springframework.cloud.alibaba.nacos.NacosPropertySourceRepository; -import org.springframework.cloud.alibaba.nacos.client.NacosPropertySource; -import org.springframework.cloud.context.refresh.ContextRefresher; -import org.springframework.context.ApplicationListener; -import org.springframework.util.StringUtils; - import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.security.MessageDigest; @@ -36,6 +23,22 @@ import java.security.NoSuchAlgorithmException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executor; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.cloud.alibaba.nacos.NacosPropertySourceRepository; +import org.springframework.cloud.alibaba.nacos.client.NacosPropertySource; +import org.springframework.cloud.endpoint.event.RefreshEvent; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.ApplicationListener; +import org.springframework.util.StringUtils; + +import com.alibaba.nacos.api.config.ConfigService; +import com.alibaba.nacos.api.config.listener.Listener; +import com.alibaba.nacos.api.exception.NacosException; /** * On application start up, NacosContextRefresher add nacos listeners to all application @@ -45,13 +48,11 @@ import java.util.concurrent.Executor; * @author juven.xuxb * @author pbting */ -public class NacosContextRefresher implements ApplicationListener { +public class NacosContextRefresher + implements ApplicationListener, ApplicationContextAware { - private Logger logger = LoggerFactory.getLogger(NacosContextRefresher.class); - - private final ContextRefresher contextRefresher; - - private final NacosConfigProperties properties; + private final static Logger LOGGER = LoggerFactory + .getLogger(NacosContextRefresher.class); private final NacosRefreshProperties refreshProperties; @@ -61,15 +62,16 @@ public class NacosContextRefresher implements ApplicationListener listenerMap = new ConcurrentHashMap<>(16); - public NacosContextRefresher(ContextRefresher contextRefresher, - NacosConfigProperties properties, NacosRefreshProperties refreshProperties, + public NacosContextRefresher(NacosRefreshProperties refreshProperties, NacosRefreshHistory refreshHistory, NacosPropertySourceRepository nacosPropertySourceRepository, ConfigService configService) { - this.contextRefresher = contextRefresher; - this.properties = properties; this.refreshProperties = refreshProperties; this.refreshHistory = refreshHistory; this.nacosPropertySourceRepository = nacosPropertySourceRepository; @@ -78,7 +80,16 @@ public class NacosContextRefresher implements ApplicationListener Date: Tue, 11 Dec 2018 21:12:59 +0800 Subject: [PATCH 2/3] add NacosConfigProperties PREFIX --- .../alibaba/nacos/NacosConfigProperties.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 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 37f9ce96..eaa9dfa6 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,8 +16,15 @@ package org.springframework.cloud.alibaba.nacos; -import com.alibaba.nacos.api.NacosFactory; -import com.alibaba.nacos.api.config.ConfigService; +import static com.alibaba.nacos.api.PropertyKeyConst.*; + +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; @@ -25,13 +32,8 @@ import org.springframework.beans.factory.annotation.Value; 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 static com.alibaba.nacos.api.PropertyKeyConst.*; +import com.alibaba.nacos.api.NacosFactory; +import com.alibaba.nacos.api.config.ConfigService; /** * nacos properties @@ -40,9 +42,11 @@ import static com.alibaba.nacos.api.PropertyKeyConst.*; * @author xiaojing * @author pbting */ -@ConfigurationProperties("spring.cloud.nacos.config") +@ConfigurationProperties(NacosConfigProperties.PREFIX) public class NacosConfigProperties { + public static final String PREFIX = "spring.cloud.nacos.config"; + private static final Logger LOGGER = LoggerFactory .getLogger(NacosConfigProperties.class); From fa29783cff3dc9f8caaee2d5effc1b2fa09968bc Mon Sep 17 00:00:00 2001 From: mengxiangrui003 Date: Wed, 12 Dec 2018 21:53:02 +0800 Subject: [PATCH 3/3] del duplicate blank --- .../cloud/alibaba/nacos/refresh/NacosContextRefresher.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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 908e1f9e..86b7b2a4 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 @@ -124,10 +124,9 @@ public class NacosContextRefresher } refreshHistory.add(dataId, md5); applicationContext.publishEvent( - new RefreshEvent(this, null, "Refresh Nacos config")); + new RefreshEvent(this, null, "Refresh Nacos config")); if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Refresh Nacos config group[[]] dataId[]", group, - dataId); + LOGGER.debug("Refresh Nacos config group{},dataId{}", group, dataId); } }