From 997faff7103c9a6d64a5b9817ea00ea1121cff02 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BE=97=E5=B0=91?= <314226532@qq.com>
Date: Mon, 18 Feb 2019 09:52:41 +0800
Subject: [PATCH] add nacos discovery starter support to connect to aliyun
---
spring-cloud-alibaba-dependencies/pom.xml | 2 +-
.../nacos-discovery-consumer-example/pom.xml | 4 ++
.../nacos-discovery-provider-example/pom.xml | 5 +-
... => NacosConfigParameterInitListener.java} | 4 +-
.../NacosDiscoveryParameterInitListener.java | 71 +++++++++++++++++++
.../main/resources/META-INF/spring.factories | 3 +-
...acosConfigParameterInitListenerTests.java} | 11 ++-
...osDiscoveryParameterInitListenerTests.java | 58 +++++++++++++++
8 files changed, 147 insertions(+), 11 deletions(-)
rename spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/{NacosParameterInitListener.java => NacosConfigParameterInitListener.java} (95%)
create mode 100644 spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosDiscoveryParameterInitListener.java
rename spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/{NacosParameterInitListenerTests.java => NacosConfigParameterInitListenerTests.java} (92%)
create mode 100644 spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/NacosDiscoveryParameterInitListenerTests.java
diff --git a/spring-cloud-alibaba-dependencies/pom.xml b/spring-cloud-alibaba-dependencies/pom.xml
index 9034205a..7669a9ee 100644
--- a/spring-cloud-alibaba-dependencies/pom.xml
+++ b/spring-cloud-alibaba-dependencies/pom.xml
@@ -20,7 +20,7 @@
1.4.1
3.1.0
0.1.3
- 0.8.0
+ 0.8.1
0.8.0
1.0.8
1.0.1
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 aabf1ec1..dcb32bea 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
@@ -45,6 +45,10 @@
spring-cloud-starter-alibaba-sentinel
+
+ org.springframework.cloud
+ spring-cloud-alicloud-context
+
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 52bac0cf..d89a1d88 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
@@ -29,7 +29,10 @@
org.springframework.boot
spring-boot-starter-actuator
-
+
+ org.springframework.cloud
+ spring-cloud-alicloud-context
+
diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosParameterInitListener.java b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosConfigParameterInitListener.java
similarity index 95%
rename from spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosParameterInitListener.java
rename to spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosConfigParameterInitListener.java
index 91e9dd20..f60b9251 100644
--- a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosParameterInitListener.java
+++ b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosConfigParameterInitListener.java
@@ -11,10 +11,10 @@ import com.alibaba.cloud.context.edas.EdasChangeOrderConfigurationFactory;
/**
* @author pbting
*/
-public class NacosParameterInitListener
+public class NacosConfigParameterInitListener
extends AbstractOnceApplicationListener {
private static final Logger log = LoggerFactory
- .getLogger(NacosParameterInitListener.class);
+ .getLogger(NacosConfigParameterInitListener.class);
@Override
protected String conditionalOnClass() {
diff --git a/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosDiscoveryParameterInitListener.java b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosDiscoveryParameterInitListener.java
new file mode 100644
index 00000000..b04751ee
--- /dev/null
+++ b/spring-cloud-alicloud-context/src/main/java/org/springframework/cloud/alicloud/context/nacos/NacosDiscoveryParameterInitListener.java
@@ -0,0 +1,71 @@
+/*
+ * 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.alicloud.context.nacos;
+
+import com.alibaba.cloud.context.edas.EdasChangeOrderConfiguration;
+import com.alibaba.cloud.context.edas.EdasChangeOrderConfigurationFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
+import org.springframework.cloud.alicloud.context.listener.AbstractOnceApplicationListener;
+
+import java.util.Properties;
+
+/**
+ * @author pbting
+ * @date 2019-02-14 11:12 AM
+ */
+public class NacosDiscoveryParameterInitListener
+ extends AbstractOnceApplicationListener {
+ private static final Logger log = LoggerFactory
+ .getLogger(NacosDiscoveryParameterInitListener.class);
+
+ @Override
+ protected String conditionalOnClass() {
+ return "org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration";
+ }
+
+ @Override
+ protected void handleEvent(ApplicationEnvironmentPreparedEvent event) {
+ EdasChangeOrderConfiguration edasChangeOrderConfiguration = EdasChangeOrderConfigurationFactory
+ .getEdasChangeOrderConfiguration();
+
+ log.info(
+ "Initialize Nacos Discovery Parameter from edas change order,is edas managed {}.",
+ edasChangeOrderConfiguration.isEdasManaged());
+
+ if (!edasChangeOrderConfiguration.isEdasManaged()) {
+ return;
+ }
+ // initialize nacos configuration
+ Properties properties = System.getProperties();
+
+ // step 1: set some properties for spring cloud alibaba nacos discovery
+ properties.setProperty("spring.cloud.nacos.discovery.server-addr", "");
+ properties.setProperty("spring.cloud.nacos.discovery.endpoint",
+ edasChangeOrderConfiguration.getAddressServerDomain());
+ properties.setProperty("spring.cloud.nacos.discovery.namespace",
+ edasChangeOrderConfiguration.getTenantId());
+ properties.setProperty("spring.cloud.nacos.discovery.access-key",
+ edasChangeOrderConfiguration.getDauthAccessKey());
+ properties.setProperty("spring.cloud.nacos.discovery.secret-key",
+ edasChangeOrderConfiguration.getDauthSecretKey());
+
+ // step 2: set these properties for nacos client
+ properties.setProperty("webContext", "/vipserver");
+ properties.setProperty("serverPort", "80");
+ }
+}
\ No newline at end of file
diff --git a/spring-cloud-alicloud-context/src/main/resources/META-INF/spring.factories b/spring-cloud-alicloud-context/src/main/resources/META-INF/spring.factories
index f99f0502..b39c6499 100644
--- a/spring-cloud-alicloud-context/src/main/resources/META-INF/spring.factories
+++ b/spring-cloud-alicloud-context/src/main/resources/META-INF/spring.factories
@@ -10,5 +10,6 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.alicloud.context.sms.SmsContextAutoConfiguration
org.springframework.context.ApplicationListener=\
org.springframework.cloud.alicloud.context.ans.AnsContextApplicationListener,\
- org.springframework.cloud.alicloud.context.nacos.NacosParameterInitListener,\
+ org.springframework.cloud.alicloud.context.nacos.NacosConfigParameterInitListener,\
+ org.springframework.cloud.alicloud.context.nacos.NacosDiscoveryParameterInitListener,\
org.springframework.cloud.alicloud.context.sentinel.SentinelAliCloudListener
\ No newline at end of file
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/NacosConfigParameterInitListenerTests.java
similarity index 92%
rename from spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/NacosParameterInitListenerTests.java
rename to spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/NacosConfigParameterInitListenerTests.java
index fe0451fd..c8a11a62 100644
--- 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/NacosConfigParameterInitListenerTests.java
@@ -16,23 +16,22 @@
package org.springframework.cloud.alicloud.context.nacos;
-import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
-
+import com.alibaba.cloud.context.ans.AliCloudAnsInitializer;
+import com.alibaba.cloud.context.edas.EdasChangeOrderConfigurationFactory;
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;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
/**
* @author xiaolongzuo
*/
@PrepareForTest({ EdasChangeOrderConfigurationFactory.class,
- NacosParameterInitListener.class, AliCloudAnsInitializer.class })
-public class NacosParameterInitListenerTests extends BaseAliCloudSpringApplication {
+ NacosConfigParameterInitListener.class, AliCloudAnsInitializer.class })
+public class NacosConfigParameterInitListenerTests extends BaseAliCloudSpringApplication {
@BeforeClass
public static void setUp() {
diff --git a/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/NacosDiscoveryParameterInitListenerTests.java b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/NacosDiscoveryParameterInitListenerTests.java
new file mode 100644
index 00000000..39398001
--- /dev/null
+++ b/spring-cloud-alicloud-context/src/test/java/org/springframework/cloud/alicloud/context/nacos/NacosDiscoveryParameterInitListenerTests.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 com.alibaba.cloud.context.ans.AliCloudAnsInitializer;
+import com.alibaba.cloud.context.edas.EdasChangeOrderConfigurationFactory;
+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 static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+/**
+ * @author xiaolongzuo
+ */
+@PrepareForTest({EdasChangeOrderConfigurationFactory.class,
+ NacosConfigParameterInitListener.class, AliCloudAnsInitializer.class})
+public class NacosDiscoveryParameterInitListenerTests extends BaseAliCloudSpringApplication {
+
+ @BeforeClass
+ public static void setUp() {
+ ChangeOrderUtils.mockChangeOrder();
+ System.getProperties().setProperty("webContext", "/vipserver");
+ System.getProperties().setProperty("serverPort", "80");
+ }
+
+ @Test
+ public void testNacosParameterInitListener() {
+ 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");
+ assertThat(System.getProperties().getProperty("webContext")).isEqualTo("/vipserver");
+ assertThat(System.getProperties().getProperty("serverPort")).isEqualTo("80");
+ }
+}