entry : map.entrySet()) {
+ String key = entry.getKey();
+ if (key.contains(DOT)) {
+ int idx = key.lastIndexOf(DOT);
+ String suffix = key.substring(idx + 1);
+ if (VALUE.equalsIgnoreCase(suffix)) {
+ result.put(key.substring(0, idx), entry.getValue());
+ }
+ }
+ }
+ return result;
+ }
+
+}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataXmlParser.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosXmlPropertySourceLoader.java
similarity index 55%
rename from spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataXmlParser.java
rename to spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosXmlPropertySourceLoader.java
index eab890b9..4db8e808 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosDataXmlParser.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/parser/NacosXmlPropertySourceLoader.java
@@ -17,50 +17,86 @@
package com.alibaba.cloud.nacos.parser;
import java.io.IOException;
-import java.io.StringReader;
+import java.util.Collections;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
-
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
+import org.springframework.boot.env.OriginTrackedMapPropertySource;
+import org.springframework.boot.env.PropertiesPropertySourceLoader;
+import org.springframework.core.Ordered;
+import org.springframework.core.env.PropertySource;
+import org.springframework.core.io.Resource;
+import org.springframework.util.StringUtils;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-
-import org.springframework.util.StringUtils;
/**
- * With relatively few usage scenarios, only simple parsing is performed to reduce jar
- * dependencies.
+ * Parsing for XML requires overwriting the default
+ * {@link PropertiesPropertySourceLoader}, because it internally rigorously validates
+ * ({@conde DOCTYPE}) THE XML in a way that makes it difficult to customize the
+ * configuration; at finally, make sure it's in the first place.
*
* @author zkz
*/
-public class NacosDataXmlParser extends AbstractNacosDataParser {
-
- public NacosDataXmlParser() {
- super("xml");
- }
+public class NacosXmlPropertySourceLoader extends AbstractPropertySourceLoader
+ implements Ordered {
+ /**
+ * Get the order value of this object.
+ *
+ * Higher values are interpreted as lower priority. As a consequence, the object with
+ * the lowest value has the highest priority (somewhat analogous to Servlet
+ * {@code load-on-startup} values).
+ *
+ * Same order values will result in arbitrary sort positions for the affected objects.
+ * @return the order value
+ * @see #HIGHEST_PRECEDENCE
+ * @see #LOWEST_PRECEDENCE
+ */
@Override
- protected Map doParse(String data) throws IOException {
- if (StringUtils.isEmpty(data)) {
- return null;
- }
- Map map = parseXml2Map(data);
- return this.reloadMap(map);
+ public int getOrder() {
+ return Integer.MIN_VALUE;
}
- private Map parseXml2Map(String xml) throws IOException {
- xml = xml.replaceAll("\\r", "").replaceAll("\\n", "").replaceAll("\\t", "");
+ /**
+ * Returns the file extensions that the loader supports (excluding the '.').
+ * @return the file extensions
+ */
+ @Override
+ public String[] getFileExtensions() {
+ return new String[] { "xml" };
+ }
+
+ /**
+ * Load the resource into one or more property sources. Implementations may either
+ * return a list containing a single source, or in the case of a multi-document format
+ * such as yaml a source for each document in the resource.
+ * @param name the root name of the property source. If multiple documents are loaded
+ * an additional suffix should be added to the name for each source loaded.
+ * @param resource the resource to load
+ * @return a list property sources
+ * @throws IOException if the source cannot be loaded
+ */
+ @Override
+ protected List> doLoad(String name, Resource resource)
+ throws IOException {
+ Map nacosDataMap = parseXml2Map(resource);
+ return Collections.singletonList(
+ new OriginTrackedMapPropertySource(name, nacosDataMap));
+
+ }
+
+ private Map parseXml2Map(Resource resource) throws IOException {
Map map = new LinkedHashMap<>(32);
try {
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
- Document document = documentBuilder
- .parse(new InputSource(new StringReader(xml)));
+ Document document = documentBuilder.parse(resource.getInputStream());
if (null == document) {
return null;
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/utils/NacosConfigUtils.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/utils/NacosConfigUtils.java
new file mode 100644
index 00000000..b8a448dd
--- /dev/null
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/java/com/alibaba/cloud/nacos/utils/NacosConfigUtils.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.alibaba.cloud.nacos.utils;
+
+/**
+ * @author zkzlx
+ */
+public final class NacosConfigUtils {
+
+ private NacosConfigUtils() {
+ }
+
+ /**
+ * Convert Chinese characters to Unicode.
+ * @param configValue value of config
+ * @return new string
+ */
+ public static String selectiveConvertUnicode(String configValue) {
+ StringBuilder sb = new StringBuilder();
+ char[] chars = configValue.toCharArray();
+ for (char aChar : chars) {
+ if (isBaseLetter(aChar)) {
+ sb.append(aChar);
+ }
+ else {
+ sb.append(String.format("\\u%04x", (int) aChar));
+ }
+ }
+ return sb.toString();
+ }
+
+ /**
+ * char is base latin or whitespace?
+ * @param ch a character
+ * @return true or false
+ */
+ public static boolean isBaseLetter(char ch) {
+ Character.UnicodeBlock ub = Character.UnicodeBlock.of(ch);
+ return ub == Character.UnicodeBlock.BASIC_LATIN || Character.isWhitespace(ch);
+ }
+
+ /**
+ * char is chinese?
+ * @param c a character
+ * @return true or false
+ */
+ public static boolean isChinese(char c) {
+ Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
+ return ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
+ || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
+ || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
+ || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
+ || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
+ || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS;
+ }
+
+}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/resources/META-INF/spring.factories
index 9977a854..aa6bf0d9 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/resources/META-INF/spring.factories
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/main/resources/META-INF/spring.factories
@@ -4,4 +4,7 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.alibaba.cloud.nacos.NacosConfigAutoConfiguration,\
com.alibaba.cloud.nacos.endpoint.NacosConfigEndpointAutoConfiguration
org.springframework.boot.diagnostics.FailureAnalyzer=\
-com.alibaba.cloud.nacos.diagnostics.analyzer.NacosConnectionFailureAnalyzer
\ No newline at end of file
+com.alibaba.cloud.nacos.diagnostics.analyzer.NacosConnectionFailureAnalyzer
+org.springframework.boot.env.PropertySourceLoader=\
+com.alibaba.cloud.nacos.parser.NacosJsonPropertySourceLoader,\
+com.alibaba.cloud.nacos.parser.NacosXmlPropertySourceLoader
\ No newline at end of file
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressBothLevelTests.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressBothLevelTests.java
index 2079f9f4..d0e13489 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressBothLevelTests.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressBothLevelTests.java
@@ -34,8 +34,9 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
* @author lyuzb
*/
@RunWith(SpringRunner.class)
-@SpringBootTest(classes = NacosConfigPropertiesServerAddressBothLevelTests.TestConfig.class, properties = {
- "spring.cloud.nacos.config.server-addr=321,321,321,321:8848",
+@SpringBootTest(
+ classes = NacosConfigPropertiesServerAddressBothLevelTests.TestConfig.class,
+ properties = { "spring.cloud.nacos.config.server-addr=321,321,321,321:8848",
"spring.cloud.nacos.server-addr=123.123.123.123:8848" },
webEnvironment = RANDOM_PORT)
public class NacosConfigPropertiesServerAddressBothLevelTests {
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressTopLevelTests.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressTopLevelTests.java
index f79ff133..c080fe6b 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressTopLevelTests.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigPropertiesServerAddressTopLevelTests.java
@@ -34,8 +34,10 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
* @author lyuzb
*/
@RunWith(SpringRunner.class)
-@SpringBootTest(classes = NacosConfigPropertiesServerAddressTopLevelTests.TestConfig.class, properties = {
- "spring.cloud.nacos.server-addr=123.123.123.123:8848" }, webEnvironment = RANDOM_PORT)
+@SpringBootTest(
+ classes = NacosConfigPropertiesServerAddressTopLevelTests.TestConfig.class,
+ properties = { "spring.cloud.nacos.server-addr=123.123.123.123:8848" },
+ webEnvironment = RANDOM_PORT)
public class NacosConfigPropertiesServerAddressTopLevelTests {
@Autowired
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationExtConfigTests.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationExtConfigTests.java
index 9a3789d2..73f8b80f 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationExtConfigTests.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationExtConfigTests.java
@@ -50,8 +50,9 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
@PowerMockIgnore("javax.management.*")
@PowerMockRunnerDelegate(SpringRunner.class)
@PrepareForTest({ NacosConfigService.class })
-@SpringBootTest(classes = NacosConfigurationExtConfigTests.TestConfig.class, properties = {
- "spring.application.name=myTestService1", "spring.profiles.active=dev,test",
+@SpringBootTest(classes = NacosConfigurationExtConfigTests.TestConfig.class,
+ properties = { "spring.application.name=myTestService1",
+ "spring.profiles.active=dev,test",
"spring.cloud.nacos.config.server-addr=127.0.0.1:8848",
"spring.cloud.nacos.config.encode=utf-8",
"spring.cloud.nacos.config.timeout=1000",
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationNoSuffixTest.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationNoSuffixTest.java
index a5c992ef..fb73fe2b 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationNoSuffixTest.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationNoSuffixTest.java
@@ -16,15 +16,19 @@
package com.alibaba.cloud.nacos;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.util.Map;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE;
import com.alibaba.cloud.nacos.client.NacosPropertySourceLocator;
import com.alibaba.cloud.nacos.endpoint.NacosConfigEndpoint;
import com.alibaba.cloud.nacos.endpoint.NacosConfigEndpointAutoConfiguration;
import com.alibaba.cloud.nacos.refresh.NacosRefreshHistory;
import com.alibaba.nacos.client.config.NacosConfigService;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.Map;
+
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
@@ -33,7 +37,6 @@ import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.modules.junit4.PowerMockRunnerDelegate;
-
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
@@ -42,15 +45,13 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.test.context.junit4.SpringRunner;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE;
-
/**
* @author zkz
*/
@RunWith(PowerMockRunner.class)
-@PowerMockIgnore("javax.management.*")
+@PowerMockIgnore({ "javax.management.*", "javax.xml.parsers.*",
+ "com.sun.org.apache.xerces.internal.jaxp.*", "org.w3c.dom.*" })
@PowerMockRunnerDelegate(SpringRunner.class)
@PrepareForTest({ NacosConfigService.class })
@SpringBootTest(classes = NacosConfigurationNoSuffixTest.TestConfig.class, properties = {
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationXmlJsonTest.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationXmlJsonTest.java
index b06cfd86..eb6923c0 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationXmlJsonTest.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosConfigurationXmlJsonTest.java
@@ -213,7 +213,7 @@ public class NacosConfigurationXmlJsonTest {
assertThat(
(Integer) environment.getProperty("test.metadata.intKey", Object.class))
- .isEqualTo(123);
+ .isEqualTo(123);
assertThat((Boolean) environment.getProperty("test.metadata.booleanKey",
Object.class)).isEqualTo(true);
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosFileExtensionTest.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosFileExtensionTest.java
index 6b672f58..22961051 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosFileExtensionTest.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-config/src/test/java/com/alibaba/cloud/nacos/NacosFileExtensionTest.java
@@ -49,8 +49,8 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
@PowerMockIgnore("javax.management.*")
@PowerMockRunnerDelegate(SpringRunner.class)
@PrepareForTest({ NacosConfigService.class })
-@SpringBootTest(classes = NacosFileExtensionTest.TestConfig.class, properties = {
- "spring.application.name=test-name",
+@SpringBootTest(classes = NacosFileExtensionTest.TestConfig.class,
+ properties = { "spring.application.name=test-name",
"spring.cloud.nacos.config.server-addr=127.0.0.1:8848",
"spring.cloud.nacos.config.file-extension=yaml" },
webEnvironment = NONE)
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/pom.xml b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/pom.xml
index 50a1162a..0f352bf1 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/pom.xml
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/pom.xml
@@ -20,6 +20,12 @@
true
+
+ com.alibaba.cloud
+ spring-cloud-alibaba-commons
+ ${project.version}
+
+
org.springframework.boot
spring-boot-actuator-autoconfigure
@@ -39,11 +45,9 @@
- org.springframework.boot
- spring-boot-autoconfigure
- true
+ org.springframework
+ spring-context
-
org.springframework.boot
spring-boot-starter
@@ -66,6 +70,12 @@
spring-context-support
+
+ org.springframework.boot
+ spring-boot-autoconfigure
+ true
+
+
org.springframework.cloud
spring-cloud-commons
@@ -93,13 +103,6 @@
true
-
- org.springframework.boot
- spring-boot-starter-web
- test
-
-
-
org.springframework.boot
spring-boot-starter-test
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ConditionalOnNacosDiscoveryEnabled.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ConditionalOnNacosDiscoveryEnabled.java
index 2f4e4a19..18c4db13 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ConditionalOnNacosDiscoveryEnabled.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ConditionalOnNacosDiscoveryEnabled.java
@@ -25,7 +25,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
-@ConditionalOnProperty(value = "spring.cloud.nacos.discovery.enabled", matchIfMissing = true)
+@ConditionalOnProperty(value = "spring.cloud.nacos.discovery.enabled",
+ matchIfMissing = true)
public @interface ConditionalOnNacosDiscoveryEnabled {
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java
index bdb79ac2..7c18dd41 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/NacosDiscoveryProperties.java
@@ -181,17 +181,17 @@ public class NacosDiscoveryProperties {
private String secretKey;
/**
- * Heart beat interval. Time unit: second.
+ * Heart beat interval. Time unit: millisecond.
*/
private Integer heartBeatInterval;
/**
- * Heart beat timeout. Time unit: second.
+ * Heart beat timeout. Time unit: millisecond.
*/
private Integer heartBeatTimeout;
/**
- * Ip delete timeout. Time unit: second.
+ * Ip delete timeout. Time unit: millisecond.
*/
private Integer ipDeleteTimeout;
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClient.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClient.java
index f410c538..d446e292 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClient.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClient.java
@@ -32,11 +32,13 @@ import org.springframework.cloud.client.discovery.DiscoveryClient;
*/
public class NacosDiscoveryClient implements DiscoveryClient {
+ private static final Logger log = LoggerFactory.getLogger(NacosDiscoveryClient.class);
+
/**
* Nacos Discovery Client Description.
*/
public static final String DESCRIPTION = "Spring Cloud Nacos Discovery Client";
- private static final Logger log = LoggerFactory.getLogger(NacosDiscoveryClient.class);
+
private NacosServiceDiscovery serviceDiscovery;
public NacosDiscoveryClient(NacosServiceDiscovery nacosServiceDiscovery) {
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java
index b0dd3628..acf201bc 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryClientConfiguration.java
@@ -31,7 +31,7 @@ import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
/**
* @author xiaojing
@@ -39,7 +39,6 @@ import org.springframework.scheduling.TaskScheduler;
*/
@Configuration
@ConditionalOnDiscoveryEnabled
-// @ConditionalOnBlockingDiscoveryEnabled
@ConditionalOnProperty(value = "spring.cloud.discovery.blocking.enabled", matchIfMissing = true)
@ConditionalOnNacosDiscoveryEnabled
@AutoConfigureBefore({ SimpleDiscoveryClientAutoConfiguration.class,
@@ -58,7 +57,7 @@ public class NacosDiscoveryClientConfiguration {
@ConditionalOnProperty(value = "spring.cloud.nacos.discovery.watch.enabled", matchIfMissing = true)
public NacosWatch nacosWatch(NacosServiceManager nacosServiceManager,
NacosDiscoveryProperties nacosDiscoveryProperties,
- ObjectProvider taskExecutorObjectProvider) {
+ ObjectProvider taskExecutorObjectProvider) {
return new NacosWatch(nacosServiceManager, nacosDiscoveryProperties,
taskExecutorObjectProvider);
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosServiceDiscovery.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosServiceDiscovery.java
index 5a15bdcf..a58f4612 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosServiceDiscovery.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosServiceDiscovery.java
@@ -46,6 +46,31 @@ public class NacosServiceDiscovery {
this.nacosServiceManager = nacosServiceManager;
}
+ /**
+ * Return all instances for the given service.
+ * @param serviceId id of service
+ * @return list of instances
+ * @throws NacosException nacosException
+ */
+ public List getInstances(String serviceId) throws NacosException {
+ String group = discoveryProperties.getGroup();
+ List instances = namingService().selectInstances(serviceId, group,
+ true);
+ return hostToServiceInstanceList(instances, serviceId);
+ }
+
+ /**
+ * Return the names of all services.
+ * @return list of service names
+ * @throws NacosException nacosException
+ */
+ public List getServices() throws NacosException {
+ String group = discoveryProperties.getGroup();
+ ListView services = namingService().getServicesOfServer(1,
+ Integer.MAX_VALUE, group);
+ return services.getData();
+ }
+
public static List hostToServiceInstanceList(
List instances, String serviceId) {
List result = new ArrayList<>(instances.size());
@@ -86,31 +111,6 @@ public class NacosServiceDiscovery {
return nacosServiceInstance;
}
- /**
- * Return all instances for the given service.
- * @param serviceId id of service
- * @return list of instances
- * @throws NacosException nacosException
- */
- public List getInstances(String serviceId) throws NacosException {
- String group = discoveryProperties.getGroup();
- List instances = namingService().selectInstances(serviceId, group,
- true);
- return hostToServiceInstanceList(instances, serviceId);
- }
-
- /**
- * Return the names of all services.
- * @return list of service names
- * @throws NacosException nacosException
- */
- public List getServices() throws NacosException {
- String group = discoveryProperties.getGroup();
- ListView services = namingService().getServicesOfServer(1,
- Integer.MAX_VALUE, group);
- return services.getData();
- }
-
private NamingService namingService() {
return nacosServiceManager
.getNamingService(discoveryProperties.getNacosProperties());
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java
index b0c0c48c..58d3d11f 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosWatch.java
@@ -27,7 +27,6 @@ import java.util.concurrent.atomic.AtomicLong;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.NacosServiceManager;
-import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import com.alibaba.nacos.api.naming.listener.Event;
import com.alibaba.nacos.api.naming.listener.EventListener;
@@ -41,7 +40,6 @@ 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;
/**
@@ -51,18 +49,26 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycle {
private static final Logger log = LoggerFactory.getLogger(NacosWatch.class);
- private final AtomicBoolean running = new AtomicBoolean(false);
- private final AtomicLong nacosWatchIndex = new AtomicLong(0);
- private final NacosDiscoveryProperties properties;
- private final TaskScheduler taskScheduler;
+
private Map listenerMap = new ConcurrentHashMap<>(16);
+
+ private final AtomicBoolean running = new AtomicBoolean(false);
+
+ private final AtomicLong nacosWatchIndex = new AtomicLong(0);
+
private ApplicationEventPublisher publisher;
+
private ScheduledFuture> watchFuture;
+
private NacosServiceManager nacosServiceManager;
+ private final NacosDiscoveryProperties properties;
+
+ private final ThreadPoolTaskScheduler taskScheduler;
+
public NacosWatch(NacosServiceManager nacosServiceManager,
NacosDiscoveryProperties properties,
- ObjectProvider taskScheduler) {
+ ObjectProvider taskScheduler) {
this.nacosServiceManager = nacosServiceManager;
this.properties = properties;
this.taskScheduler = taskScheduler.getIfAvailable(NacosWatch::getTaskScheduler);
@@ -148,7 +154,7 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl
if (this.watchFuture != null) {
// shutdown current user-thread,
// then the other daemon-threads will terminate automatic.
- ((ThreadPoolTaskScheduler) this.taskScheduler).shutdown();
+ this.taskScheduler.shutdown();
this.watchFuture.cancel(true);
}
@@ -159,7 +165,7 @@ public class NacosWatch implements ApplicationEventPublisherAware, SmartLifecycl
namingService.unsubscribe(properties.getService(), properties.getGroup(),
Arrays.asList(properties.getClusterName()), eventListener);
}
- catch (NacosException e) {
+ catch (Exception e) {
log.error("namingService unsubscribe failed, properties:{}", properties,
e);
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java
index f50aca92..cf147618 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/configclient/NacosDiscoveryClientConfigServiceBootstrapConfiguration.java
@@ -16,6 +16,7 @@
package com.alibaba.cloud.nacos.discovery.configclient;
+import com.alibaba.cloud.nacos.NacosServiceAutoConfiguration;
import com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration;
import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
@@ -31,10 +32,11 @@ import org.springframework.context.annotation.Configuration;
* @author JevonYang
*/
@ConditionalOnClass(ConfigServicePropertySourceLocator.class)
-@ConditionalOnProperty(value = "spring.cloud.config.discovery.enabled", matchIfMissing = false)
+@ConditionalOnProperty(value = "spring.cloud.config.discovery.enabled",
+ matchIfMissing = false)
@Configuration
@ImportAutoConfiguration({ NacosDiscoveryAutoConfiguration.class,
- NacosDiscoveryClientConfiguration.class })
+ NacosServiceAutoConfiguration.class, NacosDiscoveryClientConfiguration.class})
public class NacosDiscoveryClientConfigServiceBootstrapConfiguration {
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpoint.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpoint.java
index 9f88830e..b1aea417 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpoint.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/endpoint/NacosDiscoveryEndpoint.java
@@ -36,7 +36,7 @@ import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
*
* @author xiaojing
*/
-@Endpoint(id = "nacos-discovery")
+@Endpoint(id = "nacosdiscovery")
public class NacosDiscoveryEndpoint {
private static final Logger log = LoggerFactory
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistration.java
index 0d76e62b..75912ca4 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistration.java
@@ -72,16 +72,6 @@ public class NacosRegistration implements Registration, ServiceInstance {
this.context = context;
}
- private static void customize(
- List registrationCustomizers,
- NacosRegistration registration) {
- if (registrationCustomizers != null) {
- for (NacosRegistrationCustomizer customizer : registrationCustomizers) {
- customizer.customize(registration);
- }
- }
- }
-
@PostConstruct
public void init() {
@@ -122,6 +112,16 @@ public class NacosRegistration implements Registration, ServiceInstance {
customize(registrationCustomizers, this);
}
+ private static void customize(
+ List registrationCustomizers,
+ NacosRegistration registration) {
+ if (registrationCustomizers != null) {
+ for (NacosRegistrationCustomizer customizer : registrationCustomizers) {
+ customizer.customize(registration);
+ }
+ }
+ }
+
@Override
public String getServiceId() {
return nacosDiscoveryProperties.getService();
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java
index 0efd8642..9a79a568 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistry.java
@@ -41,6 +41,10 @@ import static org.springframework.util.ReflectionUtils.rethrowRuntimeException;
*/
public class NacosServiceRegistry implements ServiceRegistry {
+ private static final String STATUS_UP = "UP";
+
+ private static final String STATUS_DOWN = "DOWN";
+
private static final Logger log = LoggerFactory.getLogger(NacosServiceRegistry.class);
private final NacosDiscoveryProperties nacosDiscoveryProperties;
@@ -119,7 +123,8 @@ public class NacosServiceRegistry implements ServiceRegistry {
@Override
public void setStatus(Registration registration, String status) {
- if (!status.equalsIgnoreCase("UP") && !status.equalsIgnoreCase("DOWN")) {
+ if (!STATUS_UP.equalsIgnoreCase(status)
+ && !STATUS_DOWN.equalsIgnoreCase(status)) {
log.warn("can't support status {},please choose UP or DOWN", status);
return;
}
@@ -128,7 +133,7 @@ public class NacosServiceRegistry implements ServiceRegistry {
Instance instance = getNacosInstanceFromRegistration(registration);
- if (status.equalsIgnoreCase("DOWN")) {
+ if (STATUS_DOWN.equalsIgnoreCase(status)) {
instance.setEnabled(false);
}
else {
@@ -137,8 +142,8 @@ public class NacosServiceRegistry implements ServiceRegistry {
try {
Properties nacosProperties = nacosDiscoveryProperties.getNacosProperties();
- nacosServiceManager.getNamingMaintainService(nacosProperties)
- .updateInstance(serviceId, instance);
+ nacosServiceManager.getNamingMaintainService(nacosProperties).updateInstance(
+ serviceId, nacosDiscoveryProperties.getGroup(), instance);
}
catch (Exception e) {
throw new RuntimeException("update nacos instance status fail", e);
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.java
index 1b00f5bc..9e991055 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.java
@@ -41,7 +41,8 @@ import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties
@ConditionalOnNacosDiscoveryEnabled
-@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true)
+@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled",
+ matchIfMissing = true)
@AutoConfigureAfter({ AutoServiceRegistrationConfiguration.class,
AutoServiceRegistrationAutoConfiguration.class,
NacosDiscoveryAutoConfiguration.class })
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRule.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRule.java
index 8d705b04..9873b8db 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRule.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/ribbon/NacosRule.java
@@ -20,6 +20,7 @@ import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
+import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.NacosServiceManager;
import com.alibaba.nacos.api.naming.NamingService;
@@ -28,7 +29,6 @@ import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.DynamicServerListLoadBalancer;
import com.netflix.loadbalancer.Server;
-import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories
index e2c189e2..61bd788a 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/resources/META-INF/spring.factories
@@ -4,6 +4,8 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\
com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration,\
com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration,\
+ com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration,\
+ com.alibaba.cloud.nacos.NacosServiceAutoConfiguration
com.alibaba.cloud.nacos.NacosServiceAutoConfiguration,\
com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressTopLevelTests.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressTopLevelTests.java
index 857675a7..db90b57a 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressTopLevelTests.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/NacosDiscoveryPropertiesServerAddressTopLevelTests.java
@@ -37,8 +37,10 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
*
*/
@RunWith(SpringRunner.class)
-@SpringBootTest(classes = NacosDiscoveryPropertiesServerAddressTopLevelTests.TestConfig.class, properties = {
- "spring.cloud.nacos.server-addr=123.123.123.123:8848" }, webEnvironment = RANDOM_PORT)
+@SpringBootTest(
+ classes = NacosDiscoveryPropertiesServerAddressTopLevelTests.TestConfig.class,
+ properties = { "spring.cloud.nacos.server-addr=123.123.123.123:8848" },
+ webEnvironment = RANDOM_PORT)
public class NacosDiscoveryPropertiesServerAddressTopLevelTests {
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java
index e59059a9..25c8f145 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosAutoServiceRegistrationIpNetworkInterfaceTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2013-2018 the original author or authors.
+ * 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.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.alibaba.cloud.nacos.registry;
+package org.springframework.cloud.alibaba.nacos.registry;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
@@ -26,6 +26,10 @@ import java.util.Properties;
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
+import com.alibaba.cloud.nacos.registry.MockNamingService;
+import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration;
+import com.alibaba.cloud.nacos.registry.NacosRegistration;
+import com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration;
import com.alibaba.nacos.api.NacosFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -56,11 +60,25 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
@PowerMockIgnore("javax.management.*")
@PowerMockRunnerDelegate(SpringRunner.class)
@PrepareForTest({ NacosFactory.class })
-@SpringBootTest(classes = NacosAutoServiceRegistrationIpNetworkInterfaceTests.TestConfig.class, properties = {
- "spring.application.name=myTestService1",
- "spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848" }, webEnvironment = RANDOM_PORT)
+@SpringBootTest(
+ classes = NacosAutoServiceRegistrationIpNetworkInterfaceTests.TestConfig.class,
+ properties = { "spring.application.name=myTestService1",
+ "spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848" },
+ webEnvironment = RANDOM_PORT)
public class NacosAutoServiceRegistrationIpNetworkInterfaceTests {
+ @Autowired
+ private NacosRegistration registration;
+
+ @Autowired
+ private NacosAutoServiceRegistration nacosAutoServiceRegistration;
+
+ @Autowired
+ private NacosDiscoveryProperties properties;
+
+ @Autowired
+ private InetUtils inetUtils;
+
static {
try {
Method method = PowerMockito.method(NacosFactory.class, "createNamingService",
@@ -78,15 +96,6 @@ public class NacosAutoServiceRegistrationIpNetworkInterfaceTests {
}
}
- @Autowired
- private NacosRegistration registration;
- @Autowired
- private NacosAutoServiceRegistration nacosAutoServiceRegistration;
- @Autowired
- private NacosDiscoveryProperties properties;
- @Autowired
- private InetUtils inetUtils;
-
@Test
public void contextLoads() throws Exception {
assertThat(registration).isNotNull();
@@ -94,6 +103,7 @@ public class NacosAutoServiceRegistrationIpNetworkInterfaceTests {
assertThat(nacosAutoServiceRegistration).isNotNull();
checkoutNacosDiscoveryServiceIP();
+
}
private void checkoutNacosDiscoveryServiceIP() {
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosRegistrationCustomizerTest.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosRegistrationCustomizerTest.java
new file mode 100644
index 00000000..139e9f81
--- /dev/null
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosRegistrationCustomizerTest.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2013-2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.alibaba.cloud.nacos.registry;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.Map;
+import java.util.Properties;
+
+import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration;
+import com.alibaba.nacos.api.NacosFactory;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.api.support.MethodProxy;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.modules.junit4.PowerMockRunnerDelegate;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
+
+/**
+ * @author L.cm
+ */
+@RunWith(PowerMockRunner.class)
+@PowerMockIgnore("javax.management.*")
+@PowerMockRunnerDelegate(SpringRunner.class)
+@PrepareForTest({ NacosFactory.class })
+@SpringBootTest(classes = NacosRegistrationCustomizerTest.TestConfig.class,
+ properties = { "spring.application.name=myTestService1",
+ "spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848" },
+ webEnvironment = RANDOM_PORT)
+public class NacosRegistrationCustomizerTest {
+
+ @Autowired
+ private NacosAutoServiceRegistration nacosAutoServiceRegistration;
+
+ static {
+ try {
+ Method method = PowerMockito.method(NacosFactory.class, "createNamingService",
+ Properties.class);
+ MethodProxy.proxy(method, new InvocationHandler() {
+ @Override
+ public Object invoke(Object proxy, Method method, Object[] args)
+ throws Throwable {
+ return new MockNamingService();
+ }
+ });
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ public void contextLoads() throws Exception {
+ NacosRegistration registration = nacosAutoServiceRegistration.getRegistration();
+ Map metadata = registration.getMetadata();
+ Assert.assertEquals("test1", metadata.get("test1"));
+ }
+
+ @Configuration
+ @EnableAutoConfiguration
+ @ImportAutoConfiguration({ AutoServiceRegistrationConfiguration.class,
+ NacosDiscoveryClientConfiguration.class,
+ NacosServiceRegistryAutoConfiguration.class })
+ public static class TestConfig {
+
+ @Bean
+ public NacosRegistrationCustomizer nacosRegistrationCustomizer() {
+ return registration -> {
+ Map metadata = registration.getMetadata();
+ metadata.put("test1", "test1");
+ };
+ }
+
+ }
+
+}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientPropertyOverrideTests.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientPropertyOverrideTests.java
index d5f30409..3692414f 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientPropertyOverrideTests.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/ribbon/NacosRibbonClientPropertyOverrideTests.java
@@ -39,14 +39,14 @@ import org.springframework.test.context.junit4.SpringRunner;
* @author liujunjie
*/
@RunWith(SpringRunner.class)
-@SpringBootTest(classes = NacosRibbonClientPropertyOverrideTests.TestConfiguration.class, properties = {
- "spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848",
- "spring.cloud.nacos.discovery.port=18080",
- "spring.cloud.nacos.discovery.service=remoteApp",
- "localApp.ribbon.NIWSServerListClassName="
- + "com.netflix.loadbalancer.ConfigurationBasedServerList",
- "localApp.ribbon.listOfServers=127.0.0.1:19090",
- "localApp.ribbon.ServerListRefreshInterval=15000" })
+@SpringBootTest(classes = NacosRibbonClientPropertyOverrideTests.TestConfiguration.class,
+ properties = { "spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848",
+ "spring.cloud.nacos.discovery.port=18080",
+ "spring.cloud.nacos.discovery.service=remoteApp",
+ "localApp.ribbon.NIWSServerListClassName="
+ + "com.netflix.loadbalancer.ConfigurationBasedServerList",
+ "localApp.ribbon.listOfServers=127.0.0.1:19090",
+ "localApp.ribbon.ServerListRefreshInterval=15000" })
public class NacosRibbonClientPropertyOverrideTests {
@Autowired
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/pom.xml b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/pom.xml
index 5a4dd449..5fd04996 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/pom.xml
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/pom.xml
@@ -97,7 +97,7 @@
spring-boot-starter-test
test
-
+
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataBeanPostProcessor.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataBeanPostProcessor.java
deleted file mode 100644
index e737c0e0..00000000
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataBeanPostProcessor.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2013-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.cloud.seata.feign;
-
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanPostProcessor;
-
-/**
- * @author xiaojing
- */
-public class SeataBeanPostProcessor implements BeanPostProcessor {
-
- private final SeataFeignObjectWrapper seataFeignObjectWrapper;
-
- SeataBeanPostProcessor(SeataFeignObjectWrapper seataFeignObjectWrapper) {
- this.seataFeignObjectWrapper = seataFeignObjectWrapper;
- }
-
- @Override
- public Object postProcessBeforeInitialization(Object bean, String beanName)
- throws BeansException {
- return this.seataFeignObjectWrapper.wrap(bean);
- }
-
- @Override
- public Object postProcessAfterInitialization(Object bean, String beanName)
- throws BeansException {
- return bean;
- }
-
-}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataContextBeanPostProcessor.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataContextBeanPostProcessor.java
deleted file mode 100644
index 37c35c26..00000000
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataContextBeanPostProcessor.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2013-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.cloud.seata.feign;
-
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.BeanFactory;
-import org.springframework.beans.factory.config.BeanPostProcessor;
-import org.springframework.cloud.openfeign.FeignContext;
-
-/**
- * @author xiaojing
- */
-public class SeataContextBeanPostProcessor implements BeanPostProcessor {
-
- private final BeanFactory beanFactory;
-
- private SeataFeignObjectWrapper seataFeignObjectWrapper;
-
- SeataContextBeanPostProcessor(BeanFactory beanFactory) {
- this.beanFactory = beanFactory;
- }
-
- @Override
- public Object postProcessBeforeInitialization(Object bean, String beanName)
- throws BeansException {
- if (bean instanceof FeignContext && !(bean instanceof SeataFeignContext)) {
- return new SeataFeignContext(getSeataFeignObjectWrapper(),
- (FeignContext) bean);
- }
- return bean;
- }
-
- @Override
- public Object postProcessAfterInitialization(Object bean, String beanName)
- throws BeansException {
- return bean;
- }
-
- private SeataFeignObjectWrapper getSeataFeignObjectWrapper() {
- if (this.seataFeignObjectWrapper == null) {
- this.seataFeignObjectWrapper = this.beanFactory
- .getBean(SeataFeignObjectWrapper.class);
- }
- return this.seataFeignObjectWrapper;
- }
-
-}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignClient.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignClient.java
index 9d5c9870..61b56b6c 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignClient.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignClient.java
@@ -38,8 +38,10 @@ public class SeataFeignClient implements Client {
private static final int MAP_SIZE = 16;
private final Client delegate;
+
private final BeanFactory beanFactory;
+
SeataFeignClient(BeanFactory beanFactory) {
this.beanFactory = beanFactory;
this.delegate = new Default(null, null);
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignClientAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignClientAutoConfiguration.java
deleted file mode 100644
index 98f670ea..00000000
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignClientAutoConfiguration.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright 2013-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.cloud.seata.feign;
-
-import feign.Client;
-import feign.Feign;
-
-import org.springframework.beans.factory.BeanFactory;
-import org.springframework.boot.autoconfigure.AutoConfigureBefore;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.cloud.openfeign.FeignAutoConfiguration;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Scope;
-
-/**
- * @author xiaojing
- */
-
-@Configuration
-@ConditionalOnClass(Client.class)
-@AutoConfigureBefore(FeignAutoConfiguration.class)
-public class SeataFeignClientAutoConfiguration {
-
- @Bean
- @Scope("prototype")
- @ConditionalOnClass(name = "com.netflix.hystrix.HystrixCommand")
- @ConditionalOnProperty(name = "feign.hystrix.enabled", havingValue = "true")
- Feign.Builder feignHystrixBuilder(BeanFactory beanFactory) {
- return SeataHystrixFeignBuilder.builder(beanFactory);
- }
-
- @Bean
- @Scope("prototype")
- @ConditionalOnClass(name = "com.alibaba.csp.sentinel.SphU")
- @ConditionalOnProperty(name = "feign.sentinel.enabled", havingValue = "true")
- Feign.Builder feignSentinelBuilder(BeanFactory beanFactory) {
- return SeataSentinelFeignBuilder.builder(beanFactory);
- }
-
- @Bean
- @ConditionalOnMissingBean
- @Scope("prototype")
- Feign.Builder feignBuilder(BeanFactory beanFactory) {
- return SeataFeignBuilder.builder(beanFactory);
- }
-
- @Configuration
- protected static class FeignBeanPostProcessorConfiguration {
-
- @Bean
- SeataBeanPostProcessor seataBeanPostProcessor(
- SeataFeignObjectWrapper seataFeignObjectWrapper) {
- return new SeataBeanPostProcessor(seataFeignObjectWrapper);
- }
-
- @Bean
- SeataContextBeanPostProcessor seataContextBeanPostProcessor(
- BeanFactory beanFactory) {
- return new SeataContextBeanPostProcessor(beanFactory);
- }
-
- @Bean
- SeataFeignObjectWrapper seataFeignObjectWrapper(BeanFactory beanFactory) {
- return new SeataFeignObjectWrapper(beanFactory);
- }
-
- }
-
-}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignContext.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignContext.java
deleted file mode 100644
index b0723f5a..00000000
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignContext.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2013-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.cloud.seata.feign;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import feign.Client;
-
-import org.springframework.cloud.openfeign.FeignContext;
-
-/**
- * @author xiaojing
- */
-public class SeataFeignContext extends FeignContext {
-
- private final SeataFeignObjectWrapper seataFeignObjectWrapper;
-
- private final FeignContext delegate;
-
- SeataFeignContext(SeataFeignObjectWrapper seataFeignObjectWrapper,
- FeignContext delegate) {
- this.seataFeignObjectWrapper = seataFeignObjectWrapper;
- this.delegate = delegate;
- }
-
- @Override
- public T getInstance(String name, Class type) {
- T object = this.delegate.getInstance(name, type);
- if (object instanceof Client) {
- return object;
- }
- return (T) this.seataFeignObjectWrapper.wrap(object);
- }
-
- @Override
- public Map getInstances(String name, Class type) {
- Map instances = this.delegate.getInstances(name, type);
- if (instances == null) {
- return null;
- }
- Map convertedInstances = new HashMap<>();
- for (Map.Entry entry : instances.entrySet()) {
- if (entry.getValue() instanceof Client) {
- convertedInstances.put(entry.getKey(), entry.getValue());
- }
- else {
- convertedInstances.put(entry.getKey(),
- (T) this.seataFeignObjectWrapper.wrap(entry.getValue()));
- }
- }
- return convertedInstances;
- }
-
-}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignObjectWrapper.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignObjectWrapper.java
deleted file mode 100644
index 431d654e..00000000
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataFeignObjectWrapper.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2013-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.cloud.seata.feign;
-
-import feign.Client;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.springframework.beans.factory.BeanFactory;
-import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
-import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory;
-import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient;
-
-/**
- * @author xiaojing
- */
-public class SeataFeignObjectWrapper {
-
- private static final Log LOG = LogFactory.getLog(SeataFeignObjectWrapper.class);
-
- private final BeanFactory beanFactory;
-
- private CachingSpringLoadBalancerFactory cachingSpringLoadBalancerFactory;
-
- private SpringClientFactory springClientFactory;
-
- SeataFeignObjectWrapper(BeanFactory beanFactory) {
- this.beanFactory = beanFactory;
- }
-
- Object wrap(Object bean) {
- if (bean instanceof Client && !(bean instanceof SeataFeignClient)) {
- if (bean instanceof LoadBalancerFeignClient) {
- LoadBalancerFeignClient client = ((LoadBalancerFeignClient) bean);
- return new SeataLoadBalancerFeignClient(client.getDelegate(), factory(),
- clientFactory(), this);
- }
- return new SeataFeignClient(this.beanFactory, (Client) bean);
- }
- return bean;
- }
-
- CachingSpringLoadBalancerFactory factory() {
- if (this.cachingSpringLoadBalancerFactory == null) {
- this.cachingSpringLoadBalancerFactory = this.beanFactory
- .getBean(CachingSpringLoadBalancerFactory.class);
- }
- return this.cachingSpringLoadBalancerFactory;
- }
-
- SpringClientFactory clientFactory() {
- if (this.springClientFactory == null) {
- this.springClientFactory = this.beanFactory
- .getBean(SpringClientFactory.class);
- }
- return this.springClientFactory;
- }
-
-}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataLoadBalancerFeignClient.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataLoadBalancerFeignClient.java
deleted file mode 100644
index 8204fed8..00000000
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/SeataLoadBalancerFeignClient.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2013-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.cloud.seata.feign;
-
-import java.io.IOException;
-
-import feign.Client;
-import feign.Request;
-import feign.Response;
-
-import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
-import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory;
-import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient;
-
-/**
- * @author xiaojing
- * @author yuhuangbin
- */
-public class SeataLoadBalancerFeignClient extends LoadBalancerFeignClient {
-
- SeataLoadBalancerFeignClient(Client delegate,
- CachingSpringLoadBalancerFactory lbClientFactory,
- SpringClientFactory clientFactory,
- SeataFeignObjectWrapper seataFeignObjectWrapper) {
- super((Client) seataFeignObjectWrapper.wrap(delegate), lbClientFactory,
- clientFactory);
- }
-
- @Override
- public Response execute(Request request, Request.Options options) throws IOException {
- return super.execute(request, options);
- }
-
-}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/hystrix/SeataHystrixConcurrencyStrategy.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/hystrix/SeataHystrixConcurrencyStrategy.java
index 2aa507bd..d0a1528b 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/hystrix/SeataHystrixConcurrencyStrategy.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/feign/hystrix/SeataHystrixConcurrencyStrategy.java
@@ -36,6 +36,7 @@ import io.seata.core.context.RootContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
@@ -156,11 +157,15 @@ public class SeataHystrixConcurrencyStrategy extends HystrixConcurrencyStrategy
public K call() throws Exception {
try {
RequestContextHolder.setRequestAttributes(requestAttributes);
- RootContext.bind(xid);
+ if (!StringUtils.isEmpty(xid)) {
+ RootContext.bind(xid);
+ }
return actual.call();
}
finally {
- RootContext.unbind();
+ if (!StringUtils.isEmpty(xid)) {
+ RootContext.unbind();
+ }
RequestContextHolder.resetRequestAttributes();
}
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/rest/SeataRestTemplateAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/rest/SeataRestTemplateAutoConfiguration.java
index 68f1ff7d..7f82288f 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/rest/SeataRestTemplateAutoConfiguration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/rest/SeataRestTemplateAutoConfiguration.java
@@ -14,12 +14,12 @@
* limitations under the License.
*/
+
package com.alibaba.cloud.seata.rest;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
@@ -35,16 +35,17 @@ import org.springframework.web.client.RestTemplate;
@Configuration
public class SeataRestTemplateAutoConfiguration {
- @Autowired(required = false)
- private Collection restTemplates;
- @Autowired
- private SeataRestTemplateInterceptor seataRestTemplateInterceptor;
-
@Bean
public SeataRestTemplateInterceptor seataRestTemplateInterceptor() {
return new SeataRestTemplateInterceptor();
}
+ @Autowired(required = false)
+ private Collection restTemplates;
+
+ @Autowired
+ private SeataRestTemplateInterceptor seataRestTemplateInterceptor;
+
@PostConstruct
public void init() {
if (this.restTemplates != null) {
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptor.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptor.java
index bc1e76de..f7ec7659 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptor.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/java/com/alibaba/cloud/seata/web/SeataHandlerInterceptor.java
@@ -30,10 +30,10 @@ import org.springframework.web.servlet.HandlerInterceptor;
* @author xiaojing
*
* Seata HandlerInterceptor, Convert Seata information into
- * @see RootContext from http request's header in
- * {@link HandlerInterceptor#preHandle(HttpServletRequest, HttpServletResponse, Object )},
+ * @see io.seata.core.context.RootContext from http request's header in
+ * {@link org.springframework.web.servlet.HandlerInterceptor#preHandle(HttpServletRequest , HttpServletResponse , Object )},
* And clean up Seata information after servlet method invocation in
- * {@link HandlerInterceptor#afterCompletion(HttpServletRequest, HttpServletResponse, Object, Exception)}
+ * {@link org.springframework.web.servlet.HandlerInterceptor#afterCompletion(HttpServletRequest, HttpServletResponse, Object, Exception)}
*/
public class SeataHandlerInterceptor implements HandlerInterceptor {
@@ -43,7 +43,6 @@ public class SeataHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) {
-
String xid = RootContext.getXID();
String rpcXid = request.getHeader(RootContext.KEY_XID);
if (log.isDebugEnabled()) {
@@ -56,6 +55,7 @@ public class SeataHandlerInterceptor implements HandlerInterceptor {
log.debug("bind {} to RootContext", rpcXid);
}
}
+
return true;
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/resources/META-INF/spring.factories
index 54b578ae..5214e379 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/resources/META-INF/spring.factories
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-seata/src/main/resources/META-INF/spring.factories
@@ -1,6 +1,5 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.alibaba.cloud.seata.rest.SeataRestTemplateAutoConfiguration,\
com.alibaba.cloud.seata.web.SeataHandlerInterceptorConfiguration,\
-com.alibaba.cloud.seata.feign.SeataFeignClientAutoConfiguration,\
com.alibaba.cloud.seata.feign.hystrix.SeataHystrixAutoConfiguration
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelProperties.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelProperties.java
index d4397b22..921cb518 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelProperties.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelProperties.java
@@ -232,8 +232,9 @@ public class SentinelProperties {
private String blockPage;
@Deprecated
- @DeprecatedConfigurationProperty(reason = "replaced to SentinelProperties#blockPage.", replacement = SentinelConstants.PROPERTY_PREFIX
- + ".block-page")
+ @DeprecatedConfigurationProperty(
+ reason = "replaced to SentinelProperties#blockPage.",
+ replacement = SentinelConstants.PROPERTY_PREFIX + ".block-page")
public String getBlockPage() {
return blockPage;
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelWebAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelWebAutoConfiguration.java
index 8f55d3fd..54d2dff1 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelWebAutoConfiguration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelWebAutoConfiguration.java
@@ -83,14 +83,16 @@ public class SentinelWebAutoConfiguration implements WebMvcConfigurer {
}
@Bean
- @ConditionalOnProperty(name = "spring.cloud.sentinel.filter.enabled", matchIfMissing = true)
+ @ConditionalOnProperty(name = "spring.cloud.sentinel.filter.enabled",
+ matchIfMissing = true)
public SentinelWebInterceptor sentinelWebInterceptor(
SentinelWebMvcConfig sentinelWebMvcConfig) {
return new SentinelWebInterceptor(sentinelWebMvcConfig);
}
@Bean
- @ConditionalOnProperty(name = "spring.cloud.sentinel.filter.enabled", matchIfMissing = true)
+ @ConditionalOnProperty(name = "spring.cloud.sentinel.filter.enabled",
+ matchIfMissing = true)
public SentinelWebMvcConfig sentinelWebMvcConfig() {
SentinelWebMvcConfig sentinelWebMvcConfig = new SentinelWebMvcConfig();
sentinelWebMvcConfig.setHttpMethodSpecify(properties.getHttpMethodSpecify());
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelWebFluxAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelWebFluxAutoConfiguration.java
index 57f297b3..e42133c3 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelWebFluxAutoConfiguration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/SentinelWebFluxAutoConfiguration.java
@@ -77,14 +77,16 @@ public class SentinelWebFluxAutoConfiguration {
@Bean
@Order(-2)
- @ConditionalOnProperty(name = "spring.cloud.sentinel.filter.enabled", matchIfMissing = true)
+ @ConditionalOnProperty(name = "spring.cloud.sentinel.filter.enabled",
+ matchIfMissing = true)
public SentinelBlockExceptionHandler sentinelBlockExceptionHandler() {
return new SentinelBlockExceptionHandler(viewResolvers, serverCodecConfigurer);
}
@Bean
@Order(-1)
- @ConditionalOnProperty(name = "spring.cloud.sentinel.filter.enabled", matchIfMissing = true)
+ @ConditionalOnProperty(name = "spring.cloud.sentinel.filter.enabled",
+ matchIfMissing = true)
public SentinelWebFluxFilter sentinelWebFluxFilter() {
log.info("[Sentinel Starter] register Sentinel SentinelWebFluxFilter");
return new SentinelWebFluxFilter();
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/BlockClassRegistry.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/BlockClassRegistry.java
index b07aeb57..a7dc09ba 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/BlockClassRegistry.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/BlockClassRegistry.java
@@ -27,7 +27,9 @@ import com.alibaba.csp.sentinel.util.StringUtil;
*/
final class BlockClassRegistry {
+
private static final Map FALLBACK_MAP = new ConcurrentHashMap<>();
+
private static final Map BLOCK_HANDLER_MAP = new ConcurrentHashMap<>();
private static final Map URL_CLEANER_MAP = new ConcurrentHashMap<>();
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelAutoConfiguration.java
index 2089d0e6..8dd4f39f 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelAutoConfiguration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelAutoConfiguration.java
@@ -145,7 +145,8 @@ public class SentinelAutoConfiguration {
@Bean
@ConditionalOnMissingBean
@ConditionalOnClass(name = "org.springframework.web.client.RestTemplate")
- @ConditionalOnProperty(name = "resttemplate.sentinel.enabled", havingValue = "true", matchIfMissing = true)
+ @ConditionalOnProperty(name = "resttemplate.sentinel.enabled", havingValue = "true",
+ matchIfMissing = true)
public SentinelBeanPostProcessor sentinelBeanPostProcessor(
ApplicationContext applicationContext) {
return new SentinelBeanPostProcessor(applicationContext);
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelDataSourceHandler.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelDataSourceHandler.java
index 963c612a..2de7727c 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelDataSourceHandler.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelDataSourceHandler.java
@@ -52,14 +52,21 @@ public class SentinelDataSourceHandler implements SmartInitializingSingleton {
private static final Logger log = LoggerFactory
.getLogger(SentinelDataSourceHandler.class);
- private final String DATA_TYPE_FIELD = "dataType";
- private final String CUSTOM_DATA_TYPE = "custom";
- private final String CONVERTER_CLASS_FIELD = "converterClass";
- private final DefaultListableBeanFactory beanFactory;
- private final SentinelProperties sentinelProperties;
- private final Environment env;
+
private List dataTypeList = Arrays.asList("json", "xml");
+ private final String DATA_TYPE_FIELD = "dataType";
+
+ private final String CUSTOM_DATA_TYPE = "custom";
+
+ private final String CONVERTER_CLASS_FIELD = "converterClass";
+
+ private final DefaultListableBeanFactory beanFactory;
+
+ private final SentinelProperties sentinelProperties;
+
+ private final Environment env;
+
public SentinelDataSourceHandler(DefaultListableBeanFactory beanFactory,
SentinelProperties sentinelProperties, Environment env) {
this.beanFactory = beanFactory;
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelEndpointAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelEndpointAutoConfiguration.java
index caa5afd2..f88457ef 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelEndpointAutoConfiguration.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelEndpointAutoConfiguration.java
@@ -19,6 +19,7 @@ package com.alibaba.cloud.sentinel.endpoint;
import com.alibaba.cloud.sentinel.SentinelProperties;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+//import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint;
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint;
import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelHealthIndicator.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelHealthIndicator.java
index ea8aacd0..c2031c62 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelHealthIndicator.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelHealthIndicator.java
@@ -76,7 +76,9 @@ public class SentinelHealthIndicator extends AbstractHealthIndicator {
// detail
if (!sentinelProperties.isEnabled()) {
detailMap.put("enabled", false);
- withDetails(builder.up(), detailMap);
+ detailMap.forEach((key, value)->{
+ builder.up().withDetail(key, value);
+ });
return;
}
@@ -144,16 +146,15 @@ public class SentinelHealthIndicator extends AbstractHealthIndicator {
// If Dashboard and DataSource are both OK, the health status is UP
if (dashboardUp && dataSourceUp) {
- withDetails(builder.up(), detailMap);
+ detailMap.forEach((key, value)->{
+ builder.up().withDetail(key, value);
+ });
}
else {
- withDetails(builder.unknown(), detailMap);
+ detailMap.forEach((key, value)->{
+ builder.unknown().withDetail(key, value);
+ });
}
}
- private void withDetails(Health.Builder builder, Map detailMap) {
- for (String key : detailMap.keySet()) {
- builder.withDetail(key, detailMap.get(key));
- }
- }
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelContractHolder.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelContractHolder.java
index cf0716c7..9a5acfd3 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelContractHolder.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelContractHolder.java
@@ -32,12 +32,13 @@ import feign.MethodMetadata;
*/
public class SentinelContractHolder implements Contract {
+ private final Contract delegate;
+
/**
* map key is constructed by ClassFullName + configKey. configKey is constructed by
* {@link feign.Feign#configKey}
*/
public final static Map METADATA_MAP = new HashMap<>();
- private final Contract delegate;
public SentinelContractHolder(Contract delegate) {
this.delegate = delegate;
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelInvocationHandler.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelInvocationHandler.java
index a9b4e066..1b66996b 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelInvocationHandler.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/feign/SentinelInvocationHandler.java
@@ -80,8 +80,7 @@ public class SentinelInvocationHandler implements InvocationHandler {
if ("equals".equals(method.getName())) {
try {
Object otherHandler = args.length > 0 && args[0] != null
- ? Proxy.getInvocationHandler(args[0])
- : null;
+ ? Proxy.getInvocationHandler(args[0]) : null;
return equals(otherHandler);
}
catch (IllegalArgumentException e) {
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json
index 49b06b0d..fe001b9a 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json
@@ -24,7 +24,14 @@
"defaultValue": true,
"description": "Specify whether unify web context(i.e. use the default context name), and is true by default."
},
- { "name": "spring.cloud.sentinel.transport.port",
+ {
+ "name": "spring.cloud.sentinel.web-context-unify",
+ "type": "java.lang.Boolean",
+ "defaultValue": true,
+ "description": "Specify whether unify web context(i.e. use the default context name), and is true by default."
+ },
+ {
+ "name": "spring.cloud.sentinel.transport.port",
"type": "java.lang.String",
"defaultValue": "8719",
"description": "sentinel api port."
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelAutoConfigurationTests.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelAutoConfigurationTests.java
index f79c1e18..56c5bf6b 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelAutoConfigurationTests.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelAutoConfigurationTests.java
@@ -63,9 +63,8 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
* @author jiashuai.xie
*/
@RunWith(SpringRunner.class)
-@SpringBootTest(classes = {
- SentinelAutoConfigurationTests.TestConfig.class }, properties = {
- "spring.cloud.sentinel.filter.order=123",
+@SpringBootTest(classes = { SentinelAutoConfigurationTests.TestConfig.class },
+ properties = { "spring.cloud.sentinel.filter.order=123",
"spring.cloud.sentinel.filter.urlPatterns=/*,/test",
"spring.cloud.sentinel.metric.fileSingleSize=9999",
"spring.cloud.sentinel.metric.fileTotalCount=100",
@@ -76,7 +75,8 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
"spring.cloud.sentinel.transport.dashboard=http://localhost:8080,http://localhost:8081",
"spring.cloud.sentinel.transport.port=9999",
"spring.cloud.sentinel.transport.clientIp=1.1.1.1",
- "spring.cloud.sentinel.transport.heartbeatIntervalMs=20000" }, webEnvironment = RANDOM_PORT)
+ "spring.cloud.sentinel.transport.heartbeatIntervalMs=20000" },
+ webEnvironment = RANDOM_PORT)
public class SentinelAutoConfigurationTests {
@Autowired
@@ -239,13 +239,15 @@ public class SentinelAutoConfigurationTests {
}
@Bean
- @SentinelRestTemplate(blockHandlerClass = ExceptionUtil.class, blockHandler = "handleException")
+ @SentinelRestTemplate(blockHandlerClass = ExceptionUtil.class,
+ blockHandler = "handleException")
RestTemplate restTemplateWithBlockClass() {
return new RestTemplate();
}
@Bean
- @SentinelRestTemplate(fallbackClass = ExceptionUtil.class, fallback = "fallbackException")
+ @SentinelRestTemplate(fallbackClass = ExceptionUtil.class,
+ fallback = "fallbackException")
RestTemplate restTemplateWithFallbackClass() {
return new RestTemplate();
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelFeignTests.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelFeignTests.java
index 9b6228a9..ad0b5929 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelFeignTests.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelFeignTests.java
@@ -45,8 +45,8 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
* @author Jim
*/
@RunWith(SpringRunner.class)
-@SpringBootTest(classes = { SentinelFeignTests.TestConfig.class }, properties = {
- "feign.sentinel.enabled=true" })
+@SpringBootTest(classes = { SentinelFeignTests.TestConfig.class },
+ properties = { "feign.sentinel.enabled=true" })
public class SentinelFeignTests {
@Autowired
@@ -118,22 +118,6 @@ public class SentinelFeignTests {
assertThat(echoService.equals(fooService)).isEqualTo(Boolean.FALSE);
}
- @FeignClient(value = "test-service", fallback = EchoServiceFallback.class)
- public interface EchoService {
-
- @RequestMapping(path = "echo/{str}")
- String echo(@RequestParam("str") String param);
-
- }
-
- @FeignClient(value = "foo-service", fallbackFactory = CustomFallbackFactory.class)
- public interface FooService {
-
- @RequestMapping(path = "echo/{str}")
- String echo(@RequestParam("str") String param);
-
- }
-
@FeignClient("bar-service")
public interface BarService {
@@ -172,6 +156,23 @@ public class SentinelFeignTests {
}
+ @FeignClient(value = "test-service", fallback = EchoServiceFallback.class)
+ public interface EchoService {
+
+ @RequestMapping(path = "echo/{str}")
+ String echo(@RequestParam("str") String param);
+
+ }
+
+ @FeignClient(value = "foo-service", fallbackFactory = CustomFallbackFactory.class)
+ public interface FooService {
+
+ @RequestMapping(path = "echo/{str}")
+ String echo(@RequestParam("str") String param);
+
+ }
+
+
public static class EchoServiceFallback implements EchoService {
@Override
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelRestTemplateTests.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelRestTemplateTests.java
index 1e1dc040..f2560ab9 100644
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelRestTemplateTests.java
+++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelRestTemplateTests.java
@@ -20,6 +20,7 @@ import com.alibaba.cloud.sentinel.annotation.SentinelRestTemplate;
import com.alibaba.cloud.sentinel.custom.SentinelBeanPostProcessor;
import com.alibaba.cloud.sentinel.rest.SentinelClientHttpResponse;
import com.alibaba.csp.sentinel.slots.block.BlockException;
+
import org.junit.Test;
import org.springframework.beans.factory.BeanCreationException;
@@ -188,7 +189,7 @@ public class SentinelRestTemplateTests {
}
@Bean
- @SentinelRestTemplate(blockHandlerClass = ExceptionUtil.class, blockHandler = "handleException", fallbackClass = ExceptionUtil.class, fallback = "fallbackException", urlCleanerClass = UrlCleanUtil.class, urlCleaner = "clean")
+ @SentinelRestTemplate(blockHandlerClass = SentinelRestTemplateTests.ExceptionUtil.class, blockHandler = "handleException", fallbackClass = SentinelRestTemplateTests.ExceptionUtil.class, fallback = "fallbackException", urlCleanerClass = SentinelRestTemplateTests.UrlCleanUtil.class, urlCleaner = "clean")
RestTemplate restTemplate() {
return new RestTemplate();
}
@@ -205,7 +206,7 @@ public class SentinelRestTemplateTests {
}
@Bean
- @SentinelRestTemplate(blockHandlerClass = ExceptionUtil.class, blockHandler = "handleException1")
+ @SentinelRestTemplate(blockHandlerClass = SentinelRestTemplateTests.ExceptionUtil.class, blockHandler = "handleException1")
RestTemplate restTemplate() {
return new RestTemplate();
}
@@ -239,7 +240,7 @@ public class SentinelRestTemplateTests {
}
@Bean
- @SentinelRestTemplate(blockHandlerClass = ExceptionUtil.class, blockHandler = "handleException2")
+ @SentinelRestTemplate(blockHandlerClass = SentinelRestTemplateTests.ExceptionUtil.class, blockHandler = "handleException2")
RestTemplate restTemplate() {
return new RestTemplate();
}
@@ -330,7 +331,7 @@ public class SentinelRestTemplateTests {
}
@Bean
- @SentinelRestTemplate(urlCleanerClass = UrlCleanUtil.class, urlCleaner = "clean1")
+ @SentinelRestTemplate(urlCleanerClass = SentinelRestTemplateTests.UrlCleanUtil.class, urlCleaner = "clean1")
RestTemplate restTemplate() {
return new RestTemplate();
}
@@ -347,13 +348,19 @@ public class SentinelRestTemplateTests {
}
@Bean
- @SentinelRestTemplate(urlCleanerClass = UrlCleanUtil.class, urlCleaner = "clean2")
+ @SentinelRestTemplate(urlCleanerClass = SentinelRestTemplateTests.UrlCleanUtil.class, urlCleaner = "clean2")
RestTemplate restTemplate() {
return new RestTemplate();
}
}
+ @Bean
+ @SentinelRestTemplate
+ RestTemplate restTemplate2() {
+ return new RestTemplate();
+ }
+
public static class ExceptionUtil {
public static SentinelClientHttpResponse handleException(HttpRequest request,
@@ -390,5 +397,4 @@ public class SentinelRestTemplateTests {
}
}
-
}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/pom.xml b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/pom.xml
deleted file mode 100644
index 9b44217d..00000000
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/pom.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
- com.alibaba.cloud
- spring-cloud-alibaba-starters
- ${revision}
- ../pom.xml
-
-
- 4.0.0
-
- spring-cloud-starter-alibaba-sidecar
- Spring Cloud Starter Alibaba Sidecar
-
-
-
- org.springframework.boot
- spring-boot-starter
- true
-
-
-
- org.springframework.cloud
- spring-cloud-starter-gateway
- true
-
-
-
- org.springframework.boot
- spring-boot-starter-actuator
- true
-
-
-
- com.alibaba.cloud
- spring-cloud-starter-alibaba-nacos-discovery
- true
-
-
-
- org.springframework.cloud
- spring-cloud-starter-consul-discovery
- true
-
-
-
- org.springframework.boot
- spring-boot-configuration-processor
- true
-
-
-
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarAutoConfiguration.java
deleted file mode 100644
index 6343548b..00000000
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarAutoConfiguration.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2013-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.cloud.sidecar;
-
-import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.env.ConfigurableEnvironment;
-import org.springframework.web.client.RestTemplate;
-
-/**
- * @author www.itmuch.com
- */
-@Configuration
-public class SidecarAutoConfiguration {
-
- @Bean
- @ConditionalOnMissingBean
- public RestTemplate restTemplate() {
- return new RestTemplate();
- }
-
- @Bean
- @ConditionalOnEnabledHealthIndicator("sidecar")
- public SidecarHealthIndicator sidecarHealthIndicator(
- SidecarProperties sidecarProperties, RestTemplate restTemplate) {
- return new SidecarHealthIndicator(sidecarProperties, restTemplate);
- }
-
- @Bean
- public SidecarHealthChecker sidecarHealthChecker(
- SidecarDiscoveryClient sidecarDiscoveryClient,
- SidecarHealthIndicator sidecarHealthIndicator,
- SidecarProperties sidecarProperties, ConfigurableEnvironment environment) {
- SidecarHealthChecker cleaner = new SidecarHealthChecker(sidecarDiscoveryClient,
- sidecarHealthIndicator, sidecarProperties, environment);
- cleaner.check();
- return cleaner;
- }
-
-}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarDiscoveryClient.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarDiscoveryClient.java
deleted file mode 100644
index 8a67c575..00000000
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarDiscoveryClient.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2013-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.cloud.sidecar;
-
-/**
- * @author www.itmuch.com
- */
-public interface SidecarDiscoveryClient {
-
- /**
- * register instance.
- * @param applicationName applicationName
- * @param ip ip
- * @param port port
- */
- void registerInstance(String applicationName, String ip, Integer port);
-
- /**
- * deregister instance.
- * @param applicationName applicationName
- * @param ip ip
- * @param port port
- */
- void deregisterInstance(String applicationName, String ip, Integer port);
-
-}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarHealthChecker.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarHealthChecker.java
deleted file mode 100644
index fabccd12..00000000
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarHealthChecker.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright 2013-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.cloud.sidecar;
-
-import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.TimeUnit;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import reactor.core.scheduler.Schedulers;
-
-import org.springframework.boot.actuate.health.HealthIndicator;
-import org.springframework.boot.actuate.health.Status;
-import org.springframework.core.env.ConfigurableEnvironment;
-
-/**
- * @author www.itmuch.com
- * @author yuhuangbin
- */
-public class SidecarHealthChecker {
-
- private static final Logger log = LoggerFactory.getLogger(SidecarHealthChecker.class);
-
- private final Map sidecarInstanceCacheMap = new ConcurrentHashMap<>();
-
- private final SidecarDiscoveryClient sidecarDiscoveryClient;
-
- private final HealthIndicator healthIndicator;
-
- private final SidecarProperties sidecarProperties;
-
- private final ConfigurableEnvironment environment;
-
- public SidecarHealthChecker(SidecarDiscoveryClient sidecarDiscoveryClient,
- HealthIndicator healthIndicator, SidecarProperties sidecarProperties,
- ConfigurableEnvironment environment) {
- this.sidecarDiscoveryClient = sidecarDiscoveryClient;
- this.healthIndicator = healthIndicator;
- this.sidecarProperties = sidecarProperties;
- this.environment = environment;
- }
-
- public void check() {
- Schedulers.single().schedulePeriodically(() -> {
- String applicationName = environment.getProperty("spring.application.name");
- String ip = sidecarProperties.getIp();
- Integer port = sidecarProperties.getPort();
-
- Status status = healthIndicator.health().getStatus();
-
- instanceCache(applicationName, ip, port, status);
- if (status.equals(Status.UP)) {
- if (needRegister(applicationName, ip, port, status)) {
- this.sidecarDiscoveryClient.registerInstance(applicationName, ip,
- port);
- log.info(
- "Polyglot service changed and Health check success. register the new instance. applicationName = {}, ip = {}, port = {}, status = {}",
- applicationName, ip, port, status);
- }
- }
- else {
- log.warn(
- "Health check failed. unregister this instance. applicationName = {}, ip = {}, port = {}, status = {}",
- applicationName, ip, port, status);
- this.sidecarDiscoveryClient.deregisterInstance(applicationName, ip, port);
- sidecarInstanceCacheMap.put(applicationName,
- buildCache(ip, port, status));
- }
-
- }, 0, sidecarProperties.getHealthCheckInterval(), TimeUnit.MILLISECONDS);
- }
-
- private void instanceCache(String applicationName, String ip, Integer port,
- Status status) {
- sidecarInstanceCacheMap.putIfAbsent(applicationName,
- buildCache(ip, port, status));
- }
-
- private boolean needRegister(String applicationName, String ip, Integer port,
- Status status) {
- SidecarInstanceCache cacheRecord = sidecarInstanceCacheMap.get(applicationName);
- SidecarInstanceCache cache = buildCache(ip, port, status);
-
- if (!Objects.equals(cache, cacheRecord)) {
- // modify the cache info
- sidecarInstanceCacheMap.put(applicationName, cache);
- return true;
- }
- return false;
- }
-
- private SidecarInstanceCache buildCache(String ip, Integer port, Status status) {
- SidecarInstanceCache cache = new SidecarInstanceCache();
- cache.setIp(ip);
- cache.setPort(port);
- cache.setStatus(status);
- return cache;
- }
-
-}
diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarHealthIndicator.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarHealthIndicator.java
deleted file mode 100644
index 4d07a380..00000000
--- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sidecar/src/main/java/com/alibaba/cloud/sidecar/SidecarHealthIndicator.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright 2013-2018 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.alibaba.cloud.sidecar;
-
-import java.net.URI;
-import java.util.Map;
-
-import org.springframework.boot.actuate.health.AbstractHealthIndicator;
-import org.springframework.boot.actuate.health.Health;
-import org.springframework.core.ParameterizedTypeReference;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.client.RestTemplate;
-
-/**
- * @author www.itmuch.com
- */
-public class SidecarHealthIndicator extends AbstractHealthIndicator {
-
- private final SidecarProperties sidecarProperties;
-
- private final RestTemplate restTemplate;
-
- public SidecarHealthIndicator(SidecarProperties sidecarProperties,
- RestTemplate restTemplate) {
- this.sidecarProperties = sidecarProperties;
- this.restTemplate = restTemplate;
- }
-
- @Override
- protected void doHealthCheck(Health.Builder builder) throws Exception {
- try {
- URI uri = this.sidecarProperties.getHealthCheckUrl();
- if (uri == null) {
- builder.up();
- return;
- }
-
- ResponseEntity