diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties index 6637cedb..56bb0164 100644 --- a/.mvn/wrapper/maven-wrapper.properties +++ b/.mvn/wrapper/maven-wrapper.properties @@ -1 +1 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip \ No newline at end of file +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 84b772b1..00000000 --- a/.travis.yml +++ /dev/null @@ -1,34 +0,0 @@ -sudo: false -cache: - directories: - - $HOME/.m2 -language: java -jdk: - - oraclejdk8 -services: - - rabbitmq -before_install: - - git config user.name "$GIT_NAME" - - git config user.email "$GIT_EMAIL" - - git config credential.helper "store --file=.git/credentials" - - echo "https://$GH_TOKEN:@github.com" > .git/credentials - - gem install asciidoctor -install: -- ./mvnw install -P docs -q -U -DskipTests=true $MVN_LOCAL_OPTS -- '[ "${MVN_GOAL}" == "deploy" ] && ./docs/src/main/asciidoc/ghpages.sh || echo "Not updating docs"' -script: -- './mvnw -s .settings.xml $MVN_GOAL $MVN_PROFILE -nsu $MVN_LOCAL_OPTS' -env: - global: - - MVN_LOCAL_OPTS="-Dmaven.source.skip=true -Dmaven.javadoc.skip=true -Dmaven.test.redirectTestOutputToFile=true" - - GIT_NAME="Dave Syer" - - GIT_EMAIL=dsyer@pivotal.io - - CI_DEPLOY_USERNAME=buildmaster - - FEATURE_BRANCH=$(echo ${TRAVIS_BRANCH} | grep -q "^.*/.*$" && echo true || echo false) - - SPRING_CLOUD_BUILD=$(echo ${TRAVIS_REPO_SLUG} | grep -q "^spring-cloud/.*$" && echo true || echo false) - - MVN_GOAL=install - - VERSION=$(mvn validate | grep Building | head -1 | sed -e 's/.* //') - - MILESTONE=$(echo ${VERSION} | egrep 'M|RC' && echo true || echo false) - - MVN_PROFILE=$([ "${MILESTONE}" == "true" ] && echo -P milestone) - - JAVA_OPTS="-Xmx1024m -XX:CICompilerCount=1 -XX:TieredStopAtLevel=1 -Djava.security.egd=file:/dev/./urandom" - - secure: aeLXRC5oFSddwnZt1/7G2/OHr7jDbxz0ET7sej3I+eSbe3N5vbzQ6FC08es4l89l54ciXd90I1g2BMw7DTYKOO373FP78XPdAEbifJTU4DGd6fCELmoTtUPhjunBIk7E49hisPbv82892IYYA7qi/hzG548cPyZ1IgiJjq0NCsc= diff --git a/docs/pom.xml b/docs/pom.xml index b86c8b10..68ff2796 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT spring-cloud-netflix-docs pom @@ -14,7 +14,7 @@ spring-cloud-netflix ${basedir}/.. - 1.0.x,1.1.x,1.2.x + 1.0.x,1.1.x diff --git a/mvnw b/mvnw index 0a7dac22..a69491ac 100755 --- a/mvnw +++ b/mvnw @@ -238,8 +238,16 @@ else echo $MAVEN_ARGS | grep -q milestone && MAVEN_ARGS=$(echo $MAVEN_ARGS | sed -e 's/-Pmilestone//') fi +if echo $VERSION | egrep -q 'RELEASE'; then + echo Activating \"central\" profile for version=\"$VERSION\" + echo $MAVEN_ARGS | grep -q milestone || MAVEN_ARGS="$MAVEN_ARGS -Pcentral" +else + echo Deactivating \"central\" profile for version=\"$VERSION\" + echo $MAVEN_ARGS | grep -q central && MAVEN_ARGS=$(echo $MAVEN_ARGS | sed -e 's/-Pcentral//') +fi + exec "$JAVACMD" \ $MAVEN_OPTS \ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} ${MAVEN_ARGS} "$@" + ${WRAPPER_LAUNCHER} ${MAVEN_ARGS} "$@" \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0cf338b5..b991763d 100644 --- a/pom.xml +++ b/pom.xml @@ -3,14 +3,14 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT pom Spring Cloud Netflix Spring Cloud Netflix org.springframework.cloud spring-cloud-build - 2.0.0.BUILD-SNAPSHOT + 1.3.2.RELEASE @@ -24,8 +24,8 @@ ${basedir} 4.0.27.Final 2.7.3 - 2.0.0.BUILD-SNAPSHOT - 2.0.0.BUILD-SNAPSHOT + 1.2.1.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT Chelsea.BUILD-SNAPSHOT @@ -57,8 +57,8 @@ maven-compiler-plugin - 1.8 - 1.8 + 1.7 + 1.7 diff --git a/spring-cloud-netflix-core/pom.xml b/spring-cloud-netflix-core/pom.xml index 49cb7e0e..9942ef8c 100644 --- a/spring-cloud-netflix-core/pom.xml +++ b/spring-cloud-netflix-core/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-netflix-core diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/encoding/FeignAcceptGzipEncodingAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/encoding/FeignAcceptGzipEncodingAutoConfiguration.java index 3144343d..06eaf0be 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/encoding/FeignAcceptGzipEncodingAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/encoding/FeignAcceptGzipEncodingAutoConfiguration.java @@ -18,7 +18,8 @@ package org.springframework.cloud.netflix.feign.encoding; import feign.Feign; import feign.httpclient.ApacheHttpClient; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; + +import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -38,7 +39,7 @@ import org.springframework.context.annotation.Configuration; @ConditionalOnClass(Feign.class) @ConditionalOnBean(ApacheHttpClient.class) @ConditionalOnProperty(value = "feign.compression.response.enabled", matchIfMissing = false) -@AutoConfigureBefore(FeignAutoConfiguration.class) +@AutoConfigureAfter(FeignAutoConfiguration.class) public class FeignAcceptGzipEncodingAutoConfiguration { @Bean diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/encoding/FeignContentGzipEncodingAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/encoding/FeignContentGzipEncodingAutoConfiguration.java index a9dd22b7..e339ff11 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/encoding/FeignContentGzipEncodingAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/encoding/FeignContentGzipEncodingAutoConfiguration.java @@ -18,7 +18,8 @@ package org.springframework.cloud.netflix.feign.encoding; import feign.Feign; import feign.httpclient.ApacheHttpClient; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; + +import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -38,7 +39,7 @@ import org.springframework.context.annotation.Configuration; @ConditionalOnClass(Feign.class) @ConditionalOnBean(ApacheHttpClient.class) @ConditionalOnProperty(value = "feign.compression.request.enabled", matchIfMissing = false) -@AutoConfigureBefore(FeignAutoConfiguration.class) +@AutoConfigureAfter(FeignAutoConfiguration.class) public class FeignContentGzipEncodingAutoConfiguration { @Bean diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancer.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancer.java index 5b5ca69f..57bdc881 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancer.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignLoadBalancer.java @@ -19,7 +19,6 @@ package org.springframework.cloud.netflix.feign.ribbon; import feign.Client; import feign.Request; import feign.Response; -import feign.Util; import java.io.IOException; import java.net.URI; diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/apache/RibbonLoadBalancingHttpClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/apache/RibbonLoadBalancingHttpClient.java index 73ad0e8e..18db9b68 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/apache/RibbonLoadBalancingHttpClient.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/apache/RibbonLoadBalancingHttpClient.java @@ -103,6 +103,7 @@ public class RibbonLoadBalancingHttpClient extends @Override public RequestSpecificRetryHandler getRequestSpecificRetryHandler(RibbonApacheHttpRequest request, IClientConfig requestConfig) { - return new RequestSpecificRetryHandler(false, false, RetryHandler.DEFAULT, null); + return new RequestSpecificRetryHandler(false, false, + RetryHandler.DEFAULT, requestConfig); } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulFilterInitializer.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulFilterInitializer.java index a15f0d1f..19ae0de0 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulFilterInitializer.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/ZuulFilterInitializer.java @@ -33,9 +33,10 @@ import com.netflix.zuul.monitoring.TracerFactory; import lombok.extern.apachecommons.CommonsLog; /** + * Initializes various Zuul components including {@link ZuulFilter}. + * * @author Spencer Gibb * - * TODO: .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) */ @CommonsLog public class ZuulFilterInitializer implements ServletContextListener { @@ -91,17 +92,4 @@ public class ZuulFilterInitializer implements ServletContextListener { cache.clear(); } - /* - * private void initGroovyFilterManager() { - * - * //TODO: support groovy filters loaded from filesystem in proxy - * FilterLoader.getInstance().setCompiler(new GroovyCompiler()); - * - * final String scriptRoot = props.getFilterRoot(); - * log.info("Using file system script: " + scriptRoot); - * - * try { FilterFileManager.setFilenameFilter(new GroovyFileFilter()); - * FilterFileManager.init(5, scriptRoot + "/pre", scriptRoot + "/route", scriptRoot + - * "/post" ); } catch (Exception e) { throw new RuntimeException(e); } } - */ } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java index ca7cc260..84653571 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java @@ -198,21 +198,21 @@ public class PreDecorationFilter extends ZuulFilter { String proto = request.getScheme(); if (hasHeader(request, X_FORWARDED_HOST_HEADER)) { host = request.getHeader(X_FORWARDED_HOST_HEADER) + "," + host; - if (!hasHeader(request, X_FORWARDED_PORT_HEADER)) { - if (hasHeader(request, X_FORWARDED_PROTO_HEADER)) { - StringBuilder builder = new StringBuilder(); - for (String previous : StringUtils.commaDelimitedListToStringArray(request.getHeader(X_FORWARDED_PROTO_HEADER))) { - if (builder.length()>0) { - builder.append(","); - } - builder.append(HTTPS_SCHEME.equals(previous) ? HTTPS_PORT : HTTP_PORT); + } + if (!hasHeader(request, X_FORWARDED_PORT_HEADER)) { + if (hasHeader(request, X_FORWARDED_PROTO_HEADER)) { + StringBuilder builder = new StringBuilder(); + for (String previous : StringUtils.commaDelimitedListToStringArray(request.getHeader(X_FORWARDED_PROTO_HEADER))) { + if (builder.length()>0) { + builder.append(","); } - builder.append(",").append(port); - port = builder.toString(); + builder.append(HTTPS_SCHEME.equals(previous) ? HTTPS_PORT : HTTP_PORT); } - } else { - port = request.getHeader(X_FORWARDED_PORT_HEADER) + "," + port; + builder.append(",").append(port); + port = builder.toString(); } + } else { + port = request.getHeader(X_FORWARDED_PORT_HEADER) + "," + port; } if (hasHeader(request, X_FORWARDED_PROTO_HEADER)) { proto = request.getHeader(X_FORWARDED_PROTO_HEADER) + "," + proto; diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java index 66d17dcc..f28d82c5 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java @@ -70,7 +70,7 @@ public class RibbonRoutingFilter extends ZuulFilter { this.requestCustomizers = requestCustomizers; // To support Servlet API 3.0.1 we need to check if getcontentLengthLong exists try { - HttpServletResponse.class.getMethod("getContentLengthLong"); + HttpServletRequest.class.getMethod("getContentLengthLong"); } catch(NoSuchMethodException e) { useServlet31 = false; } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/FeignCompressionTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/FeignCompressionTests.java new file mode 100644 index 00000000..17ba30d1 --- /dev/null +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/FeignCompressionTests.java @@ -0,0 +1,97 @@ +/* + * + * * Copyright 2013-2017 the original author or authors. + * * + * * Licensed under the Apache License, Version 2.0 (the "License"); + * * you may not use this file except in compliance with the License. + * * You may obtain a copy of the License at + * * + * * http://www.apache.org/licenses/LICENSE-2.0 + * * + * * Unless required by applicable law or agreed to in writing, software + * * distributed under the License is distributed on an "AS IS" BASIS, + * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * * See the License for the specific language governing permissions and + * * limitations under the License. + * + */ + +package org.springframework.cloud.netflix.feign; + +import feign.Client; +import feign.RequestInterceptor; +import feign.httpclient.ApacheHttpClient; + +import java.util.Map; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.cloud.ClassPathExclusions; +import org.springframework.cloud.FilteredClassPathRunner; +import org.springframework.cloud.netflix.archaius.ArchaiusAutoConfiguration; +import org.springframework.cloud.netflix.feign.encoding.FeignAcceptGzipEncodingAutoConfiguration; +import org.springframework.cloud.netflix.feign.encoding.FeignAcceptGzipEncodingInterceptor; +import org.springframework.cloud.netflix.feign.encoding.FeignContentGzipEncodingAutoConfiguration; +import org.springframework.cloud.netflix.feign.encoding.FeignContentGzipEncodingInterceptor; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * @author Ryan Baxter + */ +@RunWith(FilteredClassPathRunner.class) +@ClassPathExclusions({"ribbon-loadbalancer-{version:\\d.*}.jar"}) +public class FeignCompressionTests { + + private ConfigurableApplicationContext context; + + @Before + public void setUp() { + context = new SpringApplicationBuilder().properties("feign.compression.response.enabled=true", + "feign.compression.request.enabled=true", "feign.okhttp.enabled=false").sources(PropertyPlaceholderAutoConfiguration.class, + ArchaiusAutoConfiguration.class, FeignAutoConfiguration.class, PlainConfig.class, FeignContentGzipEncodingAutoConfiguration.class, + FeignAcceptGzipEncodingAutoConfiguration.class).web(false).run(); + } + + @After + public void tearDown() { + if(context != null) { + context.close(); + } + } + + @Test + public void testInterceptors() { + FeignContext feignContext = context.getBean(FeignContext.class); + Map interceptors = feignContext.getInstances("foo", RequestInterceptor.class); + assertEquals(2, interceptors.size()); + assertTrue(FeignAcceptGzipEncodingInterceptor.class.isInstance(interceptors.get("feignAcceptGzipEncodingInterceptor"))); + assertTrue(FeignContentGzipEncodingInterceptor.class.isInstance(interceptors.get("feignContentGzipEncodingInterceptor"))); + } + + @Configuration + protected static class PlainConfig { + + @Autowired + private Client client; + + @Bean + public ApacheHttpClient client() { + /* We know our client is an AppacheHttpClient because we disabled the OK HTTP client. FeignAcceptGzipEncodingAutoConfiguration + * won't load unless there is a bean of type ApacheHttpClient (not Client) in this test because the bean is not + * yet created and so the application context doesnt know that the Client bean is actually an instance of ApacheHttpClient, + * therefore FeignAcceptGzipEncodingAutoConfiguration will not be loaded. We just create a bean here of type + * ApacheHttpClient so that the configuration will be loaded correctly. + */ + return (ApacheHttpClient)client; + } + } +} diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java index 5b7f25af..9fe24f71 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java @@ -152,7 +152,56 @@ public class PreDecorationFilterTests { this.filter.run(); RequestContext ctx = RequestContext.getCurrentContext(); assertEquals("localhost:8080", ctx.getZuulRequestHeaders().get("x-forwarded-host")); - assertEquals("8080", ctx.getZuulRequestHeaders().get("x-forwarded-port")); + assertEquals("443,8080", ctx.getZuulRequestHeaders().get("x-forwarded-port")); + assertEquals("https,http", ctx.getZuulRequestHeaders().get("x-forwarded-proto")); + } + + @Test + public void xForwardedProtoHttpOnlyAppends() throws Exception { + this.properties.setPrefix("/api"); + this.request.setRequestURI("/api/foo/1"); + this.request.setRemoteAddr("5.6.7.8"); + this.request.setServerPort(8080); + this.request.addHeader("X-Forwarded-Proto", "http"); + this.routeLocator.addRoute( + new ZuulRoute("foo", "/foo/**", "foo", null, false, null, null)); + this.filter.run(); + RequestContext ctx = RequestContext.getCurrentContext(); + assertEquals("localhost:8080", ctx.getZuulRequestHeaders().get("x-forwarded-host")); + assertEquals("80,8080", ctx.getZuulRequestHeaders().get("x-forwarded-port")); + assertEquals("http,http", ctx.getZuulRequestHeaders().get("x-forwarded-proto")); + } + + @Test + public void xForwardedPortOnlyAppends() throws Exception { + this.properties.setPrefix("/api"); + this.request.setRequestURI("/api/foo/1"); + this.request.setRemoteAddr("5.6.7.8"); + this.request.setServerPort(8080); + this.request.addHeader("X-Forwarded-Port", "456"); + this.routeLocator.addRoute( + new ZuulRoute("foo", "/foo/**", "foo", null, false, null, null)); + this.filter.run(); + RequestContext ctx = RequestContext.getCurrentContext(); + assertEquals("localhost:8080", ctx.getZuulRequestHeaders().get("x-forwarded-host")); + assertEquals("456,8080", ctx.getZuulRequestHeaders().get("x-forwarded-port")); + assertEquals("http", ctx.getZuulRequestHeaders().get("x-forwarded-proto")); + } + + @Test + public void xForwardedPortAndProtoAppends() throws Exception { + this.properties.setPrefix("/api"); + this.request.setRequestURI("/api/foo/1"); + this.request.setRemoteAddr("5.6.7.8"); + this.request.setServerPort(8080); + this.request.addHeader("X-Forwarded-Proto", "https"); + this.request.addHeader("X-Forwarded-Port", "456"); + this.routeLocator.addRoute( + new ZuulRoute("foo", "/foo/**", "foo", null, false, null, null)); + this.filter.run(); + RequestContext ctx = RequestContext.getCurrentContext(); + assertEquals("localhost:8080", ctx.getZuulRequestHeaders().get("x-forwarded-host")); + assertEquals("456,8080", ctx.getZuulRequestHeaders().get("x-forwarded-port")); assertEquals("https,http", ctx.getZuulRequestHeaders().get("x-forwarded-proto")); } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/support/RibbonRetryIntegrationTestBase.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/support/RibbonRetryIntegrationTestBase.java index fb569716..c43b6307 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/support/RibbonRetryIntegrationTestBase.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/route/support/RibbonRetryIntegrationTestBase.java @@ -119,7 +119,7 @@ public abstract class RibbonRetryIntegrationTestBase { } @Test - public void disbaleRetry() { + public void disableRetry() { String uri = "/disableretry/everyothererror"; ResponseEntity result = new TestRestTemplate().exchange( "http://localhost:" + this.port + uri, HttpMethod.GET, diff --git a/spring-cloud-netflix-dependencies/pom.xml b/spring-cloud-netflix-dependencies/pom.xml index 09c6d3b9..a995dae1 100644 --- a/spring-cloud-netflix-dependencies/pom.xml +++ b/spring-cloud-netflix-dependencies/pom.xml @@ -5,11 +5,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT spring-cloud-netflix-dependencies - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT pom spring-cloud-netflix-dependencies Spring Cloud Netflix Dependencies @@ -17,7 +17,7 @@ 0.7.4 1.6.2 9.4.0 - 1.5.10 + 1.5.11 2.2.2 0.10.1 1.3.0 diff --git a/spring-cloud-netflix-eureka-client/pom.xml b/spring-cloud-netflix-eureka-client/pom.xml index 0d1c982e..64b5040a 100644 --- a/spring-cloud-netflix-eureka-client/pom.xml +++ b/spring-cloud-netflix-eureka-client/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-netflix-eureka-client diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java index 37c938ab..8f068518 100644 --- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClientConfiguration.java @@ -61,11 +61,19 @@ public class EurekaDiscoveryClientConfiguration { @ConditionalOnClass(RefreshScopeRefreshedEvent.class) protected static class EurekaClientConfigurationRefresher { + @Autowired(required = false) + private EurekaClient eurekaClient; + @Autowired(required = false) private EurekaAutoServiceRegistration autoRegistration; @EventListener(RefreshScopeRefreshedEvent.class) public void onApplicationEvent(RefreshScopeRefreshedEvent event) { + //This will force the creation of the EurkaClient bean if not already created + //to make sure the client will be reregistered after a refresh event + if(eurekaClient != null) { + eurekaClient.getApplications(); + } if (autoRegistration != null) { // register in case meta data changed this.autoRegistration.stop(); diff --git a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfiguration.java b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfiguration.java index 7ba3e0be..e29a452c 100644 --- a/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfiguration.java +++ b/spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2014 the original author or authors. + * Copyright 2013-2017 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. @@ -38,7 +38,11 @@ import com.netflix.discovery.EurekaClient; import com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList; /** + * Spring configuration for configuring Ribbon defaults to be Eureka based + * if Eureka client is enabled + * * @author Dave Syer + * @author Biju Kunjummen */ @Configuration @EnableConfigurationProperties @@ -65,8 +69,11 @@ public class RibbonEurekaAutoConfiguration { @ConditionalOnBean(SpringClientFactory.class) @ConditionalOnProperty(value = "ribbon.eureka.enabled", matchIfMissing = true) static class Defaults {} - + @ConditionalOnBean(EurekaClient.class) static class EurekaBeans {} + + @ConditionalOnProperty(value = "eureka.client.enabled", matchIfMissing = true) + static class OnEurekaClientEnabled {} } } diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/config/ConfigRefreshTests.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/config/ConfigRefreshTests.java new file mode 100644 index 00000000..bc1a3852 --- /dev/null +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/config/ConfigRefreshTests.java @@ -0,0 +1,60 @@ +/* + * + * * Copyright 2013-2016 the original author or authors. + * * + * * Licensed under the Apache License, Version 2.0 (the "License"); + * * you may not use this file except in compliance with the License. + * * You may obtain a copy of the License at + * * + * * http://www.apache.org/licenses/LICENSE-2.0 + * * + * * Unless required by applicable law or agreed to in writing, software + * * distributed under the License is distributed on an "AS IS" BASIS, + * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * * See the License for the specific language governing permissions and + * * limitations under the License. + * + */ + +package org.springframework.cloud.netflix.eureka.config; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.context.scope.refresh.RefreshScopeRefreshedEvent; +import org.springframework.cloud.netflix.eureka.sample.RefreshEurekaSampleApplication; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.test.context.junit4.SpringRunner; + +import com.netflix.discovery.EurekaClient; + +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +/** + * @author Ryan Baxter + */ +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = RefreshEurekaSampleApplication.class) +public class ConfigRefreshTests { + + @Autowired + private ApplicationEventPublisher publisher; + + @Autowired + //Mocked in RefreshEurekaSampleApplication + private EurekaClient client; + + @Test + // This test is used to verify that getApplications is called the correct number of times + // when a refresh event is fired. The getApplications call in EurekaClientConfigurationRefresher.onApplicationEvent + // ensures that the EurekaClient bean is recreated after a refresh event and that we reregister the client with + //the server + public void verifyGetApplications() { + if(publisher != null) { + publisher.publishEvent(new RefreshScopeRefreshedEvent()); + } + verify(client, times(3)).getApplications(); + } +} diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/sample/RefreshEurekaSampleApplication.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/sample/RefreshEurekaSampleApplication.java new file mode 100644 index 00000000..6d1e3cd8 --- /dev/null +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/eureka/sample/RefreshEurekaSampleApplication.java @@ -0,0 +1,47 @@ +/* + * + * * Copyright 2013-2016 the original author or authors. + * * + * * Licensed under the Apache License, Version 2.0 (the "License"); + * * you may not use this file except in compliance with the License. + * * You may obtain a copy of the License at + * * + * * http://www.apache.org/licenses/LICENSE-2.0 + * * + * * Unless required by applicable law or agreed to in writing, software + * * distributed under the License is distributed on an "AS IS" BASIS, + * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * * See the License for the specific language governing permissions and + * * limitations under the License. + * + */ + +package org.springframework.cloud.netflix.eureka.sample; + +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.netflix.eureka.CloudEurekaClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.bind.annotation.RestController; + +import com.netflix.discovery.EurekaClient; + +import static org.mockito.Mockito.mock; + +/** + * @author Ryan Baxter + */ +@Configuration +@ComponentScan +@EnableAutoConfiguration +@RestController +@EnableDiscoveryClient +public class RefreshEurekaSampleApplication { + + @Bean + public EurekaClient getClient() { + return mock(CloudEurekaClient.class); + } +} diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaDisabledRibbonClientIntegrationTests.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaDisabledRibbonClientIntegrationTests.java new file mode 100644 index 00000000..22cd1377 --- /dev/null +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/EurekaDisabledRibbonClientIntegrationTests.java @@ -0,0 +1,94 @@ +/* + * Copyright 2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.netflix.ribbon.eureka; + +import com.netflix.loadbalancer.Server; +import com.netflix.loadbalancer.ZoneAvoidanceRule; +import com.netflix.loadbalancer.ZoneAwareLoadBalancer; +import com.netflix.niws.loadbalancer.NIWSDiscoveryPing; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.commons.util.UtilAutoConfiguration; +import org.springframework.cloud.netflix.archaius.ArchaiusAutoConfiguration; +import org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration; +import org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration; +import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration; +import org.springframework.cloud.netflix.ribbon.RibbonClient; +import org.springframework.cloud.netflix.ribbon.ServerIntrospector; +import org.springframework.cloud.netflix.ribbon.SpringClientFactory; +import org.springframework.cloud.netflix.ribbon.eureka.EurekaRibbonClientPreprocessorIntegrationTests.TestConfiguration; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Ribbon Eureka client should be disabled if Eureka client is not enabled + * + * @author Biju Kunjummen + */ +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = TestConfiguration.class, properties = "eureka.client.enabled=false") +@DirtiesContext +public class EurekaDisabledRibbonClientIntegrationTests { + + @Autowired + private SpringClientFactory factory; + + @Test + public void serverListShouldNotBeEurekaBased() throws Exception { + assertThat(getLoadBalancer().getServerListImpl()) + .isNotInstanceOf(DomainExtractingServerList.class); + } + + @Test + public void ruleDefaultsToZoneAvoidance() throws Exception { + ZoneAvoidanceRule.class.cast(getLoadBalancer().getRule()); + } + + @Test + public void pingShouldNotBeEurekaBased() throws Exception { + assertThat(getLoadBalancer().getPing()).isNotInstanceOf(NIWSDiscoveryPing.class); + } + + @Test + public void serverIntrospectorShouldNotBeEurekaBased() throws Exception { + assertThat(this.factory.getInstance("foo", ServerIntrospector.class)) + .isNotInstanceOf(EurekaServerIntrospector.class); + } + + @SuppressWarnings("unchecked") + private ZoneAwareLoadBalancer getLoadBalancer() { + return (ZoneAwareLoadBalancer) this.factory.getLoadBalancer("foo"); + } + + @Configuration + @RibbonClient("foo") + @Import({ UtilAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class, + ArchaiusAutoConfiguration.class, RibbonAutoConfiguration.class, + EurekaDiscoveryClientConfiguration.class, EurekaClientAutoConfiguration.class, + RibbonEurekaAutoConfiguration.class }) + protected static class TestConfiguration { + + } + +} diff --git a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfigurationTests.java b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfigurationTests.java index 32929d00..b81c2bc9 100644 --- a/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfigurationTests.java +++ b/spring-cloud-netflix-eureka-client/src/test/java/org/springframework/cloud/netflix/ribbon/eureka/RibbonEurekaAutoConfigurationTests.java @@ -30,6 +30,7 @@ import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.context.annotation.Bean; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringRunner; import static org.assertj.core.api.Assertions.assertThat; @@ -42,6 +43,7 @@ import static org.springframework.boot.test.context.SpringBootTest.WebEnvironmen @SpringBootTest(classes = RibbonEurekaAutoConfigurationTests.EurekaClientDisabledApp.class, properties = { "eureka.client.enabled=false", "spring.application.name=eurekadisabledtest" }, webEnvironment = RANDOM_PORT) +@DirtiesContext public class RibbonEurekaAutoConfigurationTests { @Autowired diff --git a/spring-cloud-netflix-eureka-server/pom.xml b/spring-cloud-netflix-eureka-server/pom.xml index b0c011a3..dc952333 100644 --- a/spring-cloud-netflix-eureka-server/pom.xml +++ b/spring-cloud-netflix-eureka-server/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-netflix-eureka-server diff --git a/spring-cloud-netflix-hystrix-amqp/pom.xml b/spring-cloud-netflix-hystrix-amqp/pom.xml index 7241938e..08107e4f 100644 --- a/spring-cloud-netflix-hystrix-amqp/pom.xml +++ b/spring-cloud-netflix-hystrix-amqp/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-netflix-hystrix-amqp diff --git a/spring-cloud-netflix-hystrix-dashboard/pom.xml b/spring-cloud-netflix-hystrix-dashboard/pom.xml index d99a9591..cfbc2c93 100644 --- a/spring-cloud-netflix-hystrix-dashboard/pom.xml +++ b/spring-cloud-netflix-hystrix-dashboard/pom.xml @@ -8,7 +8,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. diff --git a/spring-cloud-netflix-hystrix-dashboard/src/main/resources/static/hystrix/components/hystrixCommand/hystrixCommand.js b/spring-cloud-netflix-hystrix-dashboard/src/main/resources/static/hystrix/components/hystrixCommand/hystrixCommand.js index 9e505e93..9d5724d2 100644 --- a/spring-cloud-netflix-hystrix-dashboard/src/main/resources/static/hystrix/components/hystrixCommand/hystrixCommand.js +++ b/spring-cloud-netflix-hystrix-dashboard/src/main/resources/static/hystrix/components/hystrixCommand/hystrixCommand.js @@ -175,6 +175,7 @@ assertNotNull(data,"propertyValue_circuitBreakerSleepWindowInMilliseconds"); assertNotNull(data,"propertyValue_circuitBreakerErrorThresholdPercentage"); assertNotNull(data,"propertyValue_circuitBreakerForceOpen"); + assertNotNull(data,"propertyValue_circuitBreakerForceClosed"); assertNotNull(data,"propertyValue_executionIsolationStrategy"); assertNotNull(data,"propertyValue_executionIsolationThreadTimeoutInMilliseconds"); assertNotNull(data,"propertyValue_executionIsolationThreadInterruptOnTimeout"); @@ -539,5 +540,3 @@ return x1 + x2; } })(window); - - diff --git a/spring-cloud-netflix-hystrix-stream/pom.xml b/spring-cloud-netflix-hystrix-stream/pom.xml index f63eec0e..9c05c847 100644 --- a/spring-cloud-netflix-hystrix-stream/pom.xml +++ b/spring-cloud-netflix-hystrix-stream/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-netflix-hystrix-stream @@ -60,12 +60,6 @@ eureka-client test - - org.projectlombok - lombok - compile - true - org.springframework.boot spring-boot-starter-test @@ -83,7 +77,7 @@ org.springframework.cloud - spring-cloud-stream-binder-rabbit + spring-cloud-stream-test-support test diff --git a/spring-cloud-netflix-hystrix-stream/src/main/java/org/springframework/cloud/netflix/hystrix/stream/HystrixStreamProperties.java b/spring-cloud-netflix-hystrix-stream/src/main/java/org/springframework/cloud/netflix/hystrix/stream/HystrixStreamProperties.java index 50fe3048..86db29d8 100644 --- a/spring-cloud-netflix-hystrix-stream/src/main/java/org/springframework/cloud/netflix/hystrix/stream/HystrixStreamProperties.java +++ b/spring-cloud-netflix-hystrix-stream/src/main/java/org/springframework/cloud/netflix/hystrix/stream/HystrixStreamProperties.java @@ -19,13 +19,10 @@ package org.springframework.cloud.netflix.hystrix.stream; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.netflix.hystrix.HystrixConstants; -import lombok.Data; - /** * @author Spencer Gibb */ @ConfigurationProperties("hystrix.stream.queue") -@Data public class HystrixStreamProperties { /** Flag to indicate that Hystrix Stream is enabled. Default is true. */ @@ -52,4 +49,68 @@ public class HystrixStreamProperties { /** The size of the metrics queue. This queue drains to the stream. Defaults to 1000. */ private int size = 1000; + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public boolean isPrefixMetricName() { + return prefixMetricName; + } + + public void setPrefixMetricName(boolean prefixMetricName) { + this.prefixMetricName = prefixMetricName; + } + + public boolean isSendId() { + return sendId; + } + + public void setSendId(boolean sendId) { + this.sendId = sendId; + } + + public String getDestination() { + return destination; + } + + public void setDestination(String destination) { + this.destination = destination; + } + + public String getContentType() { + return contentType; + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } + + public long getSendRate() { + return sendRate; + } + + public void setSendRate(long sendRate) { + this.sendRate = sendRate; + } + + public long getGatherRate() { + return gatherRate; + } + + public void setGatherRate(long gatherRate) { + this.gatherRate = gatherRate; + } + + public int getSize() { + return size; + } + + public void setSize(int size) { + this.size = size; + } + } diff --git a/spring-cloud-netflix-hystrix-stream/src/main/java/org/springframework/cloud/netflix/hystrix/stream/HystrixStreamTask.java b/spring-cloud-netflix-hystrix-stream/src/main/java/org/springframework/cloud/netflix/hystrix/stream/HystrixStreamTask.java index 2af36637..2f6b4ee8 100644 --- a/spring-cloud-netflix-hystrix-stream/src/main/java/org/springframework/cloud/netflix/hystrix/stream/HystrixStreamTask.java +++ b/spring-cloud-netflix-hystrix-stream/src/main/java/org/springframework/cloud/netflix/hystrix/stream/HystrixStreamTask.java @@ -22,16 +22,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.concurrent.LinkedBlockingQueue; -import org.springframework.beans.BeansException; -import org.springframework.cloud.client.ServiceInstance; -import org.springframework.cloud.client.discovery.DiscoveryClient; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; -import org.springframework.messaging.MessageChannel; -import org.springframework.messaging.MessageHeaders; -import org.springframework.messaging.support.MessageBuilder; -import org.springframework.scheduling.annotation.Scheduled; - import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; import com.netflix.hystrix.HystrixCircuitBreaker; @@ -42,7 +32,18 @@ import com.netflix.hystrix.HystrixThreadPoolKey; import com.netflix.hystrix.HystrixThreadPoolMetrics; import com.netflix.hystrix.util.HystrixRollingNumberEvent; -import lombok.extern.apachecommons.CommonsLog; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.springframework.beans.BeansException; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.discovery.DiscoveryClient; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.MessageHeaders; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.scheduling.annotation.Scheduled; /** * @author Spencer Gibb @@ -50,8 +51,9 @@ import lombok.extern.apachecommons.CommonsLog; * @see com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsPoller (nested * private class MetricsPoller) */ -@CommonsLog public class HystrixStreamTask implements ApplicationContextAware { + + private static Log log = LogFactory.getLog(HystrixStreamTask.class); private MessageChannel outboundChannel; diff --git a/spring-cloud-netflix-hystrix-stream/src/test/java/org/springframework/cloud/netflix/hystrix/stream/HystrixStreamTests.java b/spring-cloud-netflix-hystrix-stream/src/test/java/org/springframework/cloud/netflix/hystrix/stream/HystrixStreamTests.java index d8bae20e..f6a278f7 100644 --- a/spring-cloud-netflix-hystrix-stream/src/test/java/org/springframework/cloud/netflix/hystrix/stream/HystrixStreamTests.java +++ b/spring-cloud-netflix-hystrix-stream/src/test/java/org/springframework/cloud/netflix/hystrix/stream/HystrixStreamTests.java @@ -18,6 +18,7 @@ package org.springframework.cloud.netflix.hystrix.stream; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.SpringBootTest; @@ -39,6 +40,12 @@ import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; @DirtiesContext public class HystrixStreamTests { + @Autowired + private HystrixStreamTask task; + + @Autowired + private Application application; + @EnableAutoConfiguration @EnableCircuitBreaker @RestController @@ -58,7 +65,8 @@ public class HystrixStreamTests { @Test public void contextLoads() { - + this.application.hello(); + this.task.gatherMetrics(); } } diff --git a/spring-cloud-netflix-sidecar/pom.xml b/spring-cloud-netflix-sidecar/pom.xml index 449160fb..a320cb22 100644 --- a/spring-cloud-netflix-sidecar/pom.xml +++ b/spring-cloud-netflix-sidecar/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-netflix-sidecar diff --git a/spring-cloud-netflix-spectator/pom.xml b/spring-cloud-netflix-spectator/pom.xml index f3346e75..f717bf3d 100644 --- a/spring-cloud-netflix-spectator/pom.xml +++ b/spring-cloud-netflix-spectator/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-netflix-spectator diff --git a/spring-cloud-netflix-turbine-stream/pom.xml b/spring-cloud-netflix-turbine-stream/pom.xml index cc70a66c..58475fe2 100644 --- a/spring-cloud-netflix-turbine-stream/pom.xml +++ b/spring-cloud-netflix-turbine-stream/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-netflix-turbine-stream @@ -58,11 +58,6 @@ spring-cloud-commons true - - commons-logging - commons-logging - 1.2 - org.springframework.integration spring-integration-core diff --git a/spring-cloud-netflix-turbine/pom.xml b/spring-cloud-netflix-turbine/pom.xml index 0ba00f39..410c9b4f 100644 --- a/spring-cloud-netflix-turbine/pom.xml +++ b/spring-cloud-netflix-turbine/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-netflix-turbine diff --git a/spring-cloud-starter-archaius/pom.xml b/spring-cloud-starter-archaius/pom.xml index 48b6445d..60377136 100644 --- a/spring-cloud-starter-archaius/pom.xml +++ b/spring-cloud-starter-archaius/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-starter-archaius @@ -36,12 +36,12 @@ commons-configuration commons-configuration - + com.fasterxml.jackson.core diff --git a/spring-cloud-starter-atlas/pom.xml b/spring-cloud-starter-atlas/pom.xml index 9a51e304..a9156eaa 100644 --- a/spring-cloud-starter-atlas/pom.xml +++ b/spring-cloud-starter-atlas/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-starter-atlas diff --git a/spring-cloud-starter-eureka-server/pom.xml b/spring-cloud-starter-eureka-server/pom.xml index 2e6c5186..1f79cdc8 100644 --- a/spring-cloud-starter-eureka-server/pom.xml +++ b/spring-cloud-starter-eureka-server/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-starter-eureka-server diff --git a/spring-cloud-starter-eureka/pom.xml b/spring-cloud-starter-eureka/pom.xml index 6b3e458b..9b1923f7 100644 --- a/spring-cloud-starter-eureka/pom.xml +++ b/spring-cloud-starter-eureka/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-starter-eureka diff --git a/spring-cloud-starter-feign/pom.xml b/spring-cloud-starter-feign/pom.xml index 03b04a16..dfd2bcd7 100644 --- a/spring-cloud-starter-feign/pom.xml +++ b/spring-cloud-starter-feign/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-starter-feign diff --git a/spring-cloud-starter-hystrix-dashboard/pom.xml b/spring-cloud-starter-hystrix-dashboard/pom.xml index 4bf7c3a6..3a43c78c 100644 --- a/spring-cloud-starter-hystrix-dashboard/pom.xml +++ b/spring-cloud-starter-hystrix-dashboard/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-starter-hystrix-dashboard diff --git a/spring-cloud-starter-hystrix/pom.xml b/spring-cloud-starter-hystrix/pom.xml index 6af32fd3..dedf5ab2 100644 --- a/spring-cloud-starter-hystrix/pom.xml +++ b/spring-cloud-starter-hystrix/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-starter-hystrix diff --git a/spring-cloud-starter-ribbon/pom.xml b/spring-cloud-starter-ribbon/pom.xml index bd4c1776..93bce8a0 100644 --- a/spring-cloud-starter-ribbon/pom.xml +++ b/spring-cloud-starter-ribbon/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-starter-ribbon diff --git a/spring-cloud-starter-spectator/pom.xml b/spring-cloud-starter-spectator/pom.xml index 14895a91..77d5755d 100644 --- a/spring-cloud-starter-spectator/pom.xml +++ b/spring-cloud-starter-spectator/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-starter-spectator diff --git a/spring-cloud-starter-turbine-amqp/pom.xml b/spring-cloud-starter-turbine-amqp/pom.xml index f5297611..c62e578d 100644 --- a/spring-cloud-starter-turbine-amqp/pom.xml +++ b/spring-cloud-starter-turbine-amqp/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-starter-turbine-amqp diff --git a/spring-cloud-starter-turbine-stream/pom.xml b/spring-cloud-starter-turbine-stream/pom.xml index 5025399f..8202e97d 100644 --- a/spring-cloud-starter-turbine-stream/pom.xml +++ b/spring-cloud-starter-turbine-stream/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-starter-turbine-stream diff --git a/spring-cloud-starter-turbine/pom.xml b/spring-cloud-starter-turbine/pom.xml index 001d026c..64dd0a76 100644 --- a/spring-cloud-starter-turbine/pom.xml +++ b/spring-cloud-starter-turbine/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-starter-turbine diff --git a/spring-cloud-starter-zuul/pom.xml b/spring-cloud-starter-zuul/pom.xml index 24ed16a8..a5ff32ab 100644 --- a/spring-cloud-starter-zuul/pom.xml +++ b/spring-cloud-starter-zuul/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-netflix - 2.0.0.BUILD-SNAPSHOT + 1.3.1.BUILD-SNAPSHOT .. spring-cloud-starter-zuul