Compare commits

...
36 changed files with 156 additions and 50 deletions
+6 -1
View File
@@ -115,6 +115,11 @@ https://eclipse.org[Eclipse] when working with the code. We use the
https://eclipse.org/m2e/[m2eclipse] eclipse plugin for maven support. Other IDEs and tools
should also work without issue as long as they use Maven 3.3.3 or better.
==== Activate the Spring Maven profile
Spring Cloud projects require the 'spring' Maven profile to be activated to resolve
the spring milestone and snapshot repositories. Use your preferred IDE to set this
profile to be active, or you may experience build errors.
==== Importing into eclipse with m2eclipse
We recommend the https://eclipse.org/m2e/[m2eclipse] eclipse plugin when working with
eclipse. If you don't already have m2eclipse installed it is available from the "eclipse
@@ -322,7 +327,7 @@ image::https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/{spring
Go to `File` -> `Settings` -> `Other settings` -> `Checkstyle`. There click on the `+` icon in the `Configuration file` section. There, you'll have to define where the checkstyle rules should be picked from. In the image above, we've picked the rules from the cloned Spring Cloud Build repository. However, you can point to the Spring Cloud Build's GitHub repository (e.g. for the `checkstyle.xml` : `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle.xml`). We need to provide the following variables:
- `checkstyle.header.file` - please point it to the Spring Cloud Build's, `spring-cloud-build-tools/src/main/resources/checkstyle/checkstyle-header.txt` file either in your cloned repo or via the `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt` URL.
- `checkstyle.header.file` - please point it to the Spring Cloud Build's, `spring-cloud-build-tools/src/main/resources/checkstyle-header.txt` file either in your cloned repo or via the `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt` URL.
- `checkstyle.suppressions.file` - default suppressions. Please point it to the Spring Cloud Build's, `spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml` file either in your cloned repo or via the `https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml` URL.
- `checkstyle.additional.suppressions.file` - this variable corresponds to suppressions in your local project. E.g. you're working on `spring-cloud-contract`. Then point to the `project-root/src/checkstyle/checkstyle-suppressions.xml` folder. Example for `spring-cloud-contract` would be: `/home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml`.
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
</parent>
<artifactId>spring-cloud-netflix-docs</artifactId>
<packaging>pom</packaging>
@@ -705,6 +705,10 @@ Then visit `/hystrix` and point the dashboard to an individual instance's `/hyst
NOTE: When connecting to a `/hystrix.stream` endpoint that uses HTTPS, the certificate used by the server must be trusted by the JVM.
If the certificate is not trusted, you must import the certificate into the JVM in order for the Hystrix Dashboard to make a successful connection to the stream endpoint.
NOTE: In order to use the `/proxy.stream` endpoint you must configure a list of hosts to allow connections to. To set the
list of allowed hosts use `hystrix.dashboard.proxyStreamAllowList`. You can use an Ant-style pattern in the host name to
match against a wider range of host names.
=== Turbine
Looking at an individual instance's Hystrix data is not very useful in terms of the overall health of the system. https://github.com/Netflix/Turbine[Turbine] is an application that aggregates all of the relevant `/hystrix.stream` endpoints into a combined `/turbine.stream` for use in the Hystrix Dashboard.
+4 -4
View File
@@ -3,14 +3,14 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-cloud-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<packaging>pom</packaging>
<name>Spring Cloud Netflix</name>
<description>Spring Cloud Netflix</description>
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-build</artifactId>
<version>2.1.10.BUILD-SNAPSHOT</version>
<version>2.1.11.RELEASE</version>
<relativePath />
</parent>
<scm>
@@ -21,8 +21,8 @@
</scm>
<properties>
<bintray.package>netflix</bintray.package>
<spring-cloud-commons.version>2.1.5.BUILD-SNAPSHOT</spring-cloud-commons.version>
<spring-cloud-config.version>2.1.6.BUILD-SNAPSHOT</spring-cloud-config.version>
<spring-cloud-commons.version>2.1.6.RELEASE</spring-cloud-commons.version>
<spring-cloud-config.version>2.1.8.RELEASE</spring-cloud-config.version>
<spring-cloud-stream.version>Fishtown.SR4</spring-cloud-stream.version>
<!-- Has to be a stable version (not one that depends on this version of netflix): -->
<donotreplacespring-cloud-contract.version>2.1.3.RELEASE</donotreplacespring-cloud-contract.version>
+1 -1
View File
@@ -6,7 +6,7 @@
<parent>
<artifactId>spring-cloud-netflix</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<relativePath>..</relativePath> <!-- lookup parent from repository -->
</parent>
@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<relativePath>..</relativePath> <!-- lookup parent from repository -->
</parent>
<artifactId>spring-cloud-netflix-concurrency-limits</artifactId>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<relativePath>..</relativePath> <!-- lookup parent from repository -->
</parent>
<artifactId>spring-cloud-netflix-core</artifactId>
+2 -2
View File
@@ -5,11 +5,11 @@
<parent>
<artifactId>spring-cloud-dependencies-parent</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.1.10.BUILD-SNAPSHOT</version>
<version>2.1.11.RELEASE</version>
<relativePath/>
</parent>
<artifactId>spring-cloud-netflix-dependencies</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<packaging>pom</packaging>
<name>spring-cloud-netflix-dependencies</name>
<description>Spring Cloud Netflix Dependencies</description>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<relativePath>..</relativePath> <!-- lookup parent from repository -->
</parent>
<artifactId>spring-cloud-netflix-eureka-client</artifactId>
@@ -164,6 +164,7 @@ public class EurekaDiscoveryClient implements DiscoveryClient {
public String getScheme() {
return getUri().getScheme();
}
}
}
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<relativePath>..</relativePath> <!-- lookup parent from repository -->
</parent>
<artifactId>spring-cloud-netflix-eureka-server</artifactId>
@@ -5,11 +5,11 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-build</artifactId>
<version>2.1.10.BUILD-SNAPSHOT</version>
<version>2.1.11.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<artifactId>spring-cloud-netflix-hystrix-contract</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<packaging>jar</packaging>
<name>spring-cloud-netflix-hystrix-contract</name>
<description>Spring Cloud Netflix Hystrix Contract</description>
@@ -8,7 +8,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<relativePath>..</relativePath> <!-- lookup parent from repository -->
</parent>
<dependencies>
@@ -19,7 +19,10 @@ package org.springframework.cloud.netflix.hystrix.dashboard;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Map;
import java.util.Optional;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -47,6 +50,8 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.ui.freemarker.SpringTemplateLoader;
import org.springframework.util.AntPathMatcher;
import org.springframework.util.PathMatcher;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
/**
@@ -88,8 +93,9 @@ public class HystrixDashboardConfiguration {
}
@Bean
public ServletRegistrationBean proxyStreamServlet() {
final ProxyStreamServlet proxyStreamServlet = new ProxyStreamServlet();
public ServletRegistrationBean proxyStreamServlet(
HystrixDashboardProperties properties) {
final ProxyStreamServlet proxyStreamServlet = new ProxyStreamServlet(properties);
proxyStreamServlet.setEnableIgnoreConnectionCloseHeader(
this.dashboardProperties.isEnableIgnoreConnectionCloseHeader());
final ServletRegistrationBean registration = new ServletRegistrationBean(
@@ -118,6 +124,8 @@ public class HystrixDashboardConfiguration {
private boolean enableIgnoreConnectionCloseHeader = false;
private HystrixDashboardProperties properties;
public void setEnableIgnoreConnectionCloseHeader(
boolean enableIgnoreConnectionCloseHeader) {
this.enableIgnoreConnectionCloseHeader = enableIgnoreConnectionCloseHeader;
@@ -125,6 +133,11 @@ public class HystrixDashboardConfiguration {
public ProxyStreamServlet() {
super();
this.properties = new HystrixDashboardProperties();
}
public ProxyStreamServlet(HystrixDashboardProperties properties) {
this.properties = properties;
}
/**
@@ -169,10 +182,18 @@ public class HystrixDashboardConfiguration {
url.append(key).append("=").append(value);
}
}
String proxyUrl = url.toString();
log.info("\n\nProxy opening connection to: " + proxyUrl + "\n\n");
String proxyUrlString = url.toString();
if (!isAllowedToProxy(proxyUrlString)) {
log.warn("Origin parameter: " + origin
+ " is not in the allowed list of proxy host names. If it "
+ "should be allowed add it to hystrix.dashboard.proxyStreamAllowList.");
return;
}
log.info("\n\nProxy opening connection to: " + proxyUrlString + "\n\n");
try {
httpget = new HttpGet(proxyUrl);
httpget = new HttpGet(proxyUrlString);
HttpClient client = ProxyConnectionManager.httpClient;
HttpResponse httpResponse = client.execute(httpget);
int statusCode = httpResponse.getStatusLine().getStatusCode();
@@ -218,7 +239,7 @@ public class HystrixDashboardConfiguration {
}
}
else {
log.warn("Failed opening connection to " + proxyUrl + " : "
log.warn("Failed opening connection to " + proxyUrlString + " : "
+ statusCode + " : " + httpResponse.getStatusLine());
}
}
@@ -250,6 +271,22 @@ public class HystrixDashboardConfiguration {
}
private boolean isAllowedToProxy(String proxyUrlString)
throws MalformedURLException {
URL proxyUrl = new URL(proxyUrlString);
String host = proxyUrl.getHost();
PathMatcher pathMatcher = new AntPathMatcher(".");
Optional<String> optionalPattern = properties.getProxyStreamAllowList()
.stream().filter(pattern -> pathMatcher.match(pattern, host))
.findFirst();
if (optionalPattern.isPresent()) {
return true;
}
return false;
}
private void copyHeadersToServletResponse(Header[] headers,
HttpServletResponse response) {
for (Header header : headers) {
@@ -16,7 +16,10 @@
package org.springframework.cloud.netflix.hystrix.dashboard;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -41,6 +44,20 @@ public class HystrixDashboardProperties {
*/
private Map<String, String> initParameters = new HashMap<>();
private List<String> proxyStreamAllowList = new ArrayList<>();
public List<String> getProxyStreamAllowList() {
return proxyStreamAllowList;
}
public void setProxyStreamAllowList(List<String> proxyStreamAllowList) {
this.proxyStreamAllowList = proxyStreamAllowList;
}
public void setProxyStreamAllowList(String... regex) {
this.proxyStreamAllowList = Arrays.asList(regex);
}
public boolean isEnableIgnoreConnectionCloseHeader() {
return enableIgnoreConnectionCloseHeader;
}
@@ -41,7 +41,8 @@ public class HystrixDashboardConfigurationTests {
MockHttpServletResponse response = new MockHttpServletResponse();
Header[] headers = new Header[1];
headers[0] = new BasicHeader("Content-Type", "text/proxy.stream");
HystrixDashboardConfiguration.ProxyStreamServlet proxyStreamServlet = new HystrixDashboardConfiguration.ProxyStreamServlet();
HystrixDashboardConfiguration.ProxyStreamServlet proxyStreamServlet = new HystrixDashboardConfiguration.ProxyStreamServlet(
new HystrixDashboardProperties());
ReflectionTestUtils.invokeMethod(proxyStreamServlet,
"copyHeadersToServletResponse", headers, response);
assertThat(response.getHeaderNames().size()).isEqualTo(1);
@@ -54,7 +55,8 @@ public class HystrixDashboardConfigurationTests {
Header[] headers = new Header[2];
headers[0] = new BasicHeader("Content-Type", "text/proxy.stream");
headers[1] = new BasicHeader("Connection", "close");
HystrixDashboardConfiguration.ProxyStreamServlet proxyStreamServlet = new HystrixDashboardConfiguration.ProxyStreamServlet();
HystrixDashboardConfiguration.ProxyStreamServlet proxyStreamServlet = new HystrixDashboardConfiguration.ProxyStreamServlet(
new HystrixDashboardProperties());
ReflectionTestUtils.invokeMethod(proxyStreamServlet,
"copyHeadersToServletResponse", headers, response);
assertThat(response.getHeaderNames().size()).isEqualTo(2);
@@ -68,7 +70,8 @@ public class HystrixDashboardConfigurationTests {
Header[] headers = new Header[2];
headers[0] = new BasicHeader("Content-Type", "text/proxy.stream");
headers[1] = new BasicHeader("Connection", "close");
HystrixDashboardConfiguration.ProxyStreamServlet proxyStreamServlet = new HystrixDashboardConfiguration.ProxyStreamServlet();
HystrixDashboardConfiguration.ProxyStreamServlet proxyStreamServlet = new HystrixDashboardConfiguration.ProxyStreamServlet(
new HystrixDashboardProperties());
proxyStreamServlet.setEnableIgnoreConnectionCloseHeader(true);
ReflectionTestUtils.invokeMethod(proxyStreamServlet,
"copyHeadersToServletResponse", headers, response);
@@ -83,7 +86,8 @@ public class HystrixDashboardConfigurationTests {
Header[] headers = new Header[2];
headers[0] = new BasicHeader("Content-Type", "text/proxy.stream");
headers[1] = new BasicHeader("Connection", "close");
HystrixDashboardConfiguration.ProxyStreamServlet proxyStreamServlet = new HystrixDashboardConfiguration.ProxyStreamServlet();
HystrixDashboardConfiguration.ProxyStreamServlet proxyStreamServlet = new HystrixDashboardConfiguration.ProxyStreamServlet(
new HystrixDashboardProperties());
proxyStreamServlet.setEnableIgnoreConnectionCloseHeader(false);
ReflectionTestUtils.invokeMethod(proxyStreamServlet,
"copyHeadersToServletResponse", headers, response);
@@ -111,4 +115,39 @@ public class HystrixDashboardConfigurationTests {
});
}
@Test
public void allowedHostsTest() {
HystrixDashboardProperties properties = new HystrixDashboardProperties();
HystrixDashboardConfiguration.ProxyStreamServlet proxyStreamServlet = new HystrixDashboardConfiguration.ProxyStreamServlet(
properties);
boolean allowed = ReflectionTestUtils.invokeMethod(proxyStreamServlet,
"isAllowedToProxy", "http://foo.com");
assertThat(allowed).isFalse();
properties.setProxyStreamAllowList("foo.com", "bar.*", "*world.com");
allowed = ReflectionTestUtils.invokeMethod(proxyStreamServlet, "isAllowedToProxy",
"http://user:password@foo.com");
assertThat(allowed).isTrue();
allowed = ReflectionTestUtils.invokeMethod(proxyStreamServlet, "isAllowedToProxy",
"http://bar.com");
assertThat(allowed).isTrue();
allowed = ReflectionTestUtils.invokeMethod(proxyStreamServlet, "isAllowedToProxy",
"http://bar.org");
assertThat(allowed).isTrue();
allowed = ReflectionTestUtils.invokeMethod(proxyStreamServlet, "isAllowedToProxy",
"http://helloworld.com");
assertThat(allowed).isTrue();
allowed = ReflectionTestUtils.invokeMethod(proxyStreamServlet, "isAllowedToProxy",
"http://world.com");
assertThat(allowed).isTrue();
allowed = ReflectionTestUtils.invokeMethod(proxyStreamServlet, "isAllowedToProxy",
"http://world.org");
assertThat(allowed).isFalse();
}
}
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<relativePath>..</relativePath> <!-- lookup parent from repository -->
</parent>
<artifactId>spring-cloud-netflix-hystrix-stream</artifactId>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<relativePath>..</relativePath> <!-- lookup parent from repository -->
</parent>
<artifactId>spring-cloud-netflix-hystrix</artifactId>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-netflix</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<relativePath>..</relativePath> <!-- lookup parent from repository -->
</parent>
<modelVersion>4.0.0</modelVersion>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<relativePath>..</relativePath> <!-- lookup parent from repository -->
</parent>
<artifactId>spring-cloud-netflix-sidecar</artifactId>
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<relativePath>..</relativePath> <!-- lookup parent from repository -->
</parent>
<artifactId>spring-cloud-netflix-turbine-stream</artifactId>
@@ -74,14 +74,16 @@ public class HystrixStreamAggregatorTests {
@Test
public void messageDecoded() throws Exception {
this.publisher.subscribe(map -> assertThat(map.get("type")).isEqualTo("HystrixCommand"));
this.publisher.subscribe(
map -> assertThat(map.get("type")).isEqualTo("HystrixCommand"));
this.aggregator.sendToSubject(PAYLOAD.getBytes());
this.output.expect(not(containsString("ERROR")));
}
@Test
public void messageWrappedInArray() throws Exception {
this.publisher.subscribe(map -> assertThat(map.get("type")).isEqualTo("HystrixCommand"));
this.publisher.subscribe(
map -> assertThat(map.get("type")).isEqualTo("HystrixCommand"));
this.aggregator.sendToSubject(new StringBuilder().append("[").append(PAYLOAD)
.append("]").toString().getBytes());
this.output.expect(not(containsString("ERROR")));
@@ -89,7 +91,8 @@ public class HystrixStreamAggregatorTests {
@Test
public void doubleEncodedMessage() throws Exception {
this.publisher.subscribe(map -> assertThat(map.get("type")).isEqualTo("HystrixCommand"));
this.publisher.subscribe(
map -> assertThat(map.get("type")).isEqualTo("HystrixCommand"));
// If The JSON is embedded in a JSON String this is what it looks like
String payload = "\"" + PAYLOAD.replace("\"", "\\\"") + "\"";
this.aggregator.sendToSubject(payload.getBytes());
@@ -59,8 +59,8 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT, properties = {
// TODO: we don't need this if we harmonize the turbine and hystrix
// destinations
// TODO: we don't need this if we harmonize the turbine and hystrix
// destinations
// https://github.com/spring-cloud/spring-cloud-netflix/issues/1948
"spring.cloud.stream.bindings.turbineStreamInput.destination=hystrixStreamOutput",
"spring.jmx.enabled=true", "stubrunner.workOffline=true",
+1 -1
View File
@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<relativePath>..</relativePath> <!-- lookup parent from repository -->
</parent>
<artifactId>spring-cloud-netflix-turbine</artifactId>
+1 -1
View File
@@ -6,7 +6,7 @@
<parent>
<artifactId>spring-cloud-netflix</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<relativePath>..</relativePath> <!-- lookup parent from repository -->
</parent>
@@ -234,8 +234,8 @@ public class RibbonRoutingFilter extends ZuulFilter {
protected void setResponse(ClientHttpResponse resp)
throws ClientException, IOException {
RequestContext.getCurrentContext().set("zuulResponse", resp);
this.helper.setResponse(resp.getRawStatusCode(),
resp.getBody(), resp.getHeaders());
this.helper.setResponse(resp.getRawStatusCode(), resp.getBody(),
resp.getHeaders());
}
}
+1 -1
View File
@@ -4,7 +4,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
<relativePath>..</relativePath>
</parent>
<artifactId>spring-cloud-starter-netflix</artifactId>
@@ -4,7 +4,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
</parent>
<artifactId>spring-cloud-starter-netflix-archaius</artifactId>
<name>Spring Cloud Starter Netflix Archaius</name>
@@ -4,7 +4,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
</parent>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<name>Spring Cloud Starter Netflix Eureka Client</name>
@@ -3,7 +3,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
</parent>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<name>Spring Cloud Starter Netflix Eureka Server</name>
@@ -4,7 +4,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
</parent>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
<name>Spring Cloud Starter Netflix Hystrix Dashboard</name>
@@ -4,7 +4,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
</parent>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<name>Spring Cloud Starter Netflix Hystrix</name>
@@ -4,7 +4,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
</parent>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<name>Spring Cloud Starter Netflix Ribbon</name>
@@ -4,7 +4,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
</parent>
<artifactId>spring-cloud-starter-netflix-turbine-stream</artifactId>
<name>Spring Cloud Starter Netflix Turbine Stream</name>
@@ -4,7 +4,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
</parent>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
<name>Spring Cloud Starter Netflix Turbine</name>
@@ -4,7 +4,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix</artifactId>
<version>2.1.5.BUILD-SNAPSHOT</version>
<version>2.1.6.RELEASE</version>
</parent>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
<name>Spring Cloud Starter Netflix Zuul</name>