From 5162d02b4ea39ef8629b9638fe22ce51b99e6d0f Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Thu, 12 Sep 2019 20:20:02 +0800 Subject: [PATCH] fix(nacos): fix issue #859 --- .../alibaba/cloud/examples/Application.java | 7 +- .../cloud/nacos/NacosConfigManager.java | 51 ++++--------- .../cloud/nacos/NacosNamingManager.java | 71 +++++-------------- 3 files changed, 32 insertions(+), 97 deletions(-) diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/Application.java b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/Application.java index 5e654edf..a9cb91eb 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/Application.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/java/com/alibaba/cloud/examples/Application.java @@ -90,11 +90,8 @@ class SampleController { @Value("${user.age:25}") Integer age; - private final NacosConfigManager nacosConfigManager; - - public SampleController(NacosConfigManager nacosConfigManager) { - this.nacosConfigManager = nacosConfigManager; - } + @Autowired + private NacosConfigManager nacosConfigManager; @RequestMapping("/user") public String simple() { diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigManager.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigManager.java index f8e082a5..ef8c9bce 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigManager.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigManager.java @@ -17,52 +17,25 @@ package com.alibaba.cloud.nacos; import com.alibaba.nacos.api.config.ConfigService; -import org.springframework.beans.BeansException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Objects; /** * @author liaochuntao */ -public class NacosConfigManager implements ApplicationContextAware { +public class NacosConfigManager { + + @Autowired + private NacosConfigProperties properties; + + private static ConfigService service = null; public ConfigService getConfigService() { - return ServiceHolder.getInstance().getService(); - } - - @Override - public void setApplicationContext(ApplicationContext applicationContext) - throws BeansException { - NacosConfigProperties properties = applicationContext - .getBean(NacosConfigProperties.class); - ServiceHolder holder = ServiceHolder.getInstance(); - if (!holder.alreadyInit) { - ServiceHolder.getInstance().setService(properties.configServiceInstance()); - } - } - - static class ServiceHolder { - private ConfigService service = null; - - private boolean alreadyInit = false; - - private static final ServiceHolder holder = new ServiceHolder(); - - ServiceHolder() { - } - - static ServiceHolder getInstance() { - return holder; - } - - void setService(ConfigService service) { - alreadyInit = true; - this.service = service; - } - - ConfigService getService() { - return service; + if (Objects.isNull(service)) { + service = properties.configServiceInstance(); } + return service; } } diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosNamingManager.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosNamingManager.java index 528ff6e0..a164c3f8 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosNamingManager.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosNamingManager.java @@ -18,68 +18,33 @@ package com.alibaba.cloud.nacos; import com.alibaba.nacos.api.naming.NamingMaintainService; import com.alibaba.nacos.api.naming.NamingService; -import org.springframework.beans.BeansException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Objects; /** * @author liaochuntao */ -public class NacosNamingManager implements ApplicationContextAware { +public class NacosNamingManager { + + private static NamingService namingService = null; + private static NamingMaintainService namingMaintainService = null; + + @Autowired + private NacosDiscoveryProperties discoveryProperties; public NamingService getNamingService() { - return ServiceHolder.getInstance().getNamingService(); + if (Objects.isNull(namingService)) { + namingService = discoveryProperties.namingServiceInstance(); + } + return namingService; } public NamingMaintainService getNamingMaintainService() { - return ServiceHolder.getInstance().getNamingMaintainService(); + if (Objects.isNull(namingMaintainService)) { + namingMaintainService = discoveryProperties.namingMaintainServiceInstance(); + } + return namingMaintainService; } - @Override - public void setApplicationContext(ApplicationContext applicationContext) - throws BeansException { - NacosDiscoveryProperties properties = applicationContext - .getBean(NacosDiscoveryProperties.class); - ServiceHolder holder = ServiceHolder.getInstance(); - if (!holder.alreadyInit[0]) { - holder.setNamingService(properties.namingServiceInstance()); - } - if (!holder.alreadyInit[1]) { - holder.setNamingMaintainService(properties.namingMaintainServiceInstance()); - } - } - - static class ServiceHolder { - private NamingService namingService = null; - private NamingMaintainService namingMaintainService = null; - - final boolean[] alreadyInit = new boolean[2]; - - private static final ServiceHolder HOLDER = new ServiceHolder(); - - ServiceHolder() { - } - - static ServiceHolder getInstance() { - return HOLDER; - } - - public NamingService getNamingService() { - return namingService; - } - - void setNamingService(NamingService namingService) { - alreadyInit[0] = true; - this.namingService = namingService; - } - - NamingMaintainService getNamingMaintainService() { - return namingMaintainService; - } - - void setNamingMaintainService(NamingMaintainService namingMaintainService) { - alreadyInit[1] = true; - this.namingMaintainService = namingMaintainService; - } - } }