diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java index ffd67df53..251313953 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.java @@ -20,14 +20,15 @@ import org.springframework.boot.ApplicationRunner; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration; import org.springframework.cloud.alibaba.nacos.registry.NacosAutoServiceRegistration; import org.springframework.cloud.alibaba.nacos.registry.NacosRegistration; import org.springframework.cloud.alibaba.nacos.registry.NacosServiceRegistry; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration; -import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; @@ -41,48 +42,59 @@ import org.springframework.context.annotation.Configuration; @EnableConfigurationProperties @ConditionalOnNacosDiscoveryEnabled @ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true) -@AutoConfigureBefore({AutoServiceRegistrationAutoConfiguration.class, - NacosDiscoveryClientAutoConfiguration.class}) -@AutoConfigureAfter(AutoServiceRegistrationConfiguration.class) +@AutoConfigureBefore(NacosDiscoveryClientAutoConfiguration.class) +@AutoConfigureAfter(AutoServiceRegistrationAutoConfiguration.class) public class NacosDiscoveryAutoConfiguration { - @Bean - public NacosServiceRegistry nacosServiceRegistry(NacosDiscoveryProperties nacosDiscoveryProperties) { - return new NacosServiceRegistry(nacosDiscoveryProperties); - } + @Bean + @ConditionalOnMissingBean + public NacosDiscoveryProperties nacosProperties() { + return new NacosDiscoveryProperties(); + } - @Bean - @ConditionalOnBean(AutoServiceRegistrationProperties.class) - public NacosRegistration nacosRegistration( - NacosDiscoveryProperties nacosDiscoveryProperties, - ApplicationContext context) { - return new NacosRegistration(nacosDiscoveryProperties, context); - } + @Bean + public NacosServiceRegistry nacosServiceRegistry( + NacosDiscoveryProperties nacosDiscoveryProperties) { + return new NacosServiceRegistry(nacosDiscoveryProperties); + } - @Bean - @ConditionalOnBean(AutoServiceRegistrationProperties.class) - public NacosAutoServiceRegistration nacosAutoServiceRegistration( - NacosServiceRegistry registry, - AutoServiceRegistrationProperties autoServiceRegistrationProperties, - NacosRegistration registration) { - return new NacosAutoServiceRegistration(registry, - autoServiceRegistrationProperties, registration); - } + @Bean + @ConditionalOnBean(AutoServiceRegistrationProperties.class) + public NacosRegistration nacosRegistration( + NacosDiscoveryProperties nacosDiscoveryProperties, + ApplicationContext context) { + return new NacosRegistration(nacosDiscoveryProperties, context); + } - @Bean - @ConditionalOnBean(NacosAutoServiceRegistration.class) // NacosAutoServiceRegistration should be present - @ConditionalOnNotWebApplication // Not Web Application - public ApplicationRunner applicationRunner(NacosAutoServiceRegistration nacosAutoServiceRegistration) { - return args -> { - // WebServerInitializedEvent should not be multicast in Non-Web environment. - // Whatever, NacosAutoServiceRegistration must be checked it's running or not. - if (!nacosAutoServiceRegistration.isRunning()) { // If it's not running, let it start. - // FIXME: Please make sure "spring.cloud.nacos.discovery.port" must be configured on an available port, - // or the startup or Nacos health check will be failed. - nacosAutoServiceRegistration.start(); - // NacosAutoServiceRegistration will be stopped after its destroy() method is invoked. - // @PreDestroy destroy() -> stop() - } - }; - } + @Bean + @ConditionalOnBean(AutoServiceRegistrationProperties.class) + public NacosAutoServiceRegistration nacosAutoServiceRegistration( + NacosServiceRegistry registry, + AutoServiceRegistrationProperties autoServiceRegistrationProperties, + NacosRegistration registration) { + return new NacosAutoServiceRegistration(registry, + autoServiceRegistrationProperties, registration); + } + + @Bean + @ConditionalOnBean(NacosAutoServiceRegistration.class) // NacosAutoServiceRegistration + // should be present + @ConditionalOnNotWebApplication // Not Web Application + public ApplicationRunner applicationRunner( + NacosAutoServiceRegistration nacosAutoServiceRegistration) { + return args -> { + // WebServerInitializedEvent should not be multicast in Non-Web environment. + // Whatever, NacosAutoServiceRegistration must be checked it's running or not. + if (!nacosAutoServiceRegistration.isRunning()) { // If it's not running, let + // it start. + // FIXME: Please make sure "spring.cloud.nacos.discovery.port" must be + // configured on an available port, + // or the startup or Nacos health check will be failed. + nacosAutoServiceRegistration.start(); + // NacosAutoServiceRegistration will be stopped after its destroy() method + // is invoked. + // @PreDestroy destroy() -> stop() + } + }; + } } \ No newline at end of file diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java index 775a502b6..c1b486f94 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java @@ -64,6 +64,11 @@ public class NacosDiscoveryProperties { */ private String namespace; + /** + * watch delay,duration to pull new service from nacos server. + */ + private long watchDelay = 5000; + /** * nacos naming log file name */ @@ -149,6 +154,9 @@ public class NacosDiscoveryProperties { } serverAddr = Objects.toString(serverAddr, ""); + if(serverAddr.lastIndexOf("/") != -1) { + serverAddr.substring(0,serverAddr.length()-1); + } endpoint = Objects.toString(endpoint, ""); namespace = Objects.toString(namespace, ""); logName = Objects.toString(logName, ""); @@ -319,16 +327,25 @@ public class NacosDiscoveryProperties { this.namingLoadCacheAtStart = namingLoadCacheAtStart; } + public long getWatchDelay() { + return watchDelay; + } + + public void setWatchDelay(long watchDelay) { + this.watchDelay = watchDelay; + } + @Override public String toString() { return "NacosDiscoveryProperties{" + "serverAddr='" + serverAddr + '\'' + ", endpoint='" + endpoint + '\'' + ", namespace='" + namespace + '\'' - + ", logName='" + logName + '\'' + ", service='" + service + '\'' - + ", weight=" + weight + ", clusterName='" + clusterName + '\'' - + ", metadata=" + metadata + ", registerEnabled=" + registerEnabled - + ", ip='" + ip + '\'' + ", networkInterface='" + networkInterface + '\'' - + ", port=" + port + ", secure=" + secure + ", accessKey='" + accessKey - + ", namingLoadCacheAtStart=" + namingLoadCacheAtStart + '\'' + + ", watchDelay=" + watchDelay + ", logName='" + logName + '\'' + + ", service='" + service + '\'' + ", weight=" + weight + + ", clusterName='" + clusterName + '\'' + ", namingLoadCacheAtStart='" + + namingLoadCacheAtStart + '\'' + ", metadata=" + metadata + + ", registerEnabled=" + registerEnabled + ", ip='" + ip + '\'' + + ", networkInterface='" + networkInterface + '\'' + ", port=" + port + + ", secure=" + secure + ", accessKey='" + accessKey + '\'' + ", secretKey='" + secretKey + '\'' + '}'; } diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClient.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClient.java similarity index 93% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClient.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClient.java index 9333d8aef..a820144ea 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClient.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClient.java @@ -14,20 +14,18 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; +package org.springframework.cloud.alibaba.nacos.discovery; import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.api.naming.pojo.ListView; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; +import org.springframework.cloud.alibaba.nacos.NacosServiceInstance; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author xiaojing diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClientAutoConfiguration.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java similarity index 61% rename from spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClientAutoConfiguration.java rename to spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java index 02f970783..6d092f8b4 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClientAutoConfiguration.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClientAutoConfiguration.java @@ -14,11 +14,18 @@ * limitations under the License. */ -package org.springframework.cloud.alibaba.nacos; +package org.springframework.cloud.alibaba.nacos.discovery; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.alibaba.nacos.ConditionalOnNacosDiscoveryEnabled; +import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; +import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClient; +import org.springframework.cloud.alibaba.nacos.discovery.NacosWatch; +import org.springframework.cloud.client.CommonsClientAutoConfiguration; 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; @@ -26,9 +33,10 @@ import org.springframework.context.annotation.Configuration; * @author xiaojing */ @Configuration -@ConditionalOnMissingBean(DiscoveryClient.class) @ConditionalOnNacosDiscoveryEnabled @EnableConfigurationProperties +@AutoConfigureBefore({ SimpleDiscoveryClientAutoConfiguration.class, + CommonsClientAutoConfiguration.class }) public class NacosDiscoveryClientAutoConfiguration { @Bean @@ -39,8 +47,7 @@ public class NacosDiscoveryClientAutoConfiguration { @Bean @ConditionalOnMissingBean - public NacosDiscoveryProperties nacosProperties() { - return new NacosDiscoveryProperties(); + public NacosWatch nacosWatch(NacosDiscoveryProperties nacosDiscoveryProperties) { + return new NacosWatch(nacosDiscoveryProperties); } - } diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosWatch.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosWatch.java new file mode 100644 index 000000000..0eefaf1a8 --- /dev/null +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosWatch.java @@ -0,0 +1,174 @@ +/* + * Copyright (C) 2019 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.alibaba.nacos.discovery; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; + +import com.alibaba.nacos.api.naming.NamingService; +import com.alibaba.nacos.api.naming.listener.EventListener; +import com.alibaba.nacos.api.naming.pojo.ListView; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; +import org.springframework.cloud.client.discovery.event.HeartbeatEvent; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.ApplicationEventPublisherAware; +import org.springframework.context.SmartLifecycle; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; + +/** + * @author xiaojing + */ +public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycle { + + private static final Logger log = LoggerFactory.getLogger(NacosWatch.class); + + private final NacosDiscoveryProperties properties; + + private final TaskScheduler taskScheduler; + + private final AtomicLong nacosWatchIndex = new AtomicLong(0); + + private final AtomicBoolean running = new AtomicBoolean(false); + + private ApplicationEventPublisher publisher; + + private ScheduledFuture watchFuture; + + private Set cacheServices = new HashSet<>(); + + private HashMap subscribeListeners = new HashMap<>(); + + public NacosWatch(NacosDiscoveryProperties properties) { + this(properties, getTaskScheduler()); + } + + public NacosWatch(NacosDiscoveryProperties properties, TaskScheduler taskScheduler) { + this.properties = properties; + this.taskScheduler = taskScheduler; + } + + private static ThreadPoolTaskScheduler getTaskScheduler() { + ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); + taskScheduler.initialize(); + return taskScheduler; + } + + @Override + public void setApplicationEventPublisher(ApplicationEventPublisher publisher) { + this.publisher = publisher; + } + + @Override + public boolean isAutoStartup() { + return true; + } + + @Override + public void stop(Runnable callback) { + this.stop(); + callback.run(); + } + + @Override + public void start() { + if (this.running.compareAndSet(false, true)) { + this.watchFuture = this.taskScheduler.scheduleWithFixedDelay( + this::nacosServicesWatch, this.properties.getWatchDelay()); + } + } + + @Override + public void stop() { + if (this.running.compareAndSet(true, false) && this.watchFuture != null) { + this.watchFuture.cancel(true); + } + } + + @Override + public boolean isRunning() { + return false; + } + + @Override + public int getPhase() { + return 0; + } + + public void nacosServicesWatch() { + try { + + boolean changed = false; + NamingService namingService = properties.namingServiceInstance(); + + ListView listView = properties.namingServiceInstance() + .getServicesOfServer(1, Integer.MAX_VALUE); + + List serviceList = listView.getData(); + + // if there are new services found, publish event + Set currentServices = new HashSet<>(serviceList); + currentServices.removeAll(cacheServices); + if (currentServices.size() > 0) { + changed = true; + } + + // if some services disappear, publish event + if (cacheServices.removeAll(new HashSet<>(serviceList)) + && cacheServices.size() > 0) { + changed = true; + + for (String serviceName : cacheServices) { + namingService.unsubscribe(serviceName, + subscribeListeners.get(serviceName)); + subscribeListeners.remove(serviceName); + } + } + + cacheServices = new HashSet<>(serviceList); + + // subscribe services's node change, publish event if nodes changed + for (String serviceName : cacheServices) { + if (!subscribeListeners.containsKey(serviceName)) { + EventListener eventListener = event -> NacosWatch.this.publisher + .publishEvent(new HeartbeatEvent(NacosWatch.this, + nacosWatchIndex.getAndIncrement())); + subscribeListeners.put(serviceName, eventListener); + namingService.subscribe(serviceName, eventListener); + + } + } + + if (changed) { + this.publisher.publishEvent( + new HeartbeatEvent(this, nacosWatchIndex.getAndIncrement())); + } + + } + catch (Exception e) { + log.error("Error watching Nacos Service change", e); + } + } +} diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories index 91d5ff599..2fe11df15 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories @@ -2,4 +2,4 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration,\ org.springframework.cloud.alibaba.nacos.ribbon.RibbonNacosAutoConfiguration,\ org.springframework.cloud.alibaba.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\ - org.springframework.cloud.alibaba.nacos.NacosDiscoveryClientAutoConfiguration + org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClientTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClientTests.java index ad0e6dbf1..12257f0a9 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClientTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryClientTests.java @@ -26,6 +26,7 @@ import com.alibaba.nacos.api.naming.pojo.Instance; import com.alibaba.nacos.api.naming.pojo.ListView; import org.junit.Test; +import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClient; import org.springframework.cloud.client.ServiceInstance; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java index ea1f242b1..8ec4c7b13 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java @@ -32,7 +32,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryClientAutoConfiguration; +import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration; import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.cloud.commons.util.InetUtils; diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationIpTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationIpTests.java index aaf72093f..88291f5c5 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationIpTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationIpTests.java @@ -28,7 +28,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryClientAutoConfiguration; +import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration; import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.context.annotation.Configuration; diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java index 645e1e4aa..5a2ce0842 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationManagementPortTests.java @@ -29,7 +29,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryClientAutoConfiguration; +import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration; import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.context.annotation.Configuration; diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationPortTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationPortTests.java index eb8050851..ab76dc97d 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationPortTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationPortTests.java @@ -28,7 +28,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryClientAutoConfiguration; +import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration; import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; import org.springframework.context.annotation.Configuration; diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationTests.java index 9432c97b7..acd2cbb39 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/registry/NacosAutoServiceRegistrationTests.java @@ -26,7 +26,7 @@ import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.web.server.LocalServerPort; import org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryClientAutoConfiguration; +import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration; import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.cloud.alibaba.nacos.endpoint.NacosDiscoveryEndpoint; import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; @@ -185,8 +185,8 @@ public class NacosAutoServiceRegistrationTests { properties); Map map = nacosDiscoveryEndpoint.nacosDiscovery(); assertEquals(map.get("NacosDiscoveryProperties"), properties); - assertEquals(map.get("subscribe"), - properties.namingServiceInstance().getSubscribeServices()); + assertEquals(map.get("subscribe").toString(), + properties.namingServiceInstance().getSubscribeServices().toString()); } @Configuration diff --git a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosRibbonClientConfigurationTests.java b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosRibbonClientConfigurationTests.java index cc73df0e6..5117ce538 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosRibbonClientConfigurationTests.java +++ b/spring-cloud-alibaba-nacos-discovery/src/test/java/org/springframework/cloud/alibaba/nacos/ribbon/NacosRibbonClientConfigurationTests.java @@ -6,7 +6,7 @@ import org.junit.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.runner.WebApplicationContextRunner; -import org.springframework.cloud.alibaba.nacos.NacosDiscoveryClientAutoConfiguration; +import org.springframework.cloud.alibaba.nacos.discovery.NacosDiscoveryClientAutoConfiguration; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; diff --git a/spring-cloud-alicloud-context/pom.xml b/spring-cloud-alicloud-context/pom.xml index 496aea377..b87d920d9 100644 --- a/spring-cloud-alicloud-context/pom.xml +++ b/spring-cloud-alicloud-context/pom.xml @@ -113,6 +113,20 @@ test + + org.powermock + powermock-module-junit4 + 2.0.0 + test + + + + org.powermock + powermock-api-mockito2 + 2.0.0 + test + + diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/listener/AbstractOnceApplicationListener.java b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/listener/AbstractOnceApplicationListener.java index d8b822a9b..dbe554d99 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/listener/AbstractOnceApplicationListener.java +++ b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/listener/AbstractOnceApplicationListener.java @@ -42,9 +42,8 @@ public abstract class AbstractOnceApplicationListener { private static final Logger log = LoggerFactory @@ -33,7 +36,8 @@ public class NacosParameterInitListener log.info("Initialize Nacos Parameter from edas change order,is edas managed {}.", edasChangeOrderConfiguration.isEdasManaged()); - + System.getProperties().setProperty("spring.cloud.nacos.config.server-mode", + "EDAS"); // initialize nacos configuration System.getProperties().setProperty("spring.cloud.nacos.config.server-addr", ""); System.getProperties().setProperty("spring.cloud.nacos.config.endpoint", diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/oss/OssContextAutoConfiguration.java b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/oss/OssContextAutoConfiguration.java index 0a3e13092..f197a0f08 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/oss/OssContextAutoConfiguration.java +++ b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/oss/OssContextAutoConfiguration.java @@ -19,6 +19,7 @@ package org.springframework.cloud.alicloud.context.oss; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.alicloud.context.AliCloudContextAutoConfiguration; import org.springframework.cloud.alicloud.context.AliCloudProperties; @@ -39,6 +40,7 @@ import com.aliyun.oss.OSSClientBuilder; */ @Configuration @ConditionalOnClass(name = "org.springframework.cloud.alicloud.oss.OssAutoConfiguration") +@ConditionalOnProperty(name = "spring.cloud.alicloud.oss.enabled", matchIfMissing = true) @EnableConfigurationProperties(OssProperties.class) @ImportAutoConfiguration(AliCloudContextAutoConfiguration.class) public class OssContextAutoConfiguration { diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/scx/ScxContextAutoConfiguration.java b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/scx/ScxContextAutoConfiguration.java index ab391d214..d4640c736 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/scx/ScxContextAutoConfiguration.java +++ b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/scx/ScxContextAutoConfiguration.java @@ -22,6 +22,7 @@ import com.alibaba.edas.schedulerx.SchedulerXClient; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.alicloud.context.AliCloudProperties; import org.springframework.cloud.alicloud.context.edas.EdasContextAutoConfiguration; @@ -34,6 +35,7 @@ import org.springframework.context.annotation.Configuration; */ @Configuration @ConditionalOnClass(name = "org.springframework.cloud.alicloud.scx.ScxAutoConfiguration") +@ConditionalOnProperty(name = "spring.cloud.alicloud.scx.enabled", matchIfMissing = true) @EnableConfigurationProperties(ScxProperties.class) @ImportAutoConfiguration(EdasContextAutoConfiguration.class) public class ScxContextAutoConfiguration { @@ -41,10 +43,10 @@ public class ScxContextAutoConfiguration { @Bean(initMethod = "init") @ConditionalOnMissingBean public SchedulerXClient schedulerXClient(AliCloudProperties aliCloudProperties, - EdasProperties edasProperties, ScxProperties scxProperties, - AliCloudEdasSdk aliCloudEdasSdk) { + EdasProperties edasProperties, ScxProperties scxProperties, + AliCloudEdasSdk aliCloudEdasSdk) { return AliCloudScxInitializer.initialize(aliCloudProperties, edasProperties, - scxProperties, aliCloudEdasSdk); + scxProperties, aliCloudEdasSdk); } } diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsConfigProperties.java b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsConfigProperties.java deleted file mode 100644 index 022c5e19d..000000000 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsConfigProperties.java +++ /dev/null @@ -1,107 +0,0 @@ -package org.springframework.cloud.alicloud.context.sms; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.cloud.alicloud.context.AliCloudProperties; -import org.springframework.core.env.Environment; -import org.springframework.util.StringUtils; - -import java.io.Serializable; - -/** - * @author pbting - */ -@ConfigurationProperties(prefix = "spring.cloud.alicloud.sms") -public class SmsConfigProperties implements Serializable { - - // 产品名称:云通信短信API产品,开发者无需替换 - public static final String smsProduct = "Dysmsapi"; - // 产品域名,开发者无需替换 - public static final String smsDomain = "dysmsapi.aliyuncs.com"; - - private AliCloudProperties aliCloudProperties; - - /** - * - */ - private String reportQueueName; - /** - * - */ - private String upQueueName; - - /** - * - */ - protected String connnectTimeout = "10000"; - - /** - * - */ - protected String readTimeout = "10000"; - - public SmsConfigProperties(AliCloudProperties aliCloudProperties) { - this.aliCloudProperties = aliCloudProperties; - } - - public String getConnnectTimeout() { - return connnectTimeout; - } - - public void setConnnectTimeout(String connnectTimeout) { - this.connnectTimeout = connnectTimeout; - } - - public String getReadTimeout() { - return readTimeout; - } - - public void setReadTimeout(String readTimeout) { - this.readTimeout = readTimeout; - } - - public void overiideFromEnv(Environment environment) { - overiideCustomFromEnv(environment); - if (StringUtils.isEmpty(connnectTimeout)) { - String resolveResult = environment.resolveRequiredPlaceholders( - "${spring.cloud.alibaba.sms.connect-timeout:}"); - this.setConnnectTimeout( - StringUtils.isEmpty(resolveResult) ? "10000" : resolveResult); - } - - if (StringUtils.isEmpty(readTimeout)) { - String resolveResult = environment.resolveRequiredPlaceholders( - "${spring.cloud.alibaba.sms.read-timeout:}"); - this.setReadTimeout( - StringUtils.isEmpty(resolveResult) ? "10000" : resolveResult); - } - } - - public void overiideCustomFromEnv(Environment environment) { - // nothing to do - } - - public String getReportQueueName() { - return reportQueueName; - } - - public void setReportQueueName(String reportQueueName) { - this.reportQueueName = reportQueueName; - } - - public String getUpQueueName() { - return upQueueName; - } - - public String getAccessKeyId() { - return aliCloudProperties.getAccessKey(); - } - - public String getAccessKeySecret() { - return aliCloudProperties.getSecretKey(); - } - - public void setUpQueueName(String upQueueName) { - this.upQueueName = upQueueName; - } - -} \ No newline at end of file diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsConfigRegistration.java b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsConfigRegistration.java deleted file mode 100644 index 555642627..000000000 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsConfigRegistration.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.springframework.cloud.alicloud.context.sms; - -import org.springframework.core.env.Environment; - -import javax.annotation.PostConstruct; - -/** - * @author pbting - */ -public class SmsConfigRegistration { - - private Environment environment; - - private SmsConfigProperties smsConfigProperties; - - public SmsConfigRegistration(Environment environment, - SmsConfigProperties smsConfigProperties) { - this.environment = environment; - this.smsConfigProperties = smsConfigProperties; - } - - @PostConstruct - public void initSmsConfigRegistration() { - smsConfigProperties.overiideFromEnv(environment); - } -} \ No newline at end of file diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsContextAutoConfiguration.java b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsContextAutoConfiguration.java index 6f1e44160..664647ddc 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsContextAutoConfiguration.java +++ b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsContextAutoConfiguration.java @@ -3,28 +3,16 @@ package org.springframework.cloud.alicloud.context.sms; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alicloud.context.AliCloudProperties; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.core.env.Environment; +/** + * @author pbting + * @author xiaolongzuo + */ @Configuration -@EnableConfigurationProperties +@EnableConfigurationProperties(SmsProperties.class) @ConditionalOnClass(name = "com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest") @ConditionalOnProperty(value = "spring.cloud.alibaba.deshao.enable.sms", matchIfMissing = true) public class SmsContextAutoConfiguration { - @Bean - public SmsConfigProperties smsConfigProperties( - AliCloudProperties aliCloudProperties) { - - return new SmsConfigProperties(aliCloudProperties); - } - - @Bean - public SmsConfigRegistration smsConfigRegistration(Environment environment, - SmsConfigProperties smsConfigProperties) { - - return new SmsConfigRegistration(environment, smsConfigProperties); - } } \ No newline at end of file diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsProperties.java b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsProperties.java new file mode 100644 index 000000000..33577863b --- /dev/null +++ b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/sms/SmsProperties.java @@ -0,0 +1,74 @@ +package org.springframework.cloud.alicloud.context.sms; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * @author pbting + * @author xiaolongzuo + */ +@ConfigurationProperties(prefix = "spring.cloud.alicloud.sms") +public class SmsProperties { + + /** + * Product name. + */ + public static final String smsProduct = "Dysmsapi"; + + /** + * Product domain. + */ + public static final String smsDomain = "dysmsapi.aliyuncs.com"; + + /** + * Report queue name. + */ + private String reportQueueName; + + /** + * Up queue name. + */ + private String upQueueName; + + /** + * Connect timeout. + */ + private String connectTimeout = "10000"; + + /** + * Read timeout. + */ + private String readTimeout = "10000"; + + public String getConnectTimeout() { + return connectTimeout; + } + + public void setConnectTimeout(String connectTimeout) { + this.connectTimeout = connectTimeout; + } + + public String getReadTimeout() { + return readTimeout; + } + + public void setReadTimeout(String readTimeout) { + this.readTimeout = readTimeout; + } + + public String getReportQueueName() { + return reportQueueName; + } + + public void setReportQueueName(String reportQueueName) { + this.reportQueueName = reportQueueName; + } + + public String getUpQueueName() { + return upQueueName; + } + + public void setUpQueueName(String upQueueName) { + this.upQueueName = upQueueName; + } + +} \ No newline at end of file diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/statistics/StatisticsTaskStarter.java b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/statistics/StatisticsTaskStarter.java index 41c3591b4..709315d8b 100644 --- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/statistics/StatisticsTaskStarter.java +++ b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/statistics/StatisticsTaskStarter.java @@ -46,6 +46,10 @@ import com.alibaba.cloud.context.statistics.StatisticsTask; AcmContextBootstrapConfiguration.class }) public class StatisticsTaskStarter implements InitializingBean { + private static final String NACOS_CONFIG_SERVER_MODE_KEY = "spring.cloud.nacos.config.server-mode"; + + private static final String NACOS_CONFIG_SERVER_MODE_VALUE = "EDAS"; + @Autowired(required = false) private AliCloudEdasSdk aliCloudEdasSdk; @@ -102,6 +106,10 @@ public class StatisticsTaskStarter implements InitializingBean { if (acmContextBootstrapConfiguration != null && acmEnableEdas) { components.add("SC-ACM"); } + if (NACOS_CONFIG_SERVER_MODE_VALUE + .equals(System.getProperty(NACOS_CONFIG_SERVER_MODE_KEY))) { + components.add("SC-NACOS-CONFIG"); + } return components; } diff --git a/spring-cloud-alicloud-context/src/test/java/com/alibaba/csp/sentinel/datasource/nacos/NacosDataSource.java b/spring-cloud-alicloud-context/src/test/java/com/alibaba/csp/sentinel/datasource/nacos/NacosDataSource.java new file mode 100644 index 000000000..7159a2f41 --- /dev/null +++ b/spring-cloud-alicloud-context/src/test/java/com/alibaba/csp/sentinel/datasource/nacos/NacosDataSource.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.csp.sentinel.datasource.nacos; + +/** + * @author xiaolongzuo + */ +public class NacosDataSource { +} diff --git a/spring-cloud-alicloud-context/src/test/java/com/aliyuncs/dysmsapi/model/v20170525/SendSmsRequest.java b/spring-cloud-alicloud-context/src/test/java/com/aliyuncs/dysmsapi/model/v20170525/SendSmsRequest.java new file mode 100644 index 000000000..ef660e84e --- /dev/null +++ b/spring-cloud-alicloud-context/src/test/java/com/aliyuncs/dysmsapi/model/v20170525/SendSmsRequest.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.aliyuncs.dysmsapi.model.v20170525; + +/** + * @author xiaolongzuo + */ +public class SendSmsRequest { +} diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigAutoConfiguration.java b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigAutoConfiguration.java new file mode 100644 index 000000000..3ae897f43 --- /dev/null +++ b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigAutoConfiguration.java @@ -0,0 +1,23 @@ +/* + * Copyright (C) 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.alibaba.nacos; + +/** + * @author xiaolongzuo + */ +public class NacosConfigAutoConfiguration { +} diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/AliCloudSpringApplicationTests.java b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/BaseAliCloudSpringApplication.java similarity index 62% rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/AliCloudSpringApplicationTests.java rename to spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/BaseAliCloudSpringApplication.java index 471ffbb97..6cc999ff0 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/AliCloudSpringApplicationTests.java +++ b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/BaseAliCloudSpringApplication.java @@ -16,36 +16,35 @@ package org.springframework.cloud.alicloud.context; -import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; - -import org.junit.Test; import org.junit.runner.RunWith; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringRunner; /** * @author xiaolongzuo */ -@RunWith(SpringRunner.class) -@SpringBootTest(classes = AliCloudSpringApplicationTests.AliCloudDisabledApp.class, properties = { +@RunWith(PowerMockRunner.class) +@PowerMockRunnerDelegate(SpringRunner.class) +@PowerMockIgnore("javax.management.*") +@SpringBootTest(classes = BaseAliCloudSpringApplication.AliCloudApplication.class, properties = { "spring.application.name=myapp", "spring.cloud.alicloud.edas.application.name=myapp", "spring.cloud.alicloud.access-key=ak", "spring.cloud.alicloud.secret-key=sk", "spring.cloud.alicloud.oss.endpoint=test", "spring.cloud.alicloud.scx.group-id=1-2-3-4", - "spring.cloud.alicloud.edas.namespace=cn-test" }, webEnvironment = RANDOM_PORT) -@DirtiesContext -public class AliCloudSpringApplicationTests { - - @Test - public void contextLoads() { - System.out.println("Context load..."); - } + "spring.cloud.alicloud.edas.namespace=cn-test", + "spring.cloud.alicloud.ans.server-list=192.168.1.100", + "spring.cloud.alicloud.ans.server-port=8888", + "spring.cloud.alicloud.oss.enabled=false", + "spring.cloud.alicloud.scx.enabled=false" }) +public abstract class BaseAliCloudSpringApplication { @SpringBootApplication - public static class AliCloudDisabledApp { + public static class AliCloudApplication { } diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/ans/AnsContextApplicationListenerTests.java b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/ans/AnsContextApplicationListenerTests.java new file mode 100644 index 000000000..153e234df --- /dev/null +++ b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/ans/AnsContextApplicationListenerTests.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.alicloud.context.ans; + +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; + +import org.junit.Test; +import org.springframework.cloud.alicloud.context.BaseAliCloudSpringApplication; + +/** + * @author xiaolongzuo + */ +public class AnsContextApplicationListenerTests extends BaseAliCloudSpringApplication { + + @Test + public void testAnsContextApplicationListenerDefault() { + assertThat(System + .getProperty("com.alibaba.ans.shaded.com.taobao.vipserver.serverlist")) + .isEqualTo("192.168.1.100"); + assertThat(System.getProperty("vipserver.server.port")).isEqualTo("8888"); + } + +} diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/ans/AnsPropertiesTests.java b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/ans/AnsPropertiesTests.java index a81f0ab5b..023c5ad86 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/ans/AnsPropertiesTests.java +++ b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/ans/AnsPropertiesTests.java @@ -18,7 +18,17 @@ package org.springframework.cloud.alicloud.context.ans; import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.util.Vector; + import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.cloud.alicloud.context.AliCloudContextAutoConfiguration; @@ -29,6 +39,8 @@ import com.alibaba.cloud.context.AliCloudServerMode; /** * @author xiaolongzuo */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({ NetworkInterface.class, AnsProperties.class }) public class AnsPropertiesTests { private ApplicationContextRunner contextRunner = new ApplicationContextRunner() @@ -37,8 +49,7 @@ public class AnsPropertiesTests { AliCloudContextAutoConfiguration.class)); @Test - public void testConfigurationValueDefaultsAreAsExpected() - throws ClassNotFoundException { + public void testConfigurationValueDefaultsAreAsExpected() { this.contextRunner.withPropertyValues().run(context -> { AnsProperties ansProperties = context.getBean(AnsProperties.class); assertThat(ansProperties.getServerMode()).isEqualTo(AliCloudServerMode.LOCAL); @@ -65,7 +76,7 @@ public class AnsPropertiesTests { } @Test - public void testConfigurationValuesAreCorrectlyLoaded() { + public void testConfigurationValuesAreCorrectlyLoaded1() { this.contextRunner .withPropertyValues("spring.cloud.alicloud.ans.server-mode=EDAS", "spring.cloud.alicloud.ans.server-port=11111", @@ -99,4 +110,37 @@ public class AnsPropertiesTests { }); } + @Test(expected = RuntimeException.class) + public void testConfigurationValuesAreCorrectlyLoaded2() { + this.contextRunner.withPropertyValues( + "spring.cloud.alicloud.ans.client-interface-name=noneinterfacename") + .run(context -> { + AnsProperties ansProperties = context.getBean(AnsProperties.class); + assertThat(ansProperties.getClientInterfaceName()) + .isEqualTo("noneinterfacename"); + }); + } + + @Test + public void testConfigurationValuesAreCorrectlyLoaded3() throws SocketException { + NetworkInterface networkInterface = PowerMockito.mock(NetworkInterface.class); + Vector inetAddressList = new Vector<>(); + Inet4Address inetAddress = PowerMockito.mock(Inet4Address.class); + PowerMockito.when(inetAddress.getHostAddress()).thenReturn("192.168.1.100"); + inetAddressList.add(inetAddress); + PowerMockito.when(networkInterface.getInetAddresses()) + .thenReturn(inetAddressList.elements()); + PowerMockito.mockStatic(NetworkInterface.class); + PowerMockito.when(NetworkInterface.getByName("eth0")) + .thenReturn(networkInterface); + this.contextRunner + .withPropertyValues( + "spring.cloud.alicloud.ans.client-interface-name=eth0") + .run(context -> { + AnsProperties ansProperties = context.getBean(AnsProperties.class); + assertThat(ansProperties.getClientInterfaceName()).isEqualTo("eth0"); + assertThat(ansProperties.getClientIp()).isEqualTo("192.168.1.100"); + }); + } + } diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/NacosParameterInitListenerTests.java b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/NacosParameterInitListenerTests.java new file mode 100644 index 000000000..fe0451fde --- /dev/null +++ b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/NacosParameterInitListenerTests.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.alicloud.context.nacos; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.springframework.cloud.alicloud.context.BaseAliCloudSpringApplication; +import org.springframework.cloud.alicloud.utils.ChangeOrderUtils; + +import com.alibaba.cloud.context.ans.AliCloudAnsInitializer; +import com.alibaba.cloud.context.edas.EdasChangeOrderConfigurationFactory; + +/** + * @author xiaolongzuo + */ +@PrepareForTest({ EdasChangeOrderConfigurationFactory.class, + NacosParameterInitListener.class, AliCloudAnsInitializer.class }) +public class NacosParameterInitListenerTests extends BaseAliCloudSpringApplication { + + @BeforeClass + public static void setUp() { + ChangeOrderUtils.mockChangeOrder(); + } + + @Test + public void testNacosParameterInitListener() { + assertThat(System.getProperty("spring.cloud.nacos.config.server-mode")) + .isEqualTo("EDAS"); + assertThat(System.getProperty("spring.cloud.nacos.config.server-addr")) + .isEqualTo(""); + assertThat(System.getProperty("spring.cloud.nacos.config.endpoint")) + .isEqualTo("testDomain"); + assertThat(System.getProperty("spring.cloud.nacos.config.namespace")) + .isEqualTo("testTenantId"); + assertThat(System.getProperty("spring.cloud.nacos.config.access-key")) + .isEqualTo("testAK"); + assertThat(System.getProperty("spring.cloud.nacos.config.secret-key")) + .isEqualTo("testSK"); + + } +} diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/oss/OssAutoConfigurationTests.java b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/oss/OssAutoConfigurationTests.java index 042ec0873..44297f596 100644 --- a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/oss/OssAutoConfigurationTests.java +++ b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/oss/OssAutoConfigurationTests.java @@ -35,11 +35,13 @@ public class OssAutoConfigurationTests { private ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of(OssContextAutoConfiguration.class)) - .withPropertyValues("spring.cloud.alicloud.accessKey=your-ak") - .withPropertyValues("spring.cloud.alicloud.secretKey=your-sk") - .withPropertyValues( - "spring.cloud.alicloud.oss.endpoint=http://oss-cn-beijing.aliyuncs.com") - .withPropertyValues("spring.cloud.alicloud.oss.config.userAgent=alibaba"); + .withPropertyValues("spring.cloud.alicloud.accessKey=your-ak", + "spring.cloud.alicloud.secretKey=your-sk", + "spring.cloud.alicloud.oss.endpoint=http://oss-cn-beijing.aliyuncs.com", + "spring.cloud.alicloud.oss.config.userAgent=alibaba", + "spring.cloud.alicloud.oss.sts.access-key=your-sts-ak", + "spring.cloud.alicloud.oss.sts.secret-key=your-sts-sk", + "spring.cloud.alicloud.oss.sts.security-token=your-sts-token"); @Test public void testOSSProperties() { @@ -53,11 +55,15 @@ public class OssAutoConfigurationTests { assertThat(ossProperties.getEndpoint()) .isEqualTo("http://oss-cn-beijing.aliyuncs.com"); assertThat(ossProperties.getConfig().getUserAgent()).isEqualTo("alibaba"); + assertThat(ossProperties.getSts().getAccessKey()).isEqualTo("your-sts-ak"); + assertThat(ossProperties.getSts().getSecretKey()).isEqualTo("your-sts-sk"); + assertThat(ossProperties.getSts().getSecurityToken()) + .isEqualTo("your-sts-token"); }); } @Test - public void testOSSClient() { + public void testOSSClient1() { this.contextRunner.run(context -> { assertThat(context.getBeansOfType(OSS.class).size() == 1).isTrue(); assertThat(context.getBeanNamesForType(OSS.class)[0]).isEqualTo("ossClient"); @@ -74,4 +80,26 @@ public class OssAutoConfigurationTests { }); } + @Test + public void testOSSClient2() { + this.contextRunner + .withPropertyValues("spring.cloud.alicloud.oss.authorization-mode=STS") + .run(context -> { + assertThat(context.getBeansOfType(OSS.class).size() == 1).isTrue(); + assertThat(context.getBeanNamesForType(OSS.class)[0]) + .isEqualTo("ossClient"); + OSSClient ossClient = (OSSClient) context.getBean(OSS.class); + assertThat(ossClient.getEndpoint().toString()) + .isEqualTo("http://oss-cn-beijing.aliyuncs.com"); + assertThat(ossClient.getClientConfiguration().getUserAgent()) + .isEqualTo("alibaba"); + assertThat(ossClient.getCredentialsProvider().getCredentials() + .getAccessKeyId()).isEqualTo("your-sts-ak"); + assertThat(ossClient.getCredentialsProvider().getCredentials() + .getSecretAccessKey()).isEqualTo("your-sts-sk"); + assertThat(ossClient.getCredentialsProvider().getCredentials() + .getSecurityToken()).isEqualTo("your-sts-token"); + }); + } + } diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/sentinel/SentinelAliCloudListenerTests.java b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/sentinel/SentinelAliCloudListenerTests.java new file mode 100644 index 000000000..6a812daf8 --- /dev/null +++ b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/sentinel/SentinelAliCloudListenerTests.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.alicloud.context.sentinel; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.springframework.cloud.alicloud.context.BaseAliCloudSpringApplication; +import org.springframework.cloud.alicloud.context.Constants; +import org.springframework.cloud.alicloud.utils.ChangeOrderUtils; + +import com.alibaba.cloud.context.edas.EdasChangeOrderConfigurationFactory; + +/** + * @author xiaolongzuo + */ +@PrepareForTest({ EdasChangeOrderConfigurationFactory.class, + SentinelAliCloudListener.class }) +public class SentinelAliCloudListenerTests extends BaseAliCloudSpringApplication { + + @BeforeClass + public static void setUp() { + ChangeOrderUtils.mockChangeOrder(); + } + + @Test + public void testNacosParameterInitListener() { + assertThat(System.getProperty(Constants.Sentinel.NACOS_DATASOURCE_ENDPOINT)) + .isEqualTo("testDomain"); + assertThat(System.getProperty(Constants.Sentinel.PROJECT_NAME)) + .isEqualTo("testProjectName"); + assertThat(System.getProperty(Constants.Sentinel.NACOS_DATASOURCE_NAMESPACE)) + .isEqualTo("testTenantId"); + assertThat(System.getProperty(Constants.Sentinel.NACOS_DATASOURCE_AK)) + .isEqualTo("testAK"); + assertThat(System.getProperty(Constants.Sentinel.NACOS_DATASOURCE_SK)) + .isEqualTo("testSK"); + + } +} diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/sms/SmsPropertiesTests.java b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/sms/SmsPropertiesTests.java new file mode 100644 index 000000000..4a2f74eaf --- /dev/null +++ b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/sms/SmsPropertiesTests.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.alicloud.context.sms; + +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; + +import org.assertj.core.api.AssertionsForClassTypes; +import org.junit.Test; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.cloud.alicloud.context.AliCloudContextAutoConfiguration; +import org.springframework.cloud.alicloud.context.edas.EdasContextAutoConfiguration; + +/** + * @author xiaolongzuo + */ +public class SmsPropertiesTests { + + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(SmsContextAutoConfiguration.class, + EdasContextAutoConfiguration.class, + AliCloudContextAutoConfiguration.class)); + + @Test + public void testConfigurationValueDefaultsAreAsExpected() { + this.contextRunner.run(context -> { + SmsProperties config = context.getBean(SmsProperties.class); + assertThat(config.getReportQueueName()).isNull(); + assertThat(config.getUpQueueName()).isNull(); + assertThat(config.getConnectTimeout()).isEqualTo("10000"); + assertThat(config.getReadTimeout()).isEqualTo("10000"); + }); + } + + @Test + public void testConfigurationValuesAreCorrectlyLoaded() { + this.contextRunner + .withPropertyValues("spring.cloud.alicloud.sms.reportQueueName=q1", + "spring.cloud.alicloud.sms.upQueueName=q2", + "spring.cloud.alicloud.sms.connect-timeout=20", + "spring.cloud.alicloud.sms.read-timeout=30") + .run(context -> { + SmsProperties config = context.getBean(SmsProperties.class); + AssertionsForClassTypes.assertThat(config.getReportQueueName()) + .isEqualTo("q1"); + AssertionsForClassTypes.assertThat(config.getUpQueueName()) + .isEqualTo("q2"); + AssertionsForClassTypes.assertThat(config.getConnectTimeout()) + .isEqualTo("20"); + AssertionsForClassTypes.assertThat(config.getReadTimeout()) + .isEqualTo("30"); + }); + } + +} diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/utils/ChangeOrderUtils.java b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/utils/ChangeOrderUtils.java new file mode 100644 index 000000000..adfd750f2 --- /dev/null +++ b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/utils/ChangeOrderUtils.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 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 + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.alicloud.utils; + +import org.powermock.api.mockito.PowerMockito; + +import com.alibaba.cloud.context.edas.EdasChangeOrderConfiguration; +import com.alibaba.cloud.context.edas.EdasChangeOrderConfigurationFactory; + +/** + * @author xiaolongzuo + */ +public class ChangeOrderUtils { + + private ChangeOrderUtils() { + } + + public static void mockChangeOrder() { + EdasChangeOrderConfiguration edasChangeOrderConfiguration = PowerMockito + .mock(EdasChangeOrderConfiguration.class); + PowerMockito.when(edasChangeOrderConfiguration.isEdasManaged()).thenReturn(true); + PowerMockito.when(edasChangeOrderConfiguration.getAddressServerDomain()) + .thenReturn("testDomain"); + PowerMockito.when(edasChangeOrderConfiguration.getTenantId()) + .thenReturn("testTenantId"); + PowerMockito.when(edasChangeOrderConfiguration.getDauthAccessKey()) + .thenReturn("testAK"); + PowerMockito.when(edasChangeOrderConfiguration.getDauthSecretKey()) + .thenReturn("testSK"); + PowerMockito.when(edasChangeOrderConfiguration.getProjectName()) + .thenReturn("testProjectName"); + PowerMockito.when(edasChangeOrderConfiguration.getAddressServerPort()) + .thenReturn("8080"); + PowerMockito.mockStatic(EdasChangeOrderConfigurationFactory.class); + PowerMockito + .when(EdasChangeOrderConfigurationFactory + .getEdasChangeOrderConfiguration()) + .thenReturn(edasChangeOrderConfiguration); + } +} diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/AbstractSmsService.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/AbstractSmsService.java index 02273a696..5d25bcc06 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/AbstractSmsService.java +++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/AbstractSmsService.java @@ -15,12 +15,12 @@ */ package org.springframework.cloud.alicloud.sms; +import java.util.concurrent.ConcurrentHashMap; + import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.profile.DefaultProfile; -import java.util.concurrent.ConcurrentHashMap; - /** * * @author pbting @@ -29,6 +29,7 @@ public abstract class AbstractSmsService implements ISmsService { private ConcurrentHashMap acsClientConcurrentHashMap = new ConcurrentHashMap<>(); + @Override public IAcsClient getHangZhouRegionClientProfile(String accessKeyId, String accessKeySecret) { diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsInitializerEventListener.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsInitializerEventListener.java index 0556ea068..78253878b 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsInitializerEventListener.java +++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsInitializerEventListener.java @@ -18,7 +18,7 @@ package org.springframework.cloud.alicloud.sms; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import org.springframework.boot.context.event.ApplicationStartedEvent; -import org.springframework.cloud.alicloud.context.sms.SmsConfigProperties; +import org.springframework.cloud.alicloud.context.sms.SmsProperties; import org.springframework.cloud.alicloud.sms.base.MessageListener; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; @@ -35,11 +35,11 @@ public class SmsInitializerEventListener private final AtomicBoolean isCalled = new AtomicBoolean(false); - private SmsConfigProperties msConfigProperties; + private SmsProperties msConfigProperties; private ISmsService smsService; - public SmsInitializerEventListener(SmsConfigProperties msConfigProperties, + public SmsInitializerEventListener(SmsProperties msConfigProperties, ISmsService smsService) { this.msConfigProperties = msConfigProperties; this.smsService = smsService; @@ -54,13 +54,13 @@ public class SmsInitializerEventListener // 整个application context refreshed then do // 可自助调整超时时间 System.setProperty("sun.net.client.defaultConnectTimeout", - msConfigProperties.getConnnectTimeout()); + msConfigProperties.getConnectTimeout()); System.setProperty("sun.net.client.defaultReadTimeout", msConfigProperties.getReadTimeout()); // 初始化acsClient,暂不支持region化 try { DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", - SmsConfigProperties.smsProduct, SmsConfigProperties.smsDomain); + SmsProperties.smsProduct, SmsProperties.smsDomain); Collection messageListeners = event.getApplicationContext() .getBeansOfType(MessageListener.class).values(); if (messageListeners.isEmpty()) { diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsServiceImpl.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsServiceImpl.java index d32c8c64a..3b83cfb62 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsServiceImpl.java +++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsServiceImpl.java @@ -15,17 +15,19 @@ */ package org.springframework.cloud.alicloud.sms; -import com.aliyuncs.dysmsapi.model.v20170525.*; -import com.aliyuncs.exceptions.ClientException; -import com.aliyuncs.exceptions.ServerException; +import java.text.ParseException; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.cloud.alicloud.context.sms.SmsConfigProperties; +import org.springframework.cloud.alicloud.context.AliCloudProperties; +import org.springframework.cloud.alicloud.context.sms.SmsProperties; import org.springframework.cloud.alicloud.sms.base.DefaultAlicomMessagePuller; import org.springframework.cloud.alicloud.sms.endpoint.EndpointManager; import org.springframework.cloud.alicloud.sms.endpoint.ReceiveMessageEntity; -import java.text.ParseException; +import com.aliyuncs.dysmsapi.model.v20170525.*; +import com.aliyuncs.exceptions.ClientException; +import com.aliyuncs.exceptions.ServerException; /** * @author pbting @@ -38,17 +40,22 @@ public final class SmsServiceImpl extends AbstractSmsService { * @param sendSmsRequest * @return */ - private SmsConfigProperties smsConfigProperties; + private SmsProperties smsProperties; - public SmsServiceImpl(SmsConfigProperties smsConfigProperties) { - this.smsConfigProperties = smsConfigProperties; + private AliCloudProperties aliCloudProperties; + + public SmsServiceImpl(AliCloudProperties aliCloudProperties, + SmsProperties smsProperties) { + this.aliCloudProperties = aliCloudProperties; + this.smsProperties = smsProperties; } + @Override public SendSmsResponse sendSmsRequest(SendSmsRequest sendSmsRequest) throws ClientException { - return sendSmsRequest(sendSmsRequest, smsConfigProperties.getAccessKeyId(), - smsConfigProperties.getAccessKeySecret()); + return sendSmsRequest(sendSmsRequest, aliCloudProperties.getAccessKey(), + aliCloudProperties.getSecretKey()); } /** @@ -62,6 +69,7 @@ public final class SmsServiceImpl extends AbstractSmsService { * @throws ClientException * @return SendSmsResponse */ + @Override public SendSmsResponse sendSmsRequest(SendSmsRequest sendSmsRequest, String accessKeyId, String accessKeySecret) throws ServerException, ClientException { @@ -76,10 +84,12 @@ public final class SmsServiceImpl extends AbstractSmsService { * @param smsReportMessageListener * @return boolean */ + @Override public boolean startSmsReportMessageListener( SmsReportMessageListener smsReportMessageListener) { - String messageType = "SmsReport";// 短信回执:SmsReport,短信上行:SmsUp - String queueName = smsConfigProperties.getReportQueueName(); + // 短信回执:SmsReport,短信上行:SmsUp + String messageType = "SmsReport"; + String queueName = smsProperties.getReportQueueName(); return startReceiveMsg(messageType, queueName, smsReportMessageListener); } @@ -88,9 +98,11 @@ public final class SmsServiceImpl extends AbstractSmsService { * @param smsUpMessageListener * @return boolean */ + @Override public boolean startSmsUpMessageListener(SmsUpMessageListener smsUpMessageListener) { - String messageType = "SmsUp";// 短信回执:SmsReport,短信上行:SmsUp - String queueName = smsConfigProperties.getUpQueueName(); + // 短信回执:SmsReport,短信上行:SmsUp + String messageType = "SmsUp"; + String queueName = smsProperties.getUpQueueName(); return startReceiveMsg(messageType, queueName, smsUpMessageListener); } @@ -103,8 +115,8 @@ public final class SmsServiceImpl extends AbstractSmsService { */ private boolean startReceiveMsg(String messageType, String queueName, SmsMessageListener messageListener) { - String accessKeyId = smsConfigProperties.getAccessKeyId(); - String accessKeySecret = smsConfigProperties.getAccessKeySecret(); + String accessKeyId = aliCloudProperties.getAccessKey(); + String accessKeySecret = aliCloudProperties.getSecretKey(); boolean result = true; try { new DefaultAlicomMessagePuller().startReceiveMsg(accessKeyId, accessKeySecret, @@ -135,9 +147,8 @@ public final class SmsServiceImpl extends AbstractSmsService { SendBatchSmsRequest sendBatchSmsRequest) throws ServerException, ClientException { - return sendSmsBatchRequest(sendBatchSmsRequest, - smsConfigProperties.getAccessKeyId(), - smsConfigProperties.getAccessKeySecret()); + return sendSmsBatchRequest(sendBatchSmsRequest, aliCloudProperties.getAccessKey(), + aliCloudProperties.getSecretKey()); } /** @@ -181,7 +192,7 @@ public final class SmsServiceImpl extends AbstractSmsService { @Override public QuerySendDetailsResponse querySendDetails(QuerySendDetailsRequest request) throws ClientException { - return querySendDetails(request, smsConfigProperties.getAccessKeyId(), - smsConfigProperties.getAccessKeySecret()); + return querySendDetails(request, aliCloudProperties.getAccessKey(), + aliCloudProperties.getSecretKey()); } } \ No newline at end of file diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/config/SmsAutoConfiguration.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/config/SmsAutoConfiguration.java index 12e1760ba..6fb5727dd 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/config/SmsAutoConfiguration.java +++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/config/SmsAutoConfiguration.java @@ -18,7 +18,8 @@ package org.springframework.cloud.alicloud.sms.config; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.alicloud.context.sms.SmsConfigProperties; +import org.springframework.cloud.alicloud.context.AliCloudProperties; +import org.springframework.cloud.alicloud.context.sms.SmsProperties; import org.springframework.cloud.alicloud.sms.ISmsService; import org.springframework.cloud.alicloud.sms.SmsInitializerEventListener; import org.springframework.cloud.alicloud.sms.SmsServiceImpl; @@ -37,13 +38,14 @@ import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; public class SmsAutoConfiguration { @Bean - public SmsServiceImpl smsService(SmsConfigProperties smsConfigProperties) { - return new SmsServiceImpl(smsConfigProperties); + public SmsServiceImpl smsService(AliCloudProperties aliCloudProperties, + SmsProperties smsProperties) { + return new SmsServiceImpl(aliCloudProperties, smsProperties); } @Bean public SmsInitializerEventListener smsInitializePostListener( - SmsConfigProperties msConfigProperties, ISmsService smsService) { - return new SmsInitializerEventListener(msConfigProperties, smsService); + SmsProperties smsProperties, ISmsService smsService) { + return new SmsInitializerEventListener(smsProperties, smsService); } } \ No newline at end of file