diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceAutoConfiguration.java index 3b9d71bb..52d964e5 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceAutoConfiguration.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceAutoConfiguration.java @@ -16,6 +16,7 @@ */ package org.springframework.cloud.alibaba.dubbo.autoconfigure; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.alibaba.dubbo.env.DubboCloudProperties; @@ -28,6 +29,9 @@ import org.springframework.cloud.alibaba.dubbo.service.parameter.RequestParamSer import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Primary; +import org.springframework.core.env.Environment; +import org.springframework.core.env.PropertyResolver; /** * Spring Boot Auto-Configuration class for Dubbo Service @@ -55,81 +59,15 @@ public class DubboServiceAutoConfiguration { static class ParameterResolversConfiguration { } -// /** -// * Bugfix code for an issue : https://github.com/apache/incubator-dubbo-spring-boot-project/issues/459 -// * -// * @param environment {@link ConfigurableEnvironment} -// * @return a Bean of {@link PropertyResolver} -// */ -// @Primary -// @Bean(name = BASE_PACKAGES_PROPERTY_RESOLVER_BEAN_NAME) -// public PropertyResolver dubboScanBasePackagesPropertyResolver(ConfigurableEnvironment environment) { -// ConfigurableEnvironment propertyResolver = new AbstractEnvironment() { -// @Override -// protected void customizePropertySources(MutablePropertySources propertySources) { -// Map dubboScanProperties = PropertySourcesUtils.getSubProperties(environment, DUBBO_SCAN_PREFIX); -// propertySources.addLast(new MapPropertySource("dubboScanProperties", dubboScanProperties)); -// } -// }; -// ConfigurationPropertySources.attach(propertyResolver); -// return new DelegatingPropertyResolver(propertyResolver); -// } -// -// -// private static class DelegatingPropertyResolver implements PropertyResolver { -// -// private final PropertyResolver delegate; -// -// DelegatingPropertyResolver(PropertyResolver delegate) { -// Assert.notNull(delegate, "The delegate of PropertyResolver must not be null"); -// this.delegate = delegate; -// } -// -// @Override -// public boolean containsProperty(String key) { -// return delegate.containsProperty(key); -// } -// -// @Override -// @Nullable -// public String getProperty(String key) { -// return delegate.getProperty(key); -// } -// -// @Override -// public String getProperty(String key, String defaultValue) { -// return delegate.getProperty(key, defaultValue); -// } -// -// @Override -// @Nullable -// public T getProperty(String key, Class targetType) { -// return delegate.getProperty(key, targetType); -// } -// -// @Override -// public T getProperty(String key, Class targetType, T defaultValue) { -// return delegate.getProperty(key, targetType, defaultValue); -// } -// -// @Override -// public String getRequiredProperty(String key) throws IllegalStateException { -// return delegate.getRequiredProperty(key); -// } -// -// @Override -// public T getRequiredProperty(String key, Class targetType) throws IllegalStateException { -// return delegate.getRequiredProperty(key, targetType); -// } -// -// @Override -// public String resolvePlaceholders(String text) { -// return delegate.resolvePlaceholders(text); -// } -// -// @Override -// public String resolveRequiredPlaceholders(String text) throws IllegalArgumentException { -// return delegate.resolveRequiredPlaceholders(text); -// } -// } + /** + * Build a primary {@link PropertyResolver} bean to {@link Autowired @Autowired} + * + * @param environment {@link Environment} + * @return alias bean for {@link Environment} + */ + @Bean + @Primary + public PropertyResolver primaryPropertyResolver(Environment environment) { + return environment; + } } \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/AbstractSpringCloudRegistry.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/AbstractSpringCloudRegistry.java index c52cf231..4674f0e1 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/AbstractSpringCloudRegistry.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/AbstractSpringCloudRegistry.java @@ -18,7 +18,6 @@ package org.springframework.cloud.alibaba.dubbo.registry; import org.apache.dubbo.common.Constants; import org.apache.dubbo.common.URL; -import org.apache.dubbo.common.utils.UrlUtils; import org.apache.dubbo.registry.NotifyListener; import org.apache.dubbo.registry.RegistryFactory; import org.apache.dubbo.registry.support.FailbackRegistry; @@ -29,20 +28,21 @@ import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; import java.util.LinkedHashSet; -import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import static java.util.Collections.emptyList; import static java.util.Collections.singleton; import static org.apache.dubbo.common.Constants.PROVIDER_SIDE; import static org.apache.dubbo.common.Constants.SIDE_KEY; import static org.springframework.util.ObjectUtils.isEmpty; +import static org.springframework.util.StringUtils.hasText; /** * Abstract Dubbo {@link RegistryFactory} uses Spring Cloud Service Registration abstraction, whose protocol is "spring-cloud" @@ -144,13 +144,8 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { } } - private void filterServiceNames(Collection serviceNames) { - filter(serviceNames, new Filter() { - @Override - public boolean accept(String serviceName) { - return supports(serviceName); - } - }); + private Set filterServiceNames(Collection serviceNames) { + return new LinkedHashSet<>(filter(serviceNames, this::supports)); } protected abstract boolean supports(String serviceName); @@ -185,8 +180,7 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { */ protected Set getServiceNamesForOps(URL url) { Set serviceNames = getAllServiceNames(); - filterServiceNames(serviceNames); - return serviceNames; + return filterServiceNames(serviceNames); } protected abstract String getServiceName(URL url); @@ -206,7 +200,7 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { } protected List getServiceInstances(String serviceName) { - return discoveryClient.getInstances(serviceName); + return hasText(serviceName) ? discoveryClient.getInstances(serviceName) : emptyList(); } private void subscribe(final URL url, final NotifyListener listener, final Collection serviceNames) { @@ -227,67 +221,9 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { */ protected abstract void notifySubscriber(URL url, NotifyListener listener, List serviceInstances); - protected void filterHealthyInstances(Collection instances) { - filter(instances, new Filter() { - @Override - public boolean accept(ServiceInstance data) { - // TODO check the details of status -// return serviceRegistry.getStatus(new DubboRegistration(data)) != null; - return true; - } - }); + protected Collection filter(Collection collection, Predicate filter) { + return collection.stream() + .filter(filter) + .collect(Collectors.toList()); } - - protected List buildURLs(URL consumerURL, Collection serviceInstances) { - if (serviceInstances.isEmpty()) { - return Collections.emptyList(); - } - List urls = new LinkedList(); - for (ServiceInstance serviceInstance : serviceInstances) { - URL url = buildURL(serviceInstance); - if (UrlUtils.isMatch(consumerURL, url)) { - urls.add(url); - } - } - return urls; - } - - private URL buildURL(ServiceInstance serviceInstance) { - URL url = new URL(serviceInstance.getMetadata().get(Constants.PROTOCOL_KEY), - serviceInstance.getHost(), - serviceInstance.getPort(), - serviceInstance.getMetadata()); - return url; - } - - private void filter(Collection collection, Filter filter) { - Iterator iterator = collection.iterator(); - while (iterator.hasNext()) { - T data = iterator.next(); - if (!filter.accept(data)) { // remove if not accept - iterator.remove(); - } - } - } - - private static T[] of(T... values) { - return values; - } - - /** - * A filter - */ - public interface Filter { - - /** - * Tests whether or not the specified data should be accepted. - * - * @param data The data to be tested - * @return true if and only if data - * should be accepted - */ - boolean accept(T data); - - } - } diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml index 424a48c8..503a96a7 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml @@ -178,5 +178,17 @@ + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml index 1696d3c7..e3a751d9 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml @@ -35,4 +35,13 @@ + + + + + org.springframework.boot + spring-boot-maven-plugin + + + \ No newline at end of file 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 14424d8a..58911dc7 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 @@ -80,4 +80,13 @@ + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml index 14173487..9053f492 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml @@ -30,4 +30,13 @@ + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/pom.xml index d53ba1f3..e9424abb 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/pom.xml @@ -36,4 +36,12 @@ + + + + org.springframework.boot + spring-boot-maven-plugin + + + \ No newline at end of file