diff --git a/pom.xml b/pom.xml index 0b86ba92..9e17bd63 100644 --- a/pom.xml +++ b/pom.xml @@ -8,13 +8,13 @@ org.springframework.cloud spring-cloud-build - 2.2.1.RELEASE + 2.2.0.RELEASE com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT pom Spring Cloud Alibaba Spring Cloud Alibaba @@ -73,14 +73,14 @@ - 2.2.1.RELEASE - 2.2.1.RELEASE - 2.2.1.RELEASE + 2.2.0.RELEASE + 2.2.0.RELEASE + 2.2.0.RELEASE 2.2.0.RELEASE - 2.2.1.RELEASE - Horsham.SR1 - 2.2.1.RELEASE - 2.2.1.RELEASE + 2.2.0.RELEASE + Horsham.RELEASE + 2.2.0.RELEASE + 2.2.0.RELEASE 2.2.0.RELEASE 4.12 @@ -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-coverage/pom.xml b/spring-cloud-alibaba-coverage/pom.xml index e63ab615..684372fe 100644 --- a/spring-cloud-alibaba-coverage/pom.xml +++ b/spring-cloud-alibaba-coverage/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 @@ -13,7 +13,7 @@ Spring Cloud Alibaba Coverage - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT diff --git a/spring-cloud-alibaba-dependencies/pom.xml b/spring-cloud-alibaba-dependencies/pom.xml index 4528c712..183b5eca 100644 --- a/spring-cloud-alibaba-dependencies/pom.xml +++ b/spring-cloud-alibaba-dependencies/pom.xml @@ -6,13 +6,13 @@ spring-cloud-dependencies-parent org.springframework.cloud - 2.2.1.RELEASE + 2.2.0.RELEASE com.alibaba.cloud spring-cloud-alibaba-dependencies - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT pom Spring Cloud Alibaba Dependencies Spring Cloud Alibaba Dependencies @@ -402,6 +402,7 @@ + spring @@ -432,13 +433,6 @@ false - - sonatype-nexus - https://oss.sonatype.org/content/repositories/releases - - true - - @@ -460,7 +454,16 @@ false + + spring-releases + Spring Releases + https://repo.spring.io/libs-release-local + + false + + + diff --git a/spring-cloud-alibaba-docs/pom.xml b/spring-cloud-alibaba-docs/pom.xml index ede7e416..9b486a08 100644 --- a/spring-cloud-alibaba-docs/pom.xml +++ b/spring-cloud-alibaba-docs/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/dependency-management.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/dependency-management.adoc index c0c263da..834bf75c 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/dependency-management.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/dependency-management.adoc @@ -10,7 +10,7 @@ Spring Cloud Alibaba BOM 包含了它所使用的所有依赖的版本。 com.alibaba.cloud spring-cloud-alibaba-dependencies - 2.1.1.BUILD-SNAPSHOT + 2.2.0.RELEASE pom import diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/dependency-management.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/dependency-management.adoc index a66eb70b..ee22c0e4 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/dependency-management.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/dependency-management.adoc @@ -8,7 +8,7 @@ If you’re a Maven Central user, add our BOM to your pom.xml com.alibaba.cloud spring-cloud-alibaba-dependencies - 2.1.1.BUILD-SNAPSHOT + 2.2.0.RELEASE pom import diff --git a/spring-cloud-alibaba-dubbo/pom.xml b/spring-cloud-alibaba-dubbo/pom.xml index ee71456f..2b6860cc 100644 --- a/spring-cloud-alibaba-dubbo/pom.xml +++ b/spring-cloud-alibaba-dubbo/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml 4.0.0 @@ -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-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/repository/DubboServiceMetadataRepository.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/repository/DubboServiceMetadataRepository.java index 7c80c037..abd27b7f 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/repository/DubboServiceMetadataRepository.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/metadata/repository/DubboServiceMetadataRepository.java @@ -297,12 +297,15 @@ public class DubboServiceMetadataRepository } /** - * Remove the metadata of Dubbo Services if no there is no service instance. + * Remove the metadata and initialized service of Dubbo Services if no there is no + * service instance. * @param serviceName the service name */ - public void removeInitializedService(String serviceName) { + public void removeMetadataAndInitializedService(String serviceName) { synchronized (monitor) { initializedServices.remove(serviceName); + dubboRestServiceMetadataRepository.remove(serviceName); + subscribedDubboMetadataServiceURLs.remove(serviceName); } } @@ -644,11 +647,6 @@ public class DubboServiceMetadataRepository dubboMetadataConfigServiceProxy.initProxy(serviceName, version); } - public void removeMetadata(String serviceName) { - dubboRestServiceMetadataRepository.remove(serviceName); - subscribedDubboMetadataServiceURLs.remove(serviceName); - } - @Override public void setApplicationEventPublisher( ApplicationEventPublisher applicationEventPublisher) { diff --git a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java index 6844f142..2ba34d0a 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/com/alibaba/cloud/dubbo/registry/AbstractSpringCloudRegistry.java @@ -224,8 +224,7 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { if (CollectionUtils.isEmpty(serviceInstances)) { dubboMetadataConfigServiceProxy.removeProxy(serviceName); - repository.removeInitializedService(serviceName); - repository.removeMetadata(serviceName); + repository.removeMetadataAndInitializedService(serviceName); dubboGenericServiceFactory.destroy(serviceName); if (logger.isWarnEnabled()) { logger.warn( diff --git a/spring-cloud-alibaba-examples/acm-example/acm-local-example/pom.xml b/spring-cloud-alibaba-examples/acm-example/acm-local-example/pom.xml index 9111c4dd..7d0760af 100644 --- a/spring-cloud-alibaba-examples/acm-example/acm-local-example/pom.xml +++ b/spring-cloud-alibaba-examples/acm-example/acm-local-example/pom.xml @@ -5,7 +5,7 @@ spring-cloud-alibaba-examples com.alibaba.cloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/resources/bootstrap.properties b/spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/resources/bootstrap.properties index 5d7206d0..7728d230 100644 --- a/spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/resources/bootstrap.properties +++ b/spring-cloud-alibaba-examples/acm-example/acm-local-example/src/main/resources/bootstrap.properties @@ -3,3 +3,4 @@ server.port=18089 spring.cloud.alicloud.acm.server-list=127.0.0.1 spring.cloud.alicloud.acm.server-port=8080 management.endpoints.web.exposure.include=* +management.endpoint.health.show-details=always diff --git a/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/pom.xml b/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/pom.xml index 5a631c0a..0242c805 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/pom.xml +++ b/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/pom.xml @@ -5,7 +5,7 @@ spring-cloud-alibaba-examples com.alibaba.cloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/pom.xml b/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/pom.xml index a53d0b51..75ecbdc5 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/pom.xml +++ b/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/pom.xml @@ -5,7 +5,7 @@ spring-cloud-alibaba-examples com.alibaba.cloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/resources/application.properties index c7856354..a7063224 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/src/main/resources/application.properties @@ -3,3 +3,5 @@ server.port=18082 # The following configuration can be omitted. spring.cloud.alicloud.ans.server-list=127.0.0.1 spring.cloud.alicloud.ans.server-port=8080 +management.endpoints.web.exposure.include=* +management.endpoint.health.show-details=always diff --git a/spring-cloud-alibaba-examples/ans-example/ans-provider-example/pom.xml b/spring-cloud-alibaba-examples/ans-example/ans-provider-example/pom.xml index f3acbaa7..92358702 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-provider-example/pom.xml +++ b/spring-cloud-alibaba-examples/ans-example/ans-provider-example/pom.xml @@ -5,7 +5,7 @@ spring-cloud-alibaba-examples com.alibaba.cloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/resources/application.properties index 27423515..92029764 100644 --- a/spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/ans-example/ans-provider-example/src/main/resources/application.properties @@ -2,3 +2,5 @@ spring.application.name=ans-provider server.port=18081 spring.cloud.alicloud.ans.server-list=127.0.0.1 spring.cloud.alicloud.ans.server-port=8080 +management.endpoints.web.exposure.include=* +management.endpoint.health.show-details=always diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/pom.xml index 80853890..c2c1aa7f 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 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 30ef8884..ce693054 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 @@ -123,7 +123,7 @@ class SampleRunner implements ApplicationRunner { * * user.name=Nacos user.age=25 * @param configInfo latest config data for specific dataId in Nacos - * server + * server */ @Override public void receiveConfigInfo(String configInfo) { diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/resources/application.properties index de11d576..95efafd6 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/src/main/resources/application.properties @@ -1,2 +1,3 @@ server.port=18084 management.endpoints.web.exposure.include=* +management.endpoint.health.show-details=always diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml index 4fee805a..6836e986 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud nacos-discovery-example - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/pom.xml index dc211efe..69d86bb5 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud nacos-discovery-example - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 @@ -41,6 +41,11 @@ spring-cloud-starter-loadbalancer + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + org.springframework.cloud spring-cloud-starter-openfeign diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/openfeign.sh b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/error.sh similarity index 50% rename from spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/openfeign.sh rename to spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/error.sh index 975d060d..5602a98d 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/openfeign.sh +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/error.sh @@ -2,6 +2,6 @@ n=1 while [ $n -le 10 ] do - echo `curl -s http://localhost:18083/echo-feign/openfeign` + echo `curl -s http://localhost:18083/test` let n++ done diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/feign-defaultmethod-error.sh b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/feign-defaultmethod-error.sh new file mode 100644 index 00000000..6efb8368 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/feign-defaultmethod-error.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +n=1 +while [ $n -le 10 ] +do + echo `curl -s http://localhost:18083/divide-feign2?a=1` + let n++ +done diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/feign-error.sh b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/feign-error.sh new file mode 100644 index 00000000..09db2477 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/feign-error.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +n=1 +while [ $n -le 10 ] +do + echo `curl -s http://localhost:18083/divide-feign?a=1\&b=0` + let n++ +done diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/index.sh b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/index.sh new file mode 100644 index 00000000..7db176b8 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/index.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +n=1 +while [ $n -le 10 ] +do + echo `curl -s http://localhost:18083/index` + let n++ +done diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/sleep.sh b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/sleep.sh new file mode 100644 index 00000000..423c3d15 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/sleep.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +n=1 +while [ $n -le 10 ] +do + echo `curl -s http://localhost:18083/sleep` + let n++ +done diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java index d60b2134..9cb57f9b 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java @@ -19,6 +19,8 @@ package com.alibaba.cloud.examples; import java.util.List; import java.util.Random; +import com.alibaba.cloud.examples.ConsumerSCLBApplication.EchoService; +import com.alibaba.cloud.sentinel.annotation.SentinelRestTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Mono; @@ -28,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.client.loadbalancer.reactive.DefaultResponse; @@ -58,10 +61,18 @@ public class ConsumerSCLBApplication { @LoadBalanced @Bean + @SentinelRestTemplate(urlCleanerClass = UrlCleaner.class, urlCleaner = "clean") public RestTemplate restTemplate() { return new RestTemplate(); } + @LoadBalanced + @Bean + @SentinelRestTemplate + public RestTemplate restTemplate1() { + return new RestTemplate(); + } + public static void main(String[] args) { SpringApplication.run(ConsumerSCLBApplication.class, args); } @@ -112,7 +123,8 @@ public class ConsumerSCLBApplication { } - @FeignClient(name = "service-provider") + @FeignClient(name = "service-provider", fallback = EchoServiceFallback.class, + configuration = FeignConfiguration.class) public interface EchoService { @GetMapping("/echo/{str}") @@ -136,9 +148,15 @@ public class ConsumerSCLBApplication { @Autowired private RestTemplate restTemplate; + @Autowired + private RestTemplate restTemplate1; + @Autowired private EchoService echoService; + @Autowired + private DiscoveryClient discoveryClient; + @GetMapping("/echo-rest/{str}") public String rest(@PathVariable String str) { return restTemplate.getForObject("http://service-provider/echo/" + str, @@ -150,6 +168,76 @@ public class ConsumerSCLBApplication { return echoService.echo(str); } + @GetMapping("/index") + public String index() { + return restTemplate1.getForObject("http://service-provider", String.class); + } + + @GetMapping("/test") + public String test() { + return restTemplate1.getForObject("http://service-provider/test", + String.class); + } + + @GetMapping("/sleep") + public String sleep() { + return restTemplate1.getForObject("http://service-provider/sleep", + String.class); + } + + @GetMapping("/notFound-feign") + public String notFound() { + return echoService.notFound(); + } + + @GetMapping("/divide-feign") + public String divide(@RequestParam Integer a, @RequestParam Integer b) { + return echoService.divide(a, b); + } + + @GetMapping("/divide-feign2") + public String divide(@RequestParam Integer a) { + return echoService.divide(a); + } + + @GetMapping("/services/{service}") + public Object client(@PathVariable String service) { + return discoveryClient.getInstances(service); + } + + @GetMapping("/services") + public Object services() { + return discoveryClient.getServices(); + } + + } + +} + +class FeignConfiguration { + + @Bean + public EchoServiceFallback echoServiceFallback() { + return new EchoServiceFallback(); + } + +} + +class EchoServiceFallback implements EchoService { + + @Override + public String echo(@PathVariable("str") String str) { + return "echo fallback"; + } + + @Override + public String divide(@RequestParam Integer a, @RequestParam Integer b) { + return "divide fallback"; + } + + @Override + public String notFound() { + return "notFound fallback"; } } diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/UrlCleaner.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/UrlCleaner.java new file mode 100644 index 00000000..e0c691af --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/UrlCleaner.java @@ -0,0 +1,30 @@ +/* + * Copyright 2013-2018 the original author or authors. + * + * Licensed 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 + * + * https://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.examples; + +public class UrlCleaner { + + public static String clean(String url) { + System.out.println("enter urlCleaner"); + if (url.matches(".*/echo/.*")) { + System.out.println("change url"); + url = url.replaceAll("/echo/.*", "/echo/{str}"); + } + return url; + } + +} diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/application.properties index 40c2b2f5..47822c34 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/application.properties @@ -4,3 +4,16 @@ management.endpoints.web.exposure.include=* spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 spring.cloud.loadbalancer.ribbon.enabled=false + +feign.sentinel.enabled=true + +spring.cloud.sentinel.transport.dashboard=localhost:8080 +spring.cloud.sentinel.eager=true + +spring.cloud.sentinel.datasource.ds1.file.file=classpath: flowrule.json +spring.cloud.sentinel.datasource.ds1.file.data-type=json +spring.cloud.sentinel.datasource.ds1.file.rule-type=flow + +spring.cloud.sentinel.datasource.ds2.file.file=classpath: degraderule.json +spring.cloud.sentinel.datasource.ds2.file.data-type=json +spring.cloud.sentinel.datasource.ds2.file.rule-type=degrade diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/degraderule.json b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/degraderule.json new file mode 100644 index 00000000..75e9d3b3 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/degraderule.json @@ -0,0 +1,26 @@ +[ + { + "resource": "GET:http://service-provider/test", + "count": 0.5, + "grade": 1, + "timeWindow": 30 + }, + { + "resource": "GET:http://service-provider", + "count": 0.5, + "grade": 1, + "timeWindow": 10 + }, + { + "resource": "GET:http://service-provider/sleep", + "count": 20.0, + "grade": 0, + "timeWindow": 30 + }, + { + "resource": "GET:http://service-provider/divide", + "count": 0.5, + "grade": 1, + "timeWindow": 30 + } +] \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/flowrule.json b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/flowrule.json new file mode 100644 index 00000000..5260bbe6 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/flowrule.json @@ -0,0 +1,10 @@ +[ + { + "resource": "GET:http://service-provider/echo/{str}", + "controlBehavior": 0, + "count": 2, + "grade": 1, + "limitApp": "default", + "strategy": 0 + } +] diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/pom.xml index a4e120ac..09a5e33a 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud nacos-discovery-example - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/resources/application.properties index dee115b6..16cf54e3 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/src/main/resources/application.properties @@ -2,3 +2,4 @@ server.port=18082 spring.application.name=service-provider spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 management.endpoints.web.exposure.include=* +management.endpoint.health.show-details=always diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client-example/pom.xml index cc93b53d..e2b2d1d6 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-client-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud nacos-discovery-example - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-server-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-server-example/pom.xml index bc04d38f..0402b2af 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-server-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-spring-cloud-config-server-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud nacos-discovery-example - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-reactivediscovery-consumer-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-reactivediscovery-consumer-example/pom.xml index 70487968..b021aa3d 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-reactivediscovery-consumer-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-reactivediscovery-consumer-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud nacos-discovery-example - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml index a0be8ef0..b067a041 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/pom.xml index 92af4fbb..726195a3 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud nacos-gateway-example - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/pom.xml index 6c722850..a7d78adb 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud nacos-gateway-example - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/pom.xml index 6152c574..3c1b6f7b 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/oss-example/pom.xml b/spring-cloud-alibaba-examples/oss-example/pom.xml index e4785862..1e20ba52 100644 --- a/spring-cloud-alibaba-examples/oss-example/pom.xml +++ b/spring-cloud-alibaba-examples/oss-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alibaba-examples/pom.xml b/spring-cloud-alibaba-examples/pom.xml index b4cac1f9..b4e6e49e 100644 --- a/spring-cloud-alibaba-examples/pom.xml +++ b/spring-cloud-alibaba-examples/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/pom.xml b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/pom.xml index 1a3d3646..27ea18a7 100644 --- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/pom.xml +++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/pom.xml b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/pom.xml index 663ff8ee..e51cd32c 100644 --- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/pom.xml +++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/pom.xml b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/pom.xml index 3467be0c..406b3c47 100644 --- a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/pom.xml +++ b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/pom.xml @@ -5,7 +5,7 @@ spring-cloud-alibaba-examples com.alibaba.cloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/seata-example/account-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/account-service/pom.xml index 00bfe262..a4fbd44b 100644 --- a/spring-cloud-alibaba-examples/seata-example/account-service/pom.xml +++ b/spring-cloud-alibaba-examples/seata-example/account-service/pom.xml @@ -5,7 +5,7 @@ spring-cloud-alibaba-examples com.alibaba.cloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 @@ -16,6 +16,10 @@ com.alibaba.cloud spring-cloud-starter-alibaba-seata + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + org.springframework.boot spring-boot-starter-web diff --git a/spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/application.properties index 29ac8d05..3362a705 100644 --- a/spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/application.properties @@ -1,5 +1,6 @@ spring.application.name=account-service server.port=18084 +spring.cloud.nacos.discovery.server-addr=localhost:8848 spring.datasource.name="accountDataSource" spring.datasource.type=com.alibaba.druid.pool.DruidDataSource diff --git a/spring-cloud-alibaba-examples/seata-example/business-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/business-service/pom.xml index 50425c36..54f24ffd 100644 --- a/spring-cloud-alibaba-examples/seata-example/business-service/pom.xml +++ b/spring-cloud-alibaba-examples/seata-example/business-service/pom.xml @@ -5,7 +5,7 @@ spring-cloud-alibaba-examples com.alibaba.cloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 @@ -16,17 +16,21 @@ com.alibaba.cloud spring-cloud-starter-alibaba-seata + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + org.springframework.cloud spring-cloud-starter-openfeign org.springframework.cloud - spring-cloud-starter-loadbalancer + spring-cloud-starter-netflix-hystrix org.springframework.cloud - spring-cloud-starter-netflix-hystrix + spring-cloud-starter-loadbalancer org.springframework.boot diff --git a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/BusinessApplication.java b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/BusinessApplication.java index b130d13d..e708c009 100644 --- a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/BusinessApplication.java +++ b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/BusinessApplication.java @@ -18,11 +18,13 @@ package com.alibaba.cloud.examples; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.context.annotation.Bean; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.client.RestTemplate; @@ -31,6 +33,7 @@ import org.springframework.web.client.RestTemplate; */ @SpringBootApplication @EnableFeignClients +@EnableDiscoveryClient(autoRegister = false) public class BusinessApplication { public static void main(String[] args) { @@ -42,16 +45,16 @@ public class BusinessApplication { return new RestTemplate(); } - @FeignClient(value = "storage", url = "http://127.0.0.1:18082") + @FeignClient("storage-service") public interface StorageService { - @RequestMapping(path = "/storage/{commodityCode}/{count}") - String storage(@RequestParam("commodityCode") String commodityCode, - @RequestParam("count") int count); + @GetMapping(path = "/storage/{commodityCode}/{count}") + String storage(@PathVariable("commodityCode") String commodityCode, + @PathVariable("count") int count); } - @FeignClient(value = "order", url = "http://127.0.0.1:18083") + @FeignClient("order-service") public interface OrderService { @PostMapping(path = "/order") diff --git a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/application.properties index f5c0cdb9..5bb78b60 100644 --- a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/application.properties @@ -1,5 +1,6 @@ server.port=18081 spring.application.name=business-service +spring.cloud.nacos.discovery.server-addr=localhost:8848 # The following configuration can be omitted. #feign.hystrix.enabled=true @@ -12,6 +13,8 @@ seata.service.vgroup-mapping=default seata.service.grouplist=127.0.0.1:8091 seata.service.disable-global-transaction=false +spring.cloud.loadbalancer.ribbon.enabled=true + ## if use registry center #seata.registry.type=nacos #seata.registry.nacos.cluster=default diff --git a/spring-cloud-alibaba-examples/seata-example/order-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/order-service/pom.xml index 65cbc0c0..7d35ee32 100644 --- a/spring-cloud-alibaba-examples/seata-example/order-service/pom.xml +++ b/spring-cloud-alibaba-examples/seata-example/order-service/pom.xml @@ -5,13 +5,17 @@ spring-cloud-alibaba-examples com.alibaba.cloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 order-service + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + com.alibaba.cloud spring-cloud-starter-alibaba-seata diff --git a/spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/application.properties index ada9995b..31248d2e 100644 --- a/spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/application.properties @@ -1,5 +1,6 @@ spring.application.name=order-service server.port=18083 +spring.cloud.nacos.discovery.server-addr=localhost:8848 spring.datasource.name="orderDataSource" spring.datasource.type=com.alibaba.druid.pool.DruidDataSource diff --git a/spring-cloud-alibaba-examples/seata-example/storage-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/storage-service/pom.xml index b5c3f3bb..276be3a8 100644 --- a/spring-cloud-alibaba-examples/seata-example/storage-service/pom.xml +++ b/spring-cloud-alibaba-examples/seata-example/storage-service/pom.xml @@ -5,7 +5,7 @@ spring-cloud-alibaba-examples com.alibaba.cloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 @@ -16,6 +16,10 @@ com.alibaba.cloud spring-cloud-starter-alibaba-seata + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + org.springframework.boot spring-boot-starter-web diff --git a/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/application.properties index 49b36889..3372daec 100644 --- a/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/application.properties @@ -1,5 +1,6 @@ spring.application.name=storage-service server.port=18082 +spring.cloud.nacos.discovery.server-addr=localhost:8848 spring.datasource.name="storageDataSource" spring.datasource.type=com.alibaba.druid.pool.DruidDataSource diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/pom.xml index 2db02dc2..597311dc 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/TestController.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/TestController.java index ffacf273..5ca27cd1 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/TestController.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/TestController.java @@ -60,14 +60,14 @@ public class TestController { @GetMapping("/slow") public String slow() { - return circuitBreakerFactory.create("show").run(() -> { + return circuitBreakerFactory.create("slow").run(() -> { try { - Thread.sleep(1000L); + Thread.sleep(500L); } catch (InterruptedException e) { e.printStackTrace(); } - return "success"; + return "slow"; }, throwable -> "fallback"); } diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/pom.xml index 3eeabc47..ad4190ad 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/pom.xml index 99e0e1c2..a384f4e0 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/pom.xml index 570f421b..ba8ac834 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/pom.xml index 095bb5ef..019e1bf8 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-consumer-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-provider-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-provider-example/pom.xml index 00987133..ddfceddd 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-provider-example/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-feign-example/sentinel-feign-provider-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/pom.xml index d5affb7f..46efa251 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/pom.xml index 26750333..ce3a18e3 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/MyConfiguration.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/MyConfiguration.java index dd8df034..adce4819 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/MyConfiguration.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/MyConfiguration.java @@ -16,9 +16,16 @@ package com.alibaba.cloud.examples; +import java.util.Collections; + +import com.alibaba.cloud.circuitbreaker.sentinel.ReactiveSentinelCircuitBreakerFactory; +import com.alibaba.cloud.circuitbreaker.sentinel.SentinelConfigBuilder; import com.alibaba.csp.sentinel.adapter.spring.webflux.callback.BlockRequestHandler; +import com.alibaba.csp.sentinel.slots.block.RuleConstant; +import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; import reactor.core.publisher.Mono; +import org.springframework.cloud.client.circuitbreaker.Customizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpStatus; @@ -46,4 +53,23 @@ public class MyConfiguration { }; } + @Bean + public Customizer slowCustomizer() { + return factory -> { + factory.configure(builder -> builder.rules(Collections.singletonList( + new DegradeRule("slow_mono").setGrade(RuleConstant.DEGRADE_GRADE_RT) + .setCount(100).setTimeWindow(5))), + "slow_mono"); + factory.configure(builder -> builder.rules(Collections.singletonList( + new DegradeRule("slow_flux").setGrade(RuleConstant.DEGRADE_GRADE_RT) + .setCount(100).setTimeWindow(5))), + "slow_flux"); + factory.configureDefault(id -> new SentinelConfigBuilder().resourceName(id) + .rules(Collections.singletonList(new DegradeRule(id) + .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT) + .setCount(0.5).setTimeWindow(10))) + .build()); + }; + } + } diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/SentinelWebFluxController.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/SentinelWebFluxController.java index 5bf96332..d0b45891 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/SentinelWebFluxController.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/SentinelWebFluxController.java @@ -20,8 +20,11 @@ import com.alibaba.csp.sentinel.adapter.reactor.SentinelReactorTransformer; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.client.circuitbreaker.ReactiveCircuitBreakerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.reactive.function.client.WebClient; /** * @author Jim @@ -29,6 +32,9 @@ import org.springframework.web.bind.annotation.RestController; @RestController public class SentinelWebFluxController { + @Autowired + private ReactiveCircuitBreakerFactory circuitBreakerFactory; + @GetMapping("/mono") public Mono mono() { return Mono.just("simple string") @@ -50,4 +56,26 @@ public class SentinelWebFluxController { .transform(new SentinelReactorTransformer<>("flux")); } + @GetMapping("/cbSlow") + public Mono cbSlow() { + int delaySecs = 2; + return WebClient.builder().baseUrl("http://httpbin.org/").build().get() + .uri("/delay/" + delaySecs).retrieve().bodyToMono(String.class) + .transform(it -> circuitBreakerFactory.create("slow_mono").run(it, t -> { + t.printStackTrace(); + return Mono.just("fallback"); + })); + } + + @GetMapping("/cbError") + public Mono cbError() { + String code = "500"; + return WebClient.builder().baseUrl("http://httpbin.org/").build().get() + .uri("/status/" + code).retrieve().bodyToMono(String.class) + .transform(it -> circuitBreakerFactory.create("cbError").run(it, t -> { + t.printStackTrace(); + return Mono.just("fallback"); + })); + } + } diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/pom.xml index 64412863..5116bd6b 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/pom.xml +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/sms-example/pom.xml b/spring-cloud-alibaba-examples/sms-example/pom.xml index 781ec373..252f42a9 100644 --- a/spring-cloud-alibaba-examples/sms-example/pom.xml +++ b/spring-cloud-alibaba-examples/sms-example/pom.xml @@ -10,7 +10,7 @@ spring-cloud-alibaba-examples com.alibaba.cloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml 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 40726544..2a6990b1 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 @@ -5,14 +5,14 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml 4.0.0 com.alibaba.cloud spring-cloud-alibaba-dubbo-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT Spring Cloud Alibaba Dubbo Examples pom diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/pom.xml index e011c67b..b850d55f 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-dubbo-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml 4.0.0 @@ -13,7 +13,7 @@ com.alibaba.cloud spring-cloud-dubbo-client-sample Spring Cloud Dubbo Client Sample - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 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 d038240b..e46c74c7 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 @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-dubbo-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml 4.0.0 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..c2ecf556 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 @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-dubbo-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml 4.0.0 @@ -136,18 +136,6 @@ - - - - org.apache.dubbo - dubbo-bom - ${dubbo.version} - pom - import - - - - 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 13501834..219365b7 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 @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-dubbo-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/pom.xml index 0ae78ede..f3ae752c 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-dubbo-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/pom.xml index 8e9bf8b5..cbf3aac6 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-dubbo-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml @@ -14,7 +14,7 @@ com.alibaba.cloud spring-cloud-dubbo-server-sample Spring Cloud Dubbo Server Sample - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 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 b085481a..b619a7cc 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 @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba-dubbo-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-consul-example/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-consul-example/pom.xml index 3583a0fc..07124fac 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-consul-example/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-consul-example/pom.xml @@ -4,7 +4,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-nacos-example/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-nacos-example/pom.xml index 59a8fb1a..5da029c2 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-nacos-example/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-sidecar-examples/spring-cloud-alibaba-sidecar-nacos-example/pom.xml @@ -4,7 +4,7 @@ com.alibaba.cloud spring-cloud-alibaba-examples - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/pom.xml index 96e60a53..1150cc0b 100644 --- a/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/pom.xml +++ b/spring-cloud-alibaba-examples/spring-cloud-bus-rocketmq-example/pom.xml @@ -5,7 +5,7 @@ spring-cloud-alibaba-examples com.alibaba.cloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-nacos-config-server/pom.xml b/spring-cloud-alibaba-nacos-config-server/pom.xml index 2823696f..93782dc6 100644 --- a/spring-cloud-alibaba-nacos-config-server/pom.xml +++ b/spring-cloud-alibaba-nacos-config-server/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml 4.0.0 diff --git a/spring-cloud-alibaba-nacos-config/pom.xml b/spring-cloud-alibaba-nacos-config/pom.xml index b51f6d9d..a2cff008 100644 --- a/spring-cloud-alibaba-nacos-config/pom.xml +++ b/spring-cloud-alibaba-nacos-config/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java index db865160..fff267a9 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/NacosConfigProperties.java @@ -32,6 +32,7 @@ import javax.annotation.PostConstruct; import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.spring.util.PropertySourcesUtils; +import com.fasterxml.jackson.annotation.JsonIgnore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -88,6 +89,7 @@ public class NacosConfigProperties { .getLogger(NacosConfigProperties.class); @Autowired + @JsonIgnore private Environment environment; @PostConstruct diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceBuilder.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceBuilder.java index 767a72c1..7c3dbaa7 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceBuilder.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/client/NacosPropertySourceBuilder.java @@ -17,9 +17,8 @@ package com.alibaba.cloud.nacos.client; import java.util.Date; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; -import java.util.Properties; import com.alibaba.cloud.nacos.NacosPropertySourceRepository; import com.alibaba.cloud.nacos.parser.NacosDataParserHandler; @@ -39,7 +38,7 @@ public class NacosPropertySourceBuilder { private static final Logger log = LoggerFactory .getLogger(NacosPropertySourceBuilder.class); - private static final Properties EMPTY_PROPERTIES = new Properties(); + private static final Map EMPTY_MAP = new LinkedHashMap(); private ConfigService configService; @@ -72,14 +71,15 @@ public class NacosPropertySourceBuilder { */ NacosPropertySource build(String dataId, String group, String fileExtension, boolean isRefreshable) { - Properties p = loadNacosData(dataId, group, fileExtension); + Map p = loadNacosData(dataId, group, fileExtension); NacosPropertySource nacosPropertySource = new NacosPropertySource(group, dataId, - propertiesToMap(p), new Date(), isRefreshable); + p, new Date(), isRefreshable); NacosPropertySourceRepository.collectNacosPropertySource(nacosPropertySource); return nacosPropertySource; } - private Properties loadNacosData(String dataId, String group, String fileExtension) { + private Map loadNacosData(String dataId, String group, + String fileExtension) { String data = null; try { data = configService.getConfig(dataId, group, timeout); @@ -87,16 +87,16 @@ public class NacosPropertySourceBuilder { log.warn( "Ignore the empty nacos configuration and get it based on dataId[{}] & group[{}]", dataId, group); - return EMPTY_PROPERTIES; + return EMPTY_MAP; } if (log.isDebugEnabled()) { log.debug(String.format( "Loading nacos data, dataId: '%s', group: '%s', data: %s", dataId, group, data)); } - Properties properties = NacosDataParserHandler.getInstance() + Map dataMap = NacosDataParserHandler.getInstance() .parseNacosData(data, fileExtension); - return properties == null ? EMPTY_PROPERTIES : properties; + return dataMap == null ? EMPTY_MAP : dataMap; } catch (NacosException e) { log.error("get data from Nacos error,dataId:{}, ", dataId, e); @@ -104,14 +104,7 @@ public class NacosPropertySourceBuilder { catch (Exception e) { log.error("parse data from Nacos error,dataId:{},data:{},", dataId, data, e); } - return EMPTY_PROPERTIES; - } - - @SuppressWarnings("unchecked") - private Map propertiesToMap(Properties properties) { - Map result = new HashMap<>(16); - properties.forEach((k, v) -> result.put(String.valueOf(k), v)); - return result; + return EMPTY_MAP; } } 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..affd0139 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-config/src/main/java/com/alibaba/cloud/nacos/parser/AbstractNacosDataParser.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/AbstractNacosDataParser.java index 4109b049..6f94cb6c 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/AbstractNacosDataParser.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/AbstractNacosDataParser.java @@ -17,9 +17,12 @@ package com.alibaba.cloud.nacos.parser; import java.io.IOException; -import java.util.HashMap; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.Map; -import java.util.Properties; +import java.util.Set; import org.springframework.util.StringUtils; @@ -32,6 +35,8 @@ public abstract class AbstractNacosDataParser { protected static final String VALUE = "value"; + protected static final String EMPTY_STRING = ""; + private String extension; private AbstractNacosDataParser nextParser; @@ -66,7 +71,7 @@ public abstract class AbstractNacosDataParser { * @return result of Properties * @throws IOException thrown if there is a problem parsing config. */ - public final Properties parseNacosData(String data, String extension) + public final Map parseNacosData(String data, String extension) throws IOException { if (extension == null || extension.length() < 1) { throw new IllegalStateException("The file extension cannot be empty"); @@ -86,7 +91,7 @@ public abstract class AbstractNacosDataParser { * @return result of Properties * @throws IOException thrown if there is a problem parsing config. */ - protected abstract Properties doParse(String data) throws IOException; + protected abstract Map doParse(String data) throws IOException; protected AbstractNacosDataParser setNextParser(AbstractNacosDataParser nextParser) { this.nextParser = nextParser; @@ -108,23 +113,36 @@ public abstract class AbstractNacosDataParser { || this.extension.contains(extension); } - /** - * Generate key-value pairs from the map. - */ - protected Properties generateProperties(Map map) { - if (null == map || map.isEmpty()) { - return null; - } - Properties properties = new Properties(); - for (Map.Entry entry : map.entrySet()) { + protected void flattenedMap(Map result, Map dataMap, + String parentKey) { + Set> entries = dataMap.entrySet(); + for (Iterator> iterator = entries.iterator(); iterator + .hasNext();) { + Map.Entry entry = iterator.next(); String key = entry.getKey(); - if (StringUtils.isEmpty(key)) { + Object value = entry.getValue(); + + String fullKey = StringUtils.isEmpty(parentKey) ? key : key.startsWith("[") + ? parentKey.concat(key) : parentKey.concat(DOT).concat(key); + + if (value instanceof Map) { + Map map = (Map) value; + flattenedMap(result, map, fullKey); continue; } - key = key.startsWith(DOT) ? key.replaceFirst("\\.", "") : key; - properties.put(key, entry.getValue()); + else if (value instanceof Collection) { + int count = 0; + Collection collection = (Collection) value; + for (Object object : collection) { + flattenedMap(result, + Collections.singletonMap("[" + (count++) + "]", object), + fullKey); + } + continue; + } + + result.put(fullKey, value); } - return properties; } /** @@ -134,7 +152,7 @@ public abstract class AbstractNacosDataParser { if (map == null || map.isEmpty()) { return null; } - Map result = new HashMap<>(map); + Map result = new LinkedHashMap<>(map); for (Map.Entry entry : map.entrySet()) { String key = entry.getKey(); if (key.contains(DOT)) { diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataJsonParser.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataJsonParser.java index 7b22192d..d33cf62f 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataJsonParser.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataJsonParser.java @@ -17,13 +17,8 @@ package com.alibaba.cloud.nacos.parser; import java.io.IOException; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.Map; -import java.util.Properties; -import java.util.Set; import com.fasterxml.jackson.databind.ObjectMapper; @@ -41,12 +36,12 @@ public class NacosDataJsonParser extends AbstractNacosDataParser { } @Override - protected Properties doParse(String data) throws IOException { + protected Map doParse(String data) throws IOException { if (StringUtils.isEmpty(data)) { return null; } Map map = parseJSON2Map(data); - return this.generateProperties(this.reloadMap(map)); + return this.reloadMap(map); } /** @@ -55,49 +50,17 @@ public class NacosDataJsonParser extends AbstractNacosDataParser { * @return the map convert by json string * @throws IOException thrown if there is a problem parsing config. */ - public static Map parseJSON2Map(String json) throws IOException { - Map result = new HashMap<>(32); + private Map parseJSON2Map(String json) throws IOException { + Map result = new LinkedHashMap<>(32); ObjectMapper mapper = new ObjectMapper(); - Map nacosDataMap = mapper.readValue(json, Map.class); + Map nacosDataMap = mapper.readValue(json, LinkedHashMap.class); if (CollectionUtils.isEmpty(nacosDataMap)) { return result; } - parseNacosDataMap(result, nacosDataMap, ""); + flattenedMap(result, nacosDataMap, EMPTY_STRING); return result; } - private static void parseNacosDataMap(Map result, - Map dataMap, String parentKey) { - Set> entries = dataMap.entrySet(); - for (Iterator> iterator = entries.iterator(); iterator - .hasNext();) { - Map.Entry entry = iterator.next(); - String key = entry.getKey(); - Object value = entry.getValue(); - - String fullKey = StringUtils.isEmpty(parentKey) ? key : key.startsWith("[") - ? parentKey.concat(key) : parentKey.concat(DOT).concat(key); - - if (value instanceof Map) { - Map map = (Map) value; - parseNacosDataMap(result, map, fullKey); - continue; - } - else if (value instanceof Collection) { - int count = 0; - Collection collection = (Collection) value; - for (Object object : collection) { - parseNacosDataMap(result, - Collections.singletonMap("[" + (count++) + "]", object), - fullKey); - } - continue; - } - - result.put(fullKey, value); - } - } - } diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataParserHandler.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataParserHandler.java index 5aabf804..f5787e79 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataParserHandler.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataParserHandler.java @@ -17,7 +17,7 @@ package com.alibaba.cloud.nacos.parser; import java.io.IOException; -import java.util.Properties; +import java.util.Map; /** * @author zkz @@ -34,10 +34,11 @@ public final class NacosDataParserHandler { * Parsing nacos configuration content. * @param data config from Nacos * @param extension file extension. json or xml or yml or yaml or properties - * @return result of properties + * @return result of LinkedHashMap * @throws IOException thrown if there is a problem parsing config. */ - public Properties parseNacosData(String data, String extension) throws IOException { + public Map parseNacosData(String data, String extension) + throws IOException { if (null == parser) { parser = this.createParser(); } diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataPropertiesParser.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataPropertiesParser.java index a560648c..315caccb 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataPropertiesParser.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataPropertiesParser.java @@ -16,24 +16,49 @@ package com.alibaba.cloud.nacos.parser; +import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; -import java.util.Properties; +import java.util.LinkedHashMap; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.util.StringUtils; /** * @author zkz */ public class NacosDataPropertiesParser extends AbstractNacosDataParser { + private static final Logger log = LoggerFactory + .getLogger(NacosDataPropertiesParser.class); + public NacosDataPropertiesParser() { super("properties"); } @Override - protected Properties doParse(String data) throws IOException { - Properties properties = new Properties(); - properties.load(new StringReader(data)); - return properties; + protected Map doParse(String data) throws IOException { + Map result = new LinkedHashMap<>(); + + try (BufferedReader reader = new BufferedReader(new StringReader(data))) { + for (String line = reader.readLine(); line != null; line = reader + .readLine()) { + String dataLine = line.trim(); + if (StringUtils.isEmpty(dataLine) || dataLine.startsWith("#")) { + continue; + } + int index = dataLine.indexOf("="); + if (index == -1) { + log.warn("the config data is invalid {}", dataLine); + continue; + } + result.put(dataLine.substring(0, index), dataLine.substring(index + 1)); + } + } + return result; } } diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataXmlParser.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataXmlParser.java index 7a9c45d6..eab890b9 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataXmlParser.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataXmlParser.java @@ -18,9 +18,8 @@ package com.alibaba.cloud.nacos.parser; import java.io.IOException; import java.io.StringReader; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; -import java.util.Properties; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -46,17 +45,17 @@ public class NacosDataXmlParser extends AbstractNacosDataParser { } @Override - protected Properties doParse(String data) throws IOException { + protected Map doParse(String data) throws IOException { if (StringUtils.isEmpty(data)) { return null; } Map map = parseXml2Map(data); - return this.generateProperties(this.reloadMap(map)); + return this.reloadMap(map); } private Map parseXml2Map(String xml) throws IOException { xml = xml.replaceAll("\\r", "").replaceAll("\\n", "").replaceAll("\\t", ""); - Map map = new HashMap<>(32); + Map map = new LinkedHashMap<>(32); try { DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataYamlParser.java b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataYamlParser.java index c96105f3..b963a097 100644 --- a/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataYamlParser.java +++ b/spring-cloud-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataYamlParser.java @@ -16,9 +16,10 @@ package com.alibaba.cloud.nacos.parser; -import java.util.Properties; +import java.util.LinkedHashMap; +import java.util.Map; -import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; +import org.springframework.beans.factory.config.YamlMapFactoryBean; import org.springframework.core.io.ByteArrayResource; /** @@ -31,10 +32,13 @@ public class NacosDataYamlParser extends AbstractNacosDataParser { } @Override - protected Properties doParse(String data) { - YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean(); + protected Map doParse(String data) { + YamlMapFactoryBean yamlFactory = new YamlMapFactoryBean(); yamlFactory.setResources(new ByteArrayResource(data.getBytes())); - return yamlFactory.getObject(); + + Map result = new LinkedHashMap<>(); + flattenedMap(result, yamlFactory.getObject(), EMPTY_STRING); + return result; } } diff --git a/spring-cloud-alibaba-nacos-discovery/pom.xml b/spring-cloud-alibaba-nacos-discovery/pom.xml index c87b1793..d9a1c921 100644 --- a/spring-cloud-alibaba-nacos-discovery/pom.xml +++ b/spring-cloud-alibaba-nacos-discovery/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 @@ -108,6 +108,18 @@ reactor-test test + + org.powermock + powermock-module-junit4 + 2.0.0 + test + + + org.powermock + powermock-api-mockito2 + 2.0.0 + test + 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..61234516 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 @@ -54,8 +56,9 @@ public class NacosDiscoveryClientConfiguration { @ConditionalOnMissingBean @ConditionalOnProperty(value = "spring.cloud.nacos.discovery.watch.enabled", matchIfMissing = true) - public NacosWatch nacosWatch(NacosDiscoveryProperties nacosDiscoveryProperties) { - return new NacosWatch(nacosDiscoveryProperties); + 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..8742874e 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; } @@ -100,13 +106,17 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl @Override public void stop() { if (this.running.compareAndSet(true, false) && this.watchFuture != null) { + // shutdown current user-thread, + // then the other daemon-threads will terminate automatic. + ((ThreadPoolTaskScheduler)this.taskScheduler).shutdown(); + this.watchFuture.cancel(true); } } @Override public boolean isRunning() { - return false; + return this.running.get(); } @Override 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..5a925ec3 --- /dev/null +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/actuate/health/NacosDiscoveryHealthIndicator.java @@ -0,0 +1,59 @@ +/* + * Copyright 2013-2018 the original author or authors. + * + * Licensed 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 + * + * https://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..e5a4b515 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,12 @@ 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() { diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/MockNamingService.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/MockNamingService.java new file mode 100644 index 00000000..66753af7 --- /dev/null +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/MockNamingService.java @@ -0,0 +1,331 @@ +/* + * Copyright 2013-2018 the original author or authors. + * + * Licensed 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 + * + * https://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.registry; + +import java.util.List; + +import com.alibaba.nacos.api.exception.NacosException; +import com.alibaba.nacos.api.naming.NamingService; +import com.alibaba.nacos.api.naming.listener.EventListener; +import com.alibaba.nacos.api.naming.pojo.Instance; +import com.alibaba.nacos.api.naming.pojo.ListView; +import com.alibaba.nacos.api.naming.pojo.ServiceInfo; +import com.alibaba.nacos.api.selector.AbstractSelector; + +/** + * @author Jim + */ +public class MockNamingService implements NamingService { + + @Override + public void registerInstance(String serviceName, String ip, int port) + throws NacosException { + + } + + @Override + public void registerInstance(String serviceName, String groupName, String ip, + int port) throws NacosException { + + } + + @Override + public void registerInstance(String serviceName, String ip, int port, + String clusterName) throws NacosException { + + } + + @Override + public void registerInstance(String serviceName, String groupName, String ip, + int port, String clusterName) throws NacosException { + + } + + @Override + public void registerInstance(String serviceName, Instance instance) + throws NacosException { + + } + + @Override + public void registerInstance(String serviceName, String groupName, Instance instance) + throws NacosException { + + } + + @Override + public void deregisterInstance(String serviceName, String ip, int port) + throws NacosException { + + } + + @Override + public void deregisterInstance(String serviceName, String groupName, String ip, + int port) throws NacosException { + + } + + @Override + public void deregisterInstance(String serviceName, String ip, int port, + String clusterName) throws NacosException { + + } + + @Override + public void deregisterInstance(String serviceName, String groupName, String ip, + int port, String clusterName) throws NacosException { + + } + + @Override + public void deregisterInstance(String serviceName, Instance instance) + throws NacosException { + + } + + @Override + public void deregisterInstance(String serviceName, String groupName, + Instance instance) throws NacosException { + + } + + @Override + public List getAllInstances(String serviceName) throws NacosException { + return null; + } + + @Override + public List getAllInstances(String serviceName, String groupName) + throws NacosException { + return null; + } + + @Override + public List getAllInstances(String serviceName, boolean subscribe) + throws NacosException { + return null; + } + + @Override + public List getAllInstances(String serviceName, String groupName, + boolean subscribe) throws NacosException { + return null; + } + + @Override + public List getAllInstances(String serviceName, List clusters) + throws NacosException { + return null; + } + + @Override + public List getAllInstances(String serviceName, String groupName, + List clusters) throws NacosException { + return null; + } + + @Override + public List getAllInstances(String serviceName, List clusters, + boolean subscribe) throws NacosException { + return null; + } + + @Override + public List getAllInstances(String serviceName, String groupName, + List clusters, boolean subscribe) throws NacosException { + return null; + } + + @Override + public List selectInstances(String serviceName, boolean healthy) + throws NacosException { + return null; + } + + @Override + public List selectInstances(String serviceName, String groupName, + boolean healthy) throws NacosException { + return null; + } + + @Override + public List selectInstances(String serviceName, boolean healthy, + boolean subscribe) throws NacosException { + return null; + } + + @Override + public List selectInstances(String serviceName, String groupName, + boolean healthy, boolean subscribe) throws NacosException { + return null; + } + + @Override + public List selectInstances(String serviceName, List clusters, + boolean healthy) throws NacosException { + return null; + } + + @Override + public List selectInstances(String serviceName, String groupName, + List clusters, boolean healthy) throws NacosException { + return null; + } + + @Override + public List selectInstances(String serviceName, List clusters, + boolean healthy, boolean subscribe) throws NacosException { + return null; + } + + @Override + public List selectInstances(String serviceName, String groupName, + List clusters, boolean healthy, boolean subscribe) + throws NacosException { + return null; + } + + @Override + public Instance selectOneHealthyInstance(String serviceName) throws NacosException { + return null; + } + + @Override + public Instance selectOneHealthyInstance(String serviceName, String groupName) + throws NacosException { + return null; + } + + @Override + public Instance selectOneHealthyInstance(String serviceName, boolean subscribe) + throws NacosException { + return null; + } + + @Override + public Instance selectOneHealthyInstance(String serviceName, String groupName, + boolean subscribe) throws NacosException { + return null; + } + + @Override + public Instance selectOneHealthyInstance(String serviceName, List clusters) + throws NacosException { + return null; + } + + @Override + public Instance selectOneHealthyInstance(String serviceName, String groupName, + List clusters) throws NacosException { + return null; + } + + @Override + public Instance selectOneHealthyInstance(String serviceName, List clusters, + boolean subscribe) throws NacosException { + return null; + } + + @Override + public Instance selectOneHealthyInstance(String serviceName, String groupName, + List clusters, boolean subscribe) throws NacosException { + return null; + } + + @Override + public void subscribe(String serviceName, EventListener listener) + throws NacosException { + + } + + @Override + public void subscribe(String serviceName, String groupName, EventListener listener) + throws NacosException { + + } + + @Override + public void subscribe(String serviceName, List clusters, + EventListener listener) throws NacosException { + + } + + @Override + public void subscribe(String serviceName, String groupName, List clusters, + EventListener listener) throws NacosException { + + } + + @Override + public void unsubscribe(String serviceName, EventListener listener) + throws NacosException { + + } + + @Override + public void unsubscribe(String serviceName, String groupName, EventListener listener) + throws NacosException { + + } + + @Override + public void unsubscribe(String serviceName, List clusters, + EventListener listener) throws NacosException { + + } + + @Override + public void unsubscribe(String serviceName, String groupName, List clusters, + EventListener listener) throws NacosException { + + } + + @Override + public ListView getServicesOfServer(int pageNo, int pageSize) + throws NacosException { + return null; + } + + @Override + public ListView getServicesOfServer(int pageNo, int pageSize, + String groupName) throws NacosException { + return null; + } + + @Override + public ListView getServicesOfServer(int pageNo, int pageSize, + AbstractSelector selector) throws NacosException { + return null; + } + + @Override + public ListView getServicesOfServer(int pageNo, int pageSize, + String groupName, AbstractSelector selector) throws NacosException { + return null; + } + + @Override + public List getSubscribeServices() throws NacosException { + return null; + } + + @Override + public String getServerStatus() { + return null; + } + +} diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java index 0a1325a5..dc8f5376 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java @@ -16,15 +16,25 @@ package com.alibaba.cloud.nacos.registry; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Enumeration; +import java.util.Properties; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration; +import com.alibaba.nacos.api.NacosFactory; import org.junit.Test; import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.api.support.MethodProxy; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -42,7 +52,10 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen * @author xiaojing */ -@RunWith(SpringRunner.class) +@RunWith(PowerMockRunner.class) +@PowerMockIgnore("javax.management.*") +@PowerMockRunnerDelegate(SpringRunner.class) +@PrepareForTest({ NacosFactory.class }) @SpringBootTest( classes = NacosAutoServiceRegistrationIpNetworkInterfaceTests.TestConfig.class, properties = { "spring.application.name=myTestService1", @@ -62,6 +75,23 @@ public class NacosAutoServiceRegistrationIpNetworkInterfaceTests { @Autowired private InetUtils inetUtils; + static { + try { + Method method = PowerMockito.method(NacosFactory.class, "createNamingService", + Properties.class); + MethodProxy.proxy(method, new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) + throws Throwable { + return new MockNamingService(); + } + }); + } + catch (Exception e) { + e.printStackTrace(); + } + } + @Test public void contextLoads() throws Exception { assertThat(registration).isNotNull(); diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpTests.java index 4df24c7a..99fef767 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpTests.java @@ -16,10 +16,21 @@ package com.alibaba.cloud.nacos.registry; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.util.Properties; + import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration; +import com.alibaba.nacos.api.NacosFactory; import org.junit.Test; import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.api.support.MethodProxy; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -36,7 +47,10 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen * @author xiaojing */ -@RunWith(SpringRunner.class) +@RunWith(PowerMockRunner.class) +@PowerMockIgnore("javax.management.*") +@PowerMockRunnerDelegate(SpringRunner.class) +@PrepareForTest({ NacosFactory.class }) @SpringBootTest(classes = NacosAutoServiceRegistrationIpTests.TestConfig.class, properties = { "spring.application.name=myTestService1", "spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848", @@ -53,6 +67,23 @@ public class NacosAutoServiceRegistrationIpTests { @Autowired private NacosDiscoveryProperties properties; + static { + try { + Method method = PowerMockito.method(NacosFactory.class, "createNamingService", + Properties.class); + MethodProxy.proxy(method, new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) + throws Throwable { + return new MockNamingService(); + } + }); + } + catch (Exception e) { + e.printStackTrace(); + } + } + @Test public void contextLoads() throws Exception { assertThat(registration).isNotNull(); diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java index ca3c40ae..83989ca8 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java @@ -16,10 +16,21 @@ package com.alibaba.cloud.nacos.registry; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.util.Properties; + import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration; +import com.alibaba.nacos.api.NacosFactory; import org.junit.Test; import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.api.support.MethodProxy; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -36,7 +47,10 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen * @author xiaojing */ -@RunWith(SpringRunner.class) +@RunWith(PowerMockRunner.class) +@PowerMockIgnore("javax.management.*") +@PowerMockRunnerDelegate(SpringRunner.class) +@PrepareForTest({ NacosFactory.class }) @SpringBootTest( classes = NacosAutoServiceRegistrationManagementPortTests.TestConfig.class, properties = { "spring.application.name=myTestService1", @@ -56,6 +70,23 @@ public class NacosAutoServiceRegistrationManagementPortTests { @Autowired private NacosDiscoveryProperties properties; + static { + try { + Method method = PowerMockito.method(NacosFactory.class, "createNamingService", + Properties.class); + MethodProxy.proxy(method, new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) + throws Throwable { + return new MockNamingService(); + } + }); + } + catch (Exception e) { + e.printStackTrace(); + } + } + @Test public void contextLoads() throws Exception { assertThat(registration).isNotNull(); diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationPortTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationPortTests.java index c2dd50e9..1c52b391 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationPortTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationPortTests.java @@ -16,10 +16,21 @@ package com.alibaba.cloud.nacos.registry; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.util.Properties; + import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration; +import com.alibaba.nacos.api.NacosFactory; import org.junit.Test; import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.api.support.MethodProxy; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -36,7 +47,10 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen * @author xiaojing */ -@RunWith(SpringRunner.class) +@RunWith(PowerMockRunner.class) +@PowerMockIgnore("javax.management.*") +@PowerMockRunnerDelegate(SpringRunner.class) +@PrepareForTest({ NacosFactory.class }) @SpringBootTest(classes = NacosAutoServiceRegistrationPortTests.TestConfig.class, properties = { "spring.application.name=myTestService1", "spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848", @@ -53,6 +67,23 @@ public class NacosAutoServiceRegistrationPortTests { @Autowired private NacosDiscoveryProperties properties; + static { + try { + Method method = PowerMockito.method(NacosFactory.class, "createNamingService", + Properties.class); + MethodProxy.proxy(method, new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) + throws Throwable { + return new MockNamingService(); + } + }); + } + catch (Exception e) { + e.printStackTrace(); + } + } + @Test public void contextLoads() throws Exception { assertThat(registration).isNotNull(); diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationTests.java index 34300e1f..926afb17 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationTests.java @@ -16,13 +16,23 @@ package com.alibaba.cloud.nacos.registry; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; import java.util.Map; +import java.util.Properties; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration; import com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpoint; +import com.alibaba.nacos.api.NacosFactory; import org.junit.Test; import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.api.support.MethodProxy; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -41,7 +51,10 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen * @author xiaojing */ -@RunWith(SpringRunner.class) +@RunWith(PowerMockRunner.class) +@PowerMockIgnore("javax.management.*") +@PowerMockRunnerDelegate(SpringRunner.class) +@PrepareForTest({ NacosFactory.class }) @SpringBootTest(classes = NacosAutoServiceRegistrationTests.TestConfig.class, properties = { "spring.application.name=myTestService1", "spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848", @@ -53,6 +66,7 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen "spring.cloud.nacos.discovery.namingLoadCacheAtStart=true", "spring.cloud.nacos.discovery.secure=true", "spring.cloud.nacos.discovery.accessKey=test-accessKey", + "spring.cloud.nacos.discovery.ip=8.8.8.8", "spring.cloud.nacos.discovery.secretKey=test-secretKey", "spring.cloud.nacos.discovery.heart-beat-interval=3", "spring.cloud.nacos.discovery.heart-beat-timeout=6", @@ -75,6 +89,23 @@ public class NacosAutoServiceRegistrationTests { @Autowired private InetUtils inetUtils; + static { + try { + Method method = PowerMockito.method(NacosFactory.class, "createNamingService", + Properties.class); + MethodProxy.proxy(method, new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) + throws Throwable { + return new MockNamingService(); + } + }); + } + catch (Exception e) { + e.printStackTrace(); + } + } + @Test public void contextLoads() throws Exception { assertThat(registration).isNotNull(); @@ -167,8 +198,7 @@ public class NacosAutoServiceRegistrationTests { } private void checkoutNacosDiscoveryServiceIP() { - assertThat(registration.getHost()) - .isEqualTo(inetUtils.findFirstNonLoopbackHostInfo().getIpAddress()); + assertThat(registration.getHost()).isEqualTo("8.8.8.8"); } private void checkoutNacosDiscoveryServicePort() { @@ -181,8 +211,8 @@ public class NacosAutoServiceRegistrationTests { Map map = nacosDiscoveryEndpoint.nacosDiscovery(); assertThat(properties).isEqualTo(map.get("NacosDiscoveryProperties")); - assertThat(properties.namingServiceInstance().getSubscribeServices().toString()) - .isEqualTo(map.get("subscribe").toString()); + // assertThat(properties.namingServiceInstance().getSubscribeServices().toString()) + // .isEqualTo(map.get("subscribe").toString()); } @Configuration diff --git a/spring-cloud-alibaba-seata/pom.xml b/spring-cloud-alibaba-seata/pom.xml index a48df0a1..4675a74c 100644 --- a/spring-cloud-alibaba-seata/pom.xml +++ b/spring-cloud-alibaba-seata/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignObjectWrapper.java b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignObjectWrapper.java index 58b9ef2c..8846fefb 100644 --- a/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignObjectWrapper.java +++ b/spring-cloud-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignObjectWrapper.java @@ -41,8 +41,6 @@ public class SeataFeignObjectWrapper { private SpringClientFactory springClientFactory; - private BlockingLoadBalancerClient loadBalancerClient; - SeataFeignObjectWrapper(BeanFactory beanFactory) { this.beanFactory = beanFactory; } @@ -57,7 +55,7 @@ public class SeataFeignObjectWrapper { if (bean.getClass().getName().equals( "org.springframework.cloud.openfeign.loadbalancer.FeignBlockingLoadBalancerClient")) { return new SeataFeignBlockingLoadBalancerClient(getClient(bean), - loadBalancerClient()); + beanFactory.getBean(BlockingLoadBalancerClient.class)); } return new SeataFeignClient(this.beanFactory, (Client) bean); } @@ -82,13 +80,6 @@ public class SeataFeignObjectWrapper { return null; } - private BlockingLoadBalancerClient loadBalancerClient() { - if (this.loadBalancerClient != null) { - return this.loadBalancerClient; - } - return beanFactory.getBean(BlockingLoadBalancerClient.class); - } - CachingSpringLoadBalancerFactory factory() { if (this.cachingSpringLoadBalancerFactory == null) { this.cachingSpringLoadBalancerFactory = this.beanFactory diff --git a/spring-cloud-alibaba-sentinel-datasource/pom.xml b/spring-cloud-alibaba-sentinel-datasource/pom.xml index 1b60e41d..d4562dfd 100644 --- a/spring-cloud-alibaba-sentinel-datasource/pom.xml +++ b/spring-cloud-alibaba-sentinel-datasource/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alibaba-sentinel-gateway/pom.xml b/spring-cloud-alibaba-sentinel-gateway/pom.xml index dedd7e7a..38605e41 100644 --- a/spring-cloud-alibaba-sentinel-gateway/pom.xml +++ b/spring-cloud-alibaba-sentinel-gateway/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alibaba-sentinel/pom.xml b/spring-cloud-alibaba-sentinel/pom.xml index 09cb5e8d..67df7328 100644 --- a/spring-cloud-alibaba-sentinel/pom.xml +++ b/spring-cloud-alibaba-sentinel/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alibaba-sidecar/pom.xml b/spring-cloud-alibaba-sidecar/pom.xml index 4feac69a..a7f1ce4a 100644 --- a/spring-cloud-alibaba-sidecar/pom.xml +++ b/spring-cloud-alibaba-sidecar/pom.xml @@ -4,7 +4,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alicloud-acm/pom.xml b/spring-cloud-alicloud-acm/pom.xml index 58c4ddf0..f351c375 100644 --- a/spring-cloud-alicloud-acm/pom.xml +++ b/spring-cloud-alicloud-acm/pom.xml @@ -6,7 +6,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT spring-cloud-alicloud-acm diff --git a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/AcmAutoConfiguration.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/AcmAutoConfiguration.java index 3ff2bec4..ac4065b9 100644 --- a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/AcmAutoConfiguration.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/AcmAutoConfiguration.java @@ -21,12 +21,9 @@ import com.alibaba.alicloud.acm.refresh.AcmRefreshHistory; import com.alibaba.alicloud.context.acm.AcmIntegrationProperties; import com.taobao.diamond.client.Diamond; -import org.springframework.beans.BeansException; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cloud.context.refresh.ContextRefresher; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -38,14 +35,7 @@ import org.springframework.context.annotation.Configuration; @Configuration(proxyBeanMethods = false) @ConditionalOnClass({ Diamond.class }) @ConditionalOnProperty(name = "spring.cloud.alicloud.acm.enabled", matchIfMissing = true) -public class AcmAutoConfiguration implements ApplicationContextAware { - - private ApplicationContext applicationContext; - - @Bean - public AcmPropertySourceRepository acmPropertySourceRepository() { - return new AcmPropertySourceRepository(applicationContext); - } +public class AcmAutoConfiguration { @Bean public AcmRefreshHistory acmRefreshHistory() { @@ -56,15 +46,9 @@ public class AcmAutoConfiguration implements ApplicationContextAware { public AcmContextRefresher acmContextRefresher( AcmIntegrationProperties acmIntegrationProperties, ContextRefresher contextRefresher, AcmRefreshHistory refreshHistory, - AcmPropertySourceRepository propertySourceRepository) { + AcmPropertySourceRepository acmPropertySourceRepository) { return new AcmContextRefresher(contextRefresher, acmIntegrationProperties, - refreshHistory, propertySourceRepository); - } - - @Override - public void setApplicationContext(ApplicationContext applicationContext) - throws BeansException { - this.applicationContext = applicationContext; + refreshHistory, acmPropertySourceRepository); } } diff --git a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/AcmPropertySourceRepository.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/AcmPropertySourceRepository.java index 2ea1d60a..4604ae6c 100644 --- a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/AcmPropertySourceRepository.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/AcmPropertySourceRepository.java @@ -17,54 +17,46 @@ package com.alibaba.alicloud.acm; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import com.alibaba.alicloud.acm.bootstrap.AcmPropertySource; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.core.env.CompositePropertySource; import org.springframework.core.env.PropertySource; /** * @author juven.xuxb, 5/17/16. + * @author yuhuangbin */ public class AcmPropertySourceRepository { - private final ApplicationContext applicationContext; - - public AcmPropertySourceRepository(ApplicationContext applicationContext) { - this.applicationContext = applicationContext; - } + private Map acmPropertySourceMap = new ConcurrentHashMap<>(); /** - * get all acm properties from application context. + * get all acm properties from AcmPropertySourceRepository. * @return list of acm propertysource */ - public List getAll() { + public List allAcmPropertySource() { List result = new ArrayList<>(); - ConfigurableApplicationContext ctx = (ConfigurableApplicationContext) applicationContext; - for (PropertySource p : ctx.getEnvironment().getPropertySources()) { - if (p instanceof AcmPropertySource) { - result.add((AcmPropertySource) p); - } - else if (p instanceof CompositePropertySource) { - collectAcmPropertySources((CompositePropertySource) p, result); - } - } + result.addAll(this.acmPropertySourceMap.values()); return result; } - private void collectAcmPropertySources(CompositePropertySource composite, - List result) { - for (PropertySource p : composite.getPropertySources()) { - if (p instanceof AcmPropertySource) { - result.add((AcmPropertySource) p); + public void collectAcmPropertySource( + Collection> acmPropertySources) { + acmPropertySources.forEach(propertySource -> { + if (propertySource.getClass().isAssignableFrom(AcmPropertySource.class)) { + AcmPropertySource acmPropertySource = (AcmPropertySource) propertySource; + this.acmPropertySourceMap.put(getMapKey(acmPropertySource.getDataId(), + acmPropertySource.getGroup()), acmPropertySource); } - else if (p instanceof CompositePropertySource) { - collectAcmPropertySources((CompositePropertySource) p, result); - } - } + }); + } + + public String getMapKey(String dataId, String group) { + return String.join(",", dataId, group); } } diff --git a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmConfigBootStrapConfiguration.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmConfigBootStrapConfiguration.java new file mode 100644 index 00000000..91bb484a --- /dev/null +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmConfigBootStrapConfiguration.java @@ -0,0 +1,49 @@ +/* + * Copyright 2013-2018 the original author or authors. + * + * Licensed 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 + * + * https://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.alicloud.acm.bootstrap; + +import com.alibaba.alicloud.acm.AcmPropertySourceRepository; +import com.alibaba.alicloud.context.acm.AcmIntegrationProperties; +import com.taobao.diamond.client.Diamond; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author yuhuangbin + */ +@Configuration(proxyBeanMethods = false) +@ConditionalOnClass({ Diamond.class }) +@ConditionalOnProperty(name = "spring.cloud.alicloud.acm.enabled", matchIfMissing = true) +public class AcmConfigBootStrapConfiguration { + + @Bean + public AcmPropertySourceRepository acmPropertySourceRepository() { + return new AcmPropertySourceRepository(); + } + + @Bean + public AcmPropertySourceLocator acmPropertySourceLocator( + AcmPropertySourceRepository acmPropertySourceRepository, + AcmIntegrationProperties acmIntegrationProperties) { + return new AcmPropertySourceLocator(acmIntegrationProperties, + acmPropertySourceRepository); + } + +} diff --git a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySource.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySource.java index 7d73ba8c..5fc7020a 100644 --- a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySource.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySource.java @@ -29,14 +29,17 @@ public class AcmPropertySource extends MapPropertySource { private final String dataId; + private final String group; + private final Date timestamp; private final boolean groupLevel; - AcmPropertySource(String dataId, Map source, Date timestamp, - boolean groupLevel) { + AcmPropertySource(String dataId, String group, Map source, + Date timestamp, boolean groupLevel) { super(dataId, source); this.dataId = dataId; + this.group = group; this.timestamp = timestamp; this.groupLevel = groupLevel; } @@ -49,6 +52,10 @@ public class AcmPropertySource extends MapPropertySource { return timestamp; } + public String getGroup() { + return group; + } + public boolean isGroupLevel() { return groupLevel; } diff --git a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySourceBuilder.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySourceBuilder.java index 17004f83..be5130bb 100644 --- a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySourceBuilder.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySourceBuilder.java @@ -52,7 +52,8 @@ class AcmPropertySourceBuilder { if (properties == null) { return null; } - return new AcmPropertySource(dataId, toMap(properties), new Date(), groupLevel); + return new AcmPropertySource(dataId, diamondGroup, toMap(properties), new Date(), + groupLevel); } private Properties loadDiamondData(String dataId, String diamondGroup) { diff --git a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySourceLocator.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySourceLocator.java index 4f3fe56f..4c983c80 100644 --- a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySourceLocator.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/bootstrap/AcmPropertySourceLocator.java @@ -16,10 +16,9 @@ package com.alibaba.alicloud.acm.bootstrap; +import com.alibaba.alicloud.acm.AcmPropertySourceRepository; import com.alibaba.alicloud.context.acm.AcmIntegrationProperties; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cloud.bootstrap.config.PropertySourceLocator; import org.springframework.core.env.CompositePropertySource; import org.springframework.core.env.Environment; @@ -28,17 +27,24 @@ import org.springframework.core.env.PropertySource; /** * @author juven.xuxb * @author xiaolongzuo + * @author yuhuangbin */ -@ConditionalOnProperty(name = "spring.cloud.alicloud.acm.enabled", matchIfMissing = true) public class AcmPropertySourceLocator implements PropertySourceLocator { private static final String DIAMOND_PROPERTY_SOURCE_NAME = "diamond"; private AcmPropertySourceBuilder acmPropertySourceBuilder = new AcmPropertySourceBuilder(); - @Autowired private AcmIntegrationProperties acmIntegrationProperties; + private AcmPropertySourceRepository acmPropertySourceRepository; + + public AcmPropertySourceLocator(AcmIntegrationProperties acmIntegrationProperties, + AcmPropertySourceRepository acmPropertySourceRepository) { + this.acmIntegrationProperties = acmIntegrationProperties; + this.acmPropertySourceRepository = acmPropertySourceRepository; + } + @Override public PropertySource locate(Environment environment) { @@ -57,7 +63,8 @@ public class AcmPropertySourceLocator implements PropertySourceLocator { loadDiamondDataIfPresent(compositePropertySource, dataId, acmIntegrationProperties.getAcmProperties().getGroup(), false); } - + acmPropertySourceRepository + .collectAcmPropertySource(compositePropertySource.getPropertySources()); return compositePropertySource; } diff --git a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmEndpoint.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmEndpoint.java index 6441cc4b..6a84b844 100644 --- a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmEndpoint.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmEndpoint.java @@ -43,7 +43,7 @@ public class AcmEndpoint { private final AcmRefreshHistory refreshHistory; - private final AcmPropertySourceRepository propertySourceRepository; + private final AcmPropertySourceRepository acmPropertySourceRepository; private ThreadLocal dateFormat = new ThreadLocal() { @Override @@ -53,10 +53,10 @@ public class AcmEndpoint { }; public AcmEndpoint(AcmProperties properties, AcmRefreshHistory refreshHistory, - AcmPropertySourceRepository propertySourceRepository) { + AcmPropertySourceRepository acmPropertySourceRepository) { this.properties = properties; this.refreshHistory = refreshHistory; - this.propertySourceRepository = propertySourceRepository; + this.acmPropertySourceRepository = acmPropertySourceRepository; } @ReadOperation @@ -65,7 +65,7 @@ public class AcmEndpoint { result.put("config", properties); Map runtime = new HashMap<>(); - List all = propertySourceRepository.getAll(); + List all = acmPropertySourceRepository.allAcmPropertySource(); List> sources = new ArrayList<>(); for (AcmPropertySource ps : all) { diff --git a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmEndpointAutoConfiguration.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmEndpointAutoConfiguration.java index 2aaf1f8a..a835c045 100644 --- a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmEndpointAutoConfiguration.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmEndpointAutoConfiguration.java @@ -43,13 +43,11 @@ public class AcmEndpointAutoConfiguration { @Autowired private AcmRefreshHistory acmRefreshHistory; - @Autowired - private AcmPropertySourceRepository acmPropertySourceRepository; - @ConditionalOnMissingBean @ConditionalOnEnabledEndpoint @Bean - public AcmEndpoint acmEndpoint() { + public AcmEndpoint acmEndpoint( + AcmPropertySourceRepository acmPropertySourceRepository) { return new AcmEndpoint(acmProperties, acmRefreshHistory, acmPropertySourceRepository); } diff --git a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmHealthIndicator.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmHealthIndicator.java index 703e353a..b2197e27 100644 --- a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmHealthIndicator.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/endpoint/AcmHealthIndicator.java @@ -36,10 +36,10 @@ public class AcmHealthIndicator extends AbstractHealthIndicator { private final AcmProperties acmProperties; - private final AcmPropertySourceRepository acmPropertySourceRepository; - private final List dataIds; + private final AcmPropertySourceRepository acmPropertySourceRepository; + public AcmHealthIndicator(AcmProperties acmProperties, AcmPropertySourceRepository acmPropertySourceRepository) { this.acmProperties = acmProperties; @@ -47,7 +47,7 @@ public class AcmHealthIndicator extends AbstractHealthIndicator { this.dataIds = new ArrayList<>(); for (AcmPropertySource acmPropertySource : this.acmPropertySourceRepository - .getAll()) { + .allAcmPropertySource()) { this.dataIds.add(acmPropertySource.getDataId()); } } diff --git a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/refresh/AcmContextRefresher.java b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/refresh/AcmContextRefresher.java index 8cef7c47..bd570034 100644 --- a/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/refresh/AcmContextRefresher.java +++ b/spring-cloud-alicloud-acm/src/main/java/com/alibaba/alicloud/acm/refresh/AcmContextRefresher.java @@ -57,9 +57,9 @@ public class AcmContextRefresher private final AcmRefreshHistory refreshHistory; - private ApplicationContext applicationContext; + private AcmPropertySourceRepository acmPropertySourceRepository; - private final AcmPropertySourceRepository acmPropertySourceRepository; + private ApplicationContext applicationContext; private Map listenerMap = new ConcurrentHashMap<>(16); @@ -82,14 +82,15 @@ public class AcmContextRefresher if (acmIntegrationProperties.getAcmProperties().isRefreshEnabled()) { for (String dataId : acmIntegrationProperties .getApplicationConfigurationDataIds()) { - registerDiamondListener(dataId); + registerDiamondListener(dataId, + acmIntegrationProperties.getAcmProperties().getGroup()); } } } - private void registerDiamondListener(final String dataId) { - - ConfigChangeListener listener = listenerMap.computeIfAbsent(dataId, + private void registerDiamondListener(final String dataId, final String group) { + String key = acmPropertySourceRepository.getMapKey(dataId, group); + ConfigChangeListener listener = listenerMap.computeIfAbsent(key, i -> new ConfigChangeListener() { @Override public void receiveConfigInfo(String configInfo) { @@ -111,8 +112,7 @@ public class AcmContextRefresher "ACM Refresh, dataId=" + dataId)); } }); - ConfigService.addListener(dataId, - acmIntegrationProperties.getAcmProperties().getGroup(), listener); + ConfigService.addListener(dataId, group, listener); } @Override diff --git a/spring-cloud-alicloud-acm/src/main/resources/META-INF/spring.factories b/spring-cloud-alicloud-acm/src/main/resources/META-INF/spring.factories index 0ed3fa01..25af6663 100644 --- a/spring-cloud-alicloud-acm/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alicloud-acm/src/main/resources/META-INF/spring.factories @@ -1,5 +1,5 @@ org.springframework.cloud.bootstrap.BootstrapConfiguration=\ -com.alibaba.alicloud.acm.bootstrap.AcmPropertySourceLocator +com.alibaba.alicloud.acm.bootstrap.AcmConfigBootStrapConfiguration org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.alibaba.alicloud.acm.AcmAutoConfiguration,\ diff --git a/spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/endpoint/AcmEndpointTests.java b/spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/endpoint/AcmEndpointTests.java index 24ece738..442d2002 100644 --- a/spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/endpoint/AcmEndpointTests.java +++ b/spring-cloud-alicloud-acm/src/test/java/com/alibaba/alicloud/acm/endpoint/AcmEndpointTests.java @@ -95,9 +95,6 @@ public class AcmEndpointTests { @Autowired private AcmRefreshHistory refreshHistory; - @Autowired - private AcmPropertySourceRepository propertySourceRepository; - @Autowired private AcmPropertySourceRepository acmPropertySourceRepository; @@ -133,7 +130,7 @@ public class AcmEndpointTests { private void checkoutEndpoint() throws Exception { AcmEndpoint acmEndpoint = new AcmEndpoint(properties, refreshHistory, - propertySourceRepository); + acmPropertySourceRepository); Map map = acmEndpoint.invoke(); assertThat(properties).isEqualTo(map.get("config")); assertThat(refreshHistory.getRecords()) diff --git a/spring-cloud-alicloud-ans/pom.xml b/spring-cloud-alicloud-ans/pom.xml index e7962dea..ddcc53bc 100644 --- a/spring-cloud-alicloud-ans/pom.xml +++ b/spring-cloud-alicloud-ans/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alicloud-context/pom.xml b/spring-cloud-alicloud-context/pom.xml index 71f281b3..f2470f0e 100644 --- a/spring-cloud-alicloud-context/pom.xml +++ b/spring-cloud-alicloud-context/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alicloud-oss/pom.xml b/spring-cloud-alicloud-oss/pom.xml index d69be7f6..a0cd8d8e 100644 --- a/spring-cloud-alicloud-oss/pom.xml +++ b/spring-cloud-alicloud-oss/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-alicloud-schedulerx/pom.xml b/spring-cloud-alicloud-schedulerx/pom.xml index 29039126..45fe0176 100644 --- a/spring-cloud-alicloud-schedulerx/pom.xml +++ b/spring-cloud-alicloud-schedulerx/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 spring-cloud-alicloud-schedulerx diff --git a/spring-cloud-alicloud-sms/pom.xml b/spring-cloud-alicloud-sms/pom.xml index 8d63957f..75831966 100644 --- a/spring-cloud-alicloud-sms/pom.xml +++ b/spring-cloud-alicloud-sms/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-circuitbreaker-sentinel/pom.xml b/spring-cloud-circuitbreaker-sentinel/pom.xml index 2896706d..227f3a08 100644 --- a/spring-cloud-circuitbreaker-sentinel/pom.xml +++ b/spring-cloud-circuitbreaker-sentinel/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT 4.0.0 diff --git a/spring-cloud-starter-alibaba/pom.xml b/spring-cloud-starter-alibaba/pom.xml index bf367999..99166600 100644 --- a/spring-cloud-starter-alibaba/pom.xml +++ b/spring-cloud-starter-alibaba/pom.xml @@ -4,7 +4,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml spring-cloud-starter-alibaba diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config-server/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config-server/pom.xml index ad7656a1..fa2e4d5d 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config-server/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config-server/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-starter-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT spring-cloud-starter-alibaba-nacos-config-server Spring Cloud Starter Alibaba Nacos Config Server diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/pom.xml index d5af3342..2d677680 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-config/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-starter-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT spring-cloud-starter-alibaba-nacos-config Spring Cloud Starter Alibaba Nacos Config diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-discovery/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-discovery/pom.xml index edbca542..efa0d5c8 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-discovery/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-nacos-discovery/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-starter-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT spring-cloud-starter-alibaba-nacos-discovery Spring Cloud Starter Alibaba Nacos Discovery diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-seata/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-seata/pom.xml index 3f68b5cd..4427487e 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-seata/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-seata/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-starter-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT spring-cloud-starter-alibaba-seata Spring Cloud Starter Alibaba Seata diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-sentinel/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-sentinel/pom.xml index 001945ba..601fcaae 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-sentinel/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-sentinel/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-starter-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT spring-cloud-starter-alibaba-sentinel Spring Cloud Starter Alibaba Sentinel diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-sidecar/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-sidecar/pom.xml index c123b545..bceac16c 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-sidecar/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-alibaba-sidecar/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-starter-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml 4.0.0 diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/pom.xml index cade314e..71e87840 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-bus-rocketmq/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-starter-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml 4.0.0 diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-dubbo/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-dubbo/pom.xml index a6bebc21..4359260b 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-dubbo/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-dubbo/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-starter-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml 4.0.0 diff --git a/spring-cloud-starter-alibaba/spring-cloud-starter-stream-rocketmq/pom.xml b/spring-cloud-starter-alibaba/spring-cloud-starter-stream-rocketmq/pom.xml index 61dac104..cfe36914 100644 --- a/spring-cloud-starter-alibaba/spring-cloud-starter-stream-rocketmq/pom.xml +++ b/spring-cloud-starter-alibaba/spring-cloud-starter-stream-rocketmq/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-starter-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml spring-cloud-starter-stream-rocketmq diff --git a/spring-cloud-starter-alicloud/pom.xml b/spring-cloud-starter-alicloud/pom.xml index ba0d4985..4bbe32a2 100644 --- a/spring-cloud-starter-alicloud/pom.xml +++ b/spring-cloud-starter-alicloud/pom.xml @@ -4,7 +4,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT spring-cloud-starter-alicloud pom diff --git a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-acm/pom.xml b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-acm/pom.xml index 0c2bd997..c86bce54 100644 --- a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-acm/pom.xml +++ b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-acm/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-starter-alicloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT spring-cloud-starter-alicloud-acm Spring Cloud Starter Alibaba Cloud ACM diff --git a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-ans/pom.xml b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-ans/pom.xml index 8833beba..64a90a5f 100644 --- a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-ans/pom.xml +++ b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-ans/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-starter-alicloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT spring-cloud-starter-alicloud-ans diff --git a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-oss/pom.xml b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-oss/pom.xml index a796814b..ecd67172 100644 --- a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-oss/pom.xml +++ b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-oss/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-starter-alicloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT spring-cloud-starter-alicloud-oss Spring Cloud Starter Alibaba Cloud OSS diff --git a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-schedulerx/pom.xml b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-schedulerx/pom.xml index eee7d5e2..f4366107 100644 --- a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-schedulerx/pom.xml +++ b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-schedulerx/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-starter-alicloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT spring-cloud-starter-alicloud-schedulerx Spring Cloud Starter Alibaba Cloud SchedulerX diff --git a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-sms/pom.xml b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-sms/pom.xml index ff3bdf73..8c601f9f 100644 --- a/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-sms/pom.xml +++ b/spring-cloud-starter-alicloud/spring-cloud-starter-alicloud-sms/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-starter-alicloud - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT spring-cloud-starter-alicloud-sms Spring Cloud Starter Alibaba Cloud SMS diff --git a/spring-cloud-stream-binder-rocketmq/pom.xml b/spring-cloud-stream-binder-rocketmq/pom.xml index 40235759..4837a4f8 100644 --- a/spring-cloud-stream-binder-rocketmq/pom.xml +++ b/spring-cloud-stream-binder-rocketmq/pom.xml @@ -5,7 +5,7 @@ com.alibaba.cloud spring-cloud-alibaba - 2.2.0.BUILD-SNAPSHOT + 2.2.1.BUILD-SNAPSHOT ../pom.xml 4.0.0