From d2684c288201a62b3eded20dfe5b7e3f4df0c7fb Mon Sep 17 00:00:00 2001 From: chuntaojun Date: Fri, 6 Sep 2019 16:03:41 +0800 Subject: [PATCH] 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; + } } }