From d2684c288201a62b3eded20dfe5b7e3f4df0c7fb Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Fri, 6 Sep 2019 16:03:41 +0800 Subject: [PATCH 1/2] fix(nacos): fix issue #859 --- .../alibaba/cloud/examples/Application.java | 11 +++- .../cloud/nacos/NacosConfigManager.java | 34 +++++++++++-- .../cloud/nacos/NacosNamingManager.java | 50 ++++++++++++++++--- 3 files changed, 82 insertions(+), 13 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 74433245..5e654edf 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 @@ -88,10 +88,17 @@ class SampleController { String userName; @Value("${user.age:25}") - int age; + Integer age; + + private final NacosConfigManager nacosConfigManager; + + public SampleController(NacosConfigManager nacosConfigManager) { + this.nacosConfigManager = nacosConfigManager; + } @RequestMapping("/user") public String simple() { - return "Hello Nacos Config!" + "Hello " + userName + " " + age + "!"; + return "Hello Nacos Config!" + "Hello " + userName + " " + age + "!" + + nacosConfigManager.getConfigService(); } } \ No newline at end of file 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 4b5e98f9..f8e082a5 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 @@ -26,10 +26,8 @@ import org.springframework.context.ApplicationContextAware; */ public class NacosConfigManager implements ApplicationContextAware { - private ConfigService configService; - public ConfigService getConfigService() { - return configService; + return ServiceHolder.getInstance().getService(); } @Override @@ -37,6 +35,34 @@ public class NacosConfigManager implements ApplicationContextAware { throws BeansException { NacosConfigProperties properties = applicationContext .getBean(NacosConfigProperties.class); - configService = properties.configServiceInstance(); + 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; + } + } + } 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 9bf40a45..528ff6e0 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 @@ -27,15 +27,12 @@ import org.springframework.context.ApplicationContextAware; */ public class NacosNamingManager implements ApplicationContextAware { - private NamingService namingService; - private NamingMaintainService namingMaintainService; - public NamingService getNamingService() { - return namingService; + return ServiceHolder.getInstance().getNamingService(); } public NamingMaintainService getNamingMaintainService() { - return namingMaintainService; + return ServiceHolder.getInstance().getNamingMaintainService(); } @Override @@ -43,7 +40,46 @@ public class NacosNamingManager implements ApplicationContextAware { throws BeansException { NacosDiscoveryProperties properties = applicationContext .getBean(NacosDiscoveryProperties.class); - namingService = properties.namingServiceInstance(); - namingMaintainService = properties.namingMaintainServiceInstance(); + 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; + } } } From 5162d02b4ea39ef8629b9638fe22ce51b99e6d0f Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Thu, 12 Sep 2019 20:20:02 +0800 Subject: [PATCH 2/2] 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; - } - } }