diff --git a/pom.xml b/pom.xml
index 0b86ba92..104017d2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -88,8 +88,7 @@
1.7.25
- 2.7.3
- 2.7.3
+ 2.7.4.1
4.0.1
@@ -132,7 +131,7 @@
-
+
org.springframework.boot
spring-boot-dependencies
@@ -228,10 +227,31 @@
import
+
+
+ org.apache.dubbo
+ dubbo-dependencies-bom
+ ${dubbo.version}
+ pom
+ import
+
+
+ org.springframework
+ spring-framework-bom
+
+
+
+
org.apache.dubbo
dubbo-spring-boot-starter
- ${dubbo-spring-boot.version}
+ ${dubbo.version}
+
+
+
+ org.apache.dubbo
+ dubbo-spring-boot-actuator
+ ${dubbo.version}
@@ -241,15 +261,7 @@
org.springframework
- spring
-
-
- javax.servlet
- servlet-api
-
-
- log4j
- log4j
+ spring-context
@@ -420,5 +432,4 @@
-
\ No newline at end of file
diff --git a/spring-cloud-alibaba-dubbo/pom.xml b/spring-cloud-alibaba-dubbo/pom.xml
index ee71456f..b56f7371 100644
--- a/spring-cloud-alibaba-dubbo/pom.xml
+++ b/spring-cloud-alibaba-dubbo/pom.xml
@@ -13,30 +13,6 @@
spring-cloud-alibaba-dubbo
Spring Cloud Alibaba Dubbo
-
-
-
-
-
- org.springframework.boot
- spring-boot-dependencies
- ${spring-boot.version}
- pom
- import
-
-
-
-
- org.apache.dubbo
- dubbo-dependencies-bom
- ${dubbo.version}
- pom
- import
-
-
-
-
-
@@ -162,7 +138,6 @@
org.apache.dubbo
dubbo-spring-boot-actuator
- ${dubbo-spring-boot.version}
true
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java
index 18315fd6..de8fb254 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/DubboServiceDiscoveryAutoConfiguration.java
@@ -118,7 +118,7 @@ public class DubboServiceDiscoveryAutoConfiguration {
/**
* NacosDiscoveryAutoConfiguration.
*/
- public static final String NACOS_DISCOVERY_AUTO_CONFIGURATION_CLASS_NAME = "com.alibaba.cloud.nacos.NacosDiscoveryAutoConfiguration";
+ public static final String NACOS_DISCOVERY_AUTO_CONFIGURATION_CLASS_NAME = "com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration";
private final DubboServiceMetadataRepository dubboServiceMetadataRepository;
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/condition/MissingSpringCloudRegistryConfigPropertyCondition.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/condition/MissingSpringCloudRegistryConfigPropertyCondition.java
index 59890429..0ea71581 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/condition/MissingSpringCloudRegistryConfigPropertyCondition.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/autoconfigure/condition/MissingSpringCloudRegistryConfigPropertyCondition.java
@@ -29,7 +29,7 @@ import org.springframework.core.type.AnnotatedTypeMetadata;
import org.springframework.util.StringUtils;
import static com.alibaba.cloud.dubbo.registry.SpringCloudRegistryFactory.PROTOCOL;
-import static org.apache.dubbo.config.spring.util.PropertySourcesUtils.getSubProperties;
+import static org.apache.dubbo.config.spring.util.PropertySourcesUtils.getPrefixedProperties;
/**
* Missing {@link SpringCloudRegistry} Property {@link Condition}.
@@ -61,8 +61,8 @@ public class MissingSpringCloudRegistryConfigPropertyCondition
"'spring-cloud' protocol was found from 'dubbo.registry.address'");
}
- Map properties = getSubProperties(environment,
- "dubbo.registries.");
+ Map properties = getPrefixedProperties(
+ environment.getPropertySources(), "dubbo.registries.");
boolean found = properties.entrySet().stream().anyMatch(entry -> {
String key = entry.getKey();
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/env/DubboNonWebApplicationEnvironmentPostProcessor.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/env/DubboNonWebApplicationEnvironmentPostProcessor.java
index 77b7c942..4de58946 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/env/DubboNonWebApplicationEnvironmentPostProcessor.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/env/DubboNonWebApplicationEnvironmentPostProcessor.java
@@ -35,7 +35,7 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_PROTOCOL;
-import static org.apache.dubbo.config.spring.util.PropertySourcesUtils.getSubProperties;
+import static org.apache.dubbo.config.spring.util.PropertySourcesUtils.getPrefixedProperties;
/**
* Dubbo {@link WebApplicationType#NONE Non-Web Application}
@@ -88,7 +88,7 @@ public class DubboNonWebApplicationEnvironmentPostProcessor
WebApplicationType webApplicationType = application.getWebApplicationType();
if (!WebApplicationType.NONE.equals(webApplicationType)) { // Just works in
- // Non-Web Application
+ // Non-Web Application
if (logger.isDebugEnabled()) {
logger.debug(
"Current application is a Web Application, the process will be ignored.");
@@ -149,8 +149,8 @@ public class DubboNonWebApplicationEnvironmentPostProcessor
String restPort = null;
- Map subProperties = getSubProperties(environment,
- PROTOCOLS_PROPERTY_NAME_PREFIX);
+ Map subProperties = getPrefixedProperties(
+ environment.getPropertySources(), PROTOCOLS_PROPERTY_NAME_PREFIX);
Properties properties = new Properties();
@@ -158,8 +158,8 @@ public class DubboNonWebApplicationEnvironmentPostProcessor
for (String propertyName : properties.stringPropertyNames()) {
if (propertyName.endsWith(PROTOCOL_NAME_PROPERTY_NAME_SUFFIX)) { // protocol
- // name
- // property
+ // name
+ // property
String protocol = properties.getProperty(propertyName);
if (isRestProtocol(protocol)) {
String beanName = resolveBeanName(propertyName);
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/pom.xml
index 94d39bb8..8bc3c8ca 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/pom.xml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/pom.xml
@@ -136,18 +136,6 @@
-
-
-
- org.apache.dubbo
- dubbo-bom
- ${dubbo.version}
- pom
- import
-
-
-
-
diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigHealthIndicator.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigHealthIndicator.java
index 7becf481..482909d8 100644
--- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigHealthIndicator.java
+++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosConfigHealthIndicator.java
@@ -20,9 +20,13 @@ import com.alibaba.nacos.api.config.ConfigService;
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
+import org.springframework.boot.actuate.health.HealthIndicator;
/**
+ * The {@link HealthIndicator} for Nacos Config
+ *
* @author xiaojing
+ * @author Mercy
*/
public class NacosConfigHealthIndicator extends AbstractHealthIndicator {
@@ -34,10 +38,21 @@ public class NacosConfigHealthIndicator extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
- builder.up();
-
+ // Just return "UP" or "DOWN"
String status = configService.getServerStatus();
+ // Set the status to Builder
builder.status(status);
+ switch (status) {
+ case "UP":
+ builder.up();
+ break;
+ case "DOWN":
+ builder.down();
+ break;
+ default:
+ builder.unknown();
+ break;
+ }
}
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java
index c030336d..6ac2b159 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java
@@ -19,6 +19,7 @@ package com.alibaba.cloud.nacos.discovery;
import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
+import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
@@ -30,6 +31,7 @@ import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.TaskScheduler;
/**
* @author xiaojing
@@ -52,10 +54,10 @@ public class NacosDiscoveryClientConfiguration {
@Bean
@ConditionalOnMissingBean
- @ConditionalOnProperty(value = "spring.cloud.nacos.discovery.watch.enabled",
- matchIfMissing = true)
- public NacosWatch nacosWatch(NacosDiscoveryProperties nacosDiscoveryProperties) {
- return new NacosWatch(nacosDiscoveryProperties);
+ @ConditionalOnProperty(value = "spring.cloud.nacos.discovery.watch.enabled", matchIfMissing = true)
+ public NacosWatch nacosWatch(NacosDiscoveryProperties nacosDiscoveryProperties,
+ ObjectProvider taskScheduler) {
+ return new NacosWatch(nacosDiscoveryProperties, taskScheduler);
}
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java
index 36761d47..edfa637f 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java
@@ -16,18 +16,15 @@
package com.alibaba.cloud.nacos.discovery;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Set;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
-import com.alibaba.nacos.api.naming.listener.EventListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.ObjectProvider;
import org.springframework.cloud.client.discovery.event.HeartbeatEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
@@ -54,10 +51,6 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl
private ScheduledFuture> watchFuture;
- private Set cacheServices = new HashSet<>();
-
- private HashMap subscribeListeners = new HashMap<>();
-
public NacosWatch(NacosDiscoveryProperties properties) {
this(properties, getTaskScheduler());
}
@@ -67,8 +60,21 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl
this.taskScheduler = taskScheduler;
}
+ /**
+ * The constructor with {@link NacosDiscoveryProperties} bean and the optional
+ * {@link TaskScheduler} bean
+ * @param properties {@link NacosDiscoveryProperties} bean
+ * @param taskScheduler the optional {@link TaskScheduler} bean
+ * @since 2.2.0
+ */
+ public NacosWatch(NacosDiscoveryProperties properties,
+ ObjectProvider taskScheduler) {
+ this(properties, taskScheduler.getIfAvailable(NacosWatch::getTaskScheduler));
+ }
+
private static ThreadPoolTaskScheduler getTaskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
+ taskScheduler.setBeanName("Nacso-Watch-Task-Scheduler");
taskScheduler.initialize();
return taskScheduler;
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/actuate/health/NacosDiscoveryHealthIndicator.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/actuate/health/NacosDiscoveryHealthIndicator.java
new file mode 100644
index 00000000..1854a42a
--- /dev/null
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/actuate/health/NacosDiscoveryHealthIndicator.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.alibaba.cloud.nacos.discovery.actuate.health;
+
+import com.alibaba.nacos.api.naming.NamingService;
+
+import org.springframework.boot.actuate.health.AbstractHealthIndicator;
+import org.springframework.boot.actuate.health.Health;
+import org.springframework.boot.actuate.health.HealthIndicator;
+
+/**
+ * The {@link HealthIndicator} for Nacos Discovery
+ *
+ * @author Mercy
+ * @since 2.2.0
+ * @see HealthIndicator
+ */
+public class NacosDiscoveryHealthIndicator extends AbstractHealthIndicator {
+
+ private final NamingService namingService;
+
+ public NacosDiscoveryHealthIndicator(NamingService namingService) {
+ this.namingService = namingService;
+ }
+
+ @Override
+ protected void doHealthCheck(Health.Builder builder) throws Exception {
+ // Just return "UP" or "DOWN"
+ String status = namingService.getServerStatus();
+ // Set the status to Builder
+ builder.status(status);
+ switch (status) {
+ case "UP":
+ builder.up();
+ break;
+ case "DOWN":
+ builder.down();
+ break;
+ default:
+ builder.unknown();
+ break;
+ }
+ }
+}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java
index 0fdffd99..78635ae1 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpointAutoConfiguration.java
@@ -18,16 +18,22 @@ package com.alibaba.cloud.nacos.endpoint;
import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
+import com.alibaba.cloud.nacos.discovery.actuate.health.NacosDiscoveryHealthIndicator;
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint;
+import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
+import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
+ * The AutoConfiguration class for Nacos Discovery's Endpoints
+ *
* @author xiaojing
+ * @author Mercy
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(Endpoint.class)
@@ -42,4 +48,11 @@ public class NacosDiscoveryEndpointAutoConfiguration {
return new NacosDiscoveryEndpoint(nacosDiscoveryProperties);
}
+ @Bean
+ @ConditionalOnEnabledHealthIndicator("nacos-discovery")
+ public HealthIndicator nacosDiscoveryHealthIndicator(
+ NacosDiscoveryProperties nacosDiscoveryProperties) {
+ return new NacosDiscoveryHealthIndicator(
+ nacosDiscoveryProperties.namingServiceInstance());
+ }
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java
index af81f0ac..b0974a55 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java
@@ -28,6 +28,8 @@ import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
import org.springframework.util.StringUtils;
+import static org.springframework.util.ReflectionUtils.rethrowRuntimeException;
+
/**
* @author xiaojing
* @author Mercy
@@ -66,6 +68,9 @@ public class NacosServiceRegistry implements ServiceRegistry {
catch (Exception e) {
log.error("nacos registry, {} register failed...{},", serviceId,
registration.toString(), e);
+ // rethrow a RuntimeException if the registration is failed.
+ // issue : https://github.com/alibaba/spring-cloud-alibaba/issues/1132
+ rethrowRuntimeException(e);
}
}
diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfigurationTest.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfigurationTest.java
index 92e93a1a..862799cd 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfigurationTest.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfigurationTest.java
@@ -22,6 +22,9 @@ import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.commons.util.UtilAutoConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import static org.assertj.core.api.Assertions.assertThat;
@@ -33,7 +36,12 @@ public class NacosDiscoveryClientConfigurationTest {
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(UtilAutoConfiguration.class,
NacosDiscoveryAutoConfiguration.class,
- NacosDiscoveryClientConfiguration.class));
+ NacosDiscoveryClientConfiguration.class, this.getClass()));
+
+ @Bean
+ public TaskScheduler taskScheduler() {
+ return new ThreadPoolTaskScheduler();
+ }
@Test
public void testDefaultInitialization() {