From bbba01a80d8097d50ee869f1675cc943750c9b85 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Tue, 1 Nov 2016 12:42:26 -0600 Subject: [PATCH 01/16] Update SNAPSHOT to 1.1.5.RELEASE --- docs/pom.xml | 2 +- pom.xml | 4 ++-- spring-cloud-commons-dependencies/pom.xml | 4 ++-- spring-cloud-commons/pom.xml | 2 +- spring-cloud-context/pom.xml | 2 +- spring-cloud-starter/pom.xml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 1c4173d2..665cb5ca 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.5.BUILD-SNAPSHOT + 1.1.5.RELEASE pom Spring Cloud Commons Docs diff --git a/pom.xml b/pom.xml index cbaaa00a..9028f85e 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.springframework.cloud spring-cloud-commons-parent - 1.1.5.BUILD-SNAPSHOT + 1.1.5.RELEASE pom Spring Cloud Commons Parent Spring Cloud Commons Parent @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 1.2.2.BUILD-SNAPSHOT + 1.2.1.RELEASE diff --git a/spring-cloud-commons-dependencies/pom.xml b/spring-cloud-commons-dependencies/pom.xml index 1daf3c56..ad4ed8cd 100644 --- a/spring-cloud-commons-dependencies/pom.xml +++ b/spring-cloud-commons-dependencies/pom.xml @@ -5,11 +5,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 1.1.2.RELEASE + 1.2.1.RELEASE spring-cloud-commons-dependencies - 1.1.5.BUILD-SNAPSHOT + 1.1.5.RELEASE pom spring-cloud-commons-dependencies Spring Cloud Commons Dependencies diff --git a/spring-cloud-commons/pom.xml b/spring-cloud-commons/pom.xml index 764975ed..f06fce16 100644 --- a/spring-cloud-commons/pom.xml +++ b/spring-cloud-commons/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.5.BUILD-SNAPSHOT + 1.1.5.RELEASE .. spring-cloud-commons diff --git a/spring-cloud-context/pom.xml b/spring-cloud-context/pom.xml index 82e4e50a..497778fd 100644 --- a/spring-cloud-context/pom.xml +++ b/spring-cloud-context/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.5.BUILD-SNAPSHOT + 1.1.5.RELEASE .. spring-cloud-context diff --git a/spring-cloud-starter/pom.xml b/spring-cloud-starter/pom.xml index 7aa7b7c7..2d372421 100644 --- a/spring-cloud-starter/pom.xml +++ b/spring-cloud-starter/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.5.BUILD-SNAPSHOT + 1.1.5.RELEASE spring-cloud-starter spring-cloud-starter From 216f7446366d3faab150e53ac3af92f8250e49dd Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Tue, 1 Nov 2016 12:57:06 -0600 Subject: [PATCH 02/16] Update to SNAPSHOT --- docs/pom.xml | 2 +- pom.xml | 4 ++-- spring-cloud-commons-dependencies/pom.xml | 4 ++-- spring-cloud-commons/pom.xml | 2 +- spring-cloud-context/pom.xml | 2 +- spring-cloud-starter/pom.xml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 665cb5ca..76db0f8c 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.5.RELEASE + 1.1.6.BUILD-SNAPSHOT pom Spring Cloud Commons Docs diff --git a/pom.xml b/pom.xml index 9028f85e..330593a0 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.springframework.cloud spring-cloud-commons-parent - 1.1.5.RELEASE + 1.1.6.BUILD-SNAPSHOT pom Spring Cloud Commons Parent Spring Cloud Commons Parent @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 1.2.1.RELEASE + 1.2.2.BUILD-SNAPSHOT diff --git a/spring-cloud-commons-dependencies/pom.xml b/spring-cloud-commons-dependencies/pom.xml index ad4ed8cd..ccbb669e 100644 --- a/spring-cloud-commons-dependencies/pom.xml +++ b/spring-cloud-commons-dependencies/pom.xml @@ -5,11 +5,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 1.2.1.RELEASE + 1.2.2.BUILD-SNAPSHOT spring-cloud-commons-dependencies - 1.1.5.RELEASE + 1.1.6.BUILD-SNAPSHOT pom spring-cloud-commons-dependencies Spring Cloud Commons Dependencies diff --git a/spring-cloud-commons/pom.xml b/spring-cloud-commons/pom.xml index f06fce16..aafe795f 100644 --- a/spring-cloud-commons/pom.xml +++ b/spring-cloud-commons/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.5.RELEASE + 1.1.6.BUILD-SNAPSHOT .. spring-cloud-commons diff --git a/spring-cloud-context/pom.xml b/spring-cloud-context/pom.xml index 497778fd..3f8b4468 100644 --- a/spring-cloud-context/pom.xml +++ b/spring-cloud-context/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.5.RELEASE + 1.1.6.BUILD-SNAPSHOT .. spring-cloud-context diff --git a/spring-cloud-starter/pom.xml b/spring-cloud-starter/pom.xml index 2d372421..a1f14306 100644 --- a/spring-cloud-starter/pom.xml +++ b/spring-cloud-starter/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.5.RELEASE + 1.1.6.BUILD-SNAPSHOT spring-cloud-starter spring-cloud-starter From 982df797f00c476e375262257c50777793f150f9 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Fri, 18 Nov 2016 11:53:34 -0500 Subject: [PATCH 03/16] Make sure we copy variables to new InfoEndpoint. Fixes #143. --- .../RefreshEndpointAutoConfiguration.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/RefreshEndpointAutoConfiguration.java b/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/RefreshEndpointAutoConfiguration.java index bac20fea..7c613ae4 100644 --- a/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/RefreshEndpointAutoConfiguration.java +++ b/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/RefreshEndpointAutoConfiguration.java @@ -58,11 +58,14 @@ import org.springframework.integration.monitor.IntegrationMBeanExporter; @AutoConfigureAfter(EndpointAutoConfiguration.class) public class RefreshEndpointAutoConfiguration { - @ConditionalOnBean(EndpointAutoConfiguration.class) @ConditionalOnMissingClass("org.springframework.boot.actuate.info.InfoContributor") - @Bean - InfoEndpointRebinderConfiguration infoEndpointRebinderConfiguration() { - return new InfoEndpointRebinderConfiguration(); + protected static class InfoEndpointAutoConfiguration { + + @ConditionalOnBean(EndpointAutoConfiguration.class) + @Bean + InfoEndpointRebinderConfiguration infoEndpointRebinderConfiguration() { + return new InfoEndpointRebinderConfiguration(); + } } @ConditionalOnMissingBean @@ -168,7 +171,7 @@ public class RefreshEndpointAutoConfiguration { } private InfoEndpoint infoEndpoint(InfoEndpoint endpoint) { - return new InfoEndpoint(endpoint.invoke()) { + InfoEndpoint newEndpoint = new InfoEndpoint(endpoint.invoke()) { @Override public Map invoke() { Map info = new LinkedHashMap( @@ -177,6 +180,10 @@ public class RefreshEndpointAutoConfiguration { return info; } }; + newEndpoint.setId(endpoint.getId()); + newEndpoint.setEnabled(endpoint.isEnabled()); + newEndpoint.setSensitive(endpoint.isSensitive()); + return newEndpoint; } } From a270fdec865a87c462dc5bee1d1b3d0bb66d68d0 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Fri, 18 Nov 2016 14:00:35 -0500 Subject: [PATCH 04/16] Changed s-c-build version to 1.1.3 so we continue to build against Boot 1.3.x. Fixes #145 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 330593a0..f50230c1 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 1.2.2.BUILD-SNAPSHOT + 1.1.3.BUILD-SNAPSHOT From 607b6a9b0cb8030537ed6be64f634c29a4d383c3 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 21 Nov 2016 11:01:02 -0500 Subject: [PATCH 05/16] Added TODO to remove InfoEndpointRebinderConfiguration --- .../cloud/autoconfigure/RefreshEndpointAutoConfiguration.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/RefreshEndpointAutoConfiguration.java b/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/RefreshEndpointAutoConfiguration.java index 7c613ae4..a09858d1 100644 --- a/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/RefreshEndpointAutoConfiguration.java +++ b/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/RefreshEndpointAutoConfiguration.java @@ -58,6 +58,8 @@ import org.springframework.integration.monitor.IntegrationMBeanExporter; @AutoConfigureAfter(EndpointAutoConfiguration.class) public class RefreshEndpointAutoConfiguration { + //TODO Remove this class and InfoEndpointRebinderConfiguration once we no longer + //need to support Boot 1.3.x @ConditionalOnMissingClass("org.springframework.boot.actuate.info.InfoContributor") protected static class InfoEndpointAutoConfiguration { From 8a8d27ab6b1c36088c7365fee42774d68349842e Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Wed, 23 Nov 2016 14:32:45 -0500 Subject: [PATCH 06/16] Version changes for 1.1.3 RELEASE --- docs/pom.xml | 2 +- pom.xml | 4 ++-- spring-cloud-commons-dependencies/pom.xml | 4 ++-- spring-cloud-commons/pom.xml | 2 +- spring-cloud-context/pom.xml | 2 +- spring-cloud-starter/pom.xml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 76db0f8c..0aad6a19 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.6.BUILD-SNAPSHOT + 1.1.6.RELEASE pom Spring Cloud Commons Docs diff --git a/pom.xml b/pom.xml index f50230c1..e7d4ef81 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.springframework.cloud spring-cloud-commons-parent - 1.1.6.BUILD-SNAPSHOT + 1.1.6.RELEASE pom Spring Cloud Commons Parent Spring Cloud Commons Parent @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 1.1.3.BUILD-SNAPSHOT + 1.1.3.RELEASE diff --git a/spring-cloud-commons-dependencies/pom.xml b/spring-cloud-commons-dependencies/pom.xml index ccbb669e..bf43f5a0 100644 --- a/spring-cloud-commons-dependencies/pom.xml +++ b/spring-cloud-commons-dependencies/pom.xml @@ -5,11 +5,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 1.2.2.BUILD-SNAPSHOT + 1.2.1.RELEASE spring-cloud-commons-dependencies - 1.1.6.BUILD-SNAPSHOT + 1.1.6.RELEASE pom spring-cloud-commons-dependencies Spring Cloud Commons Dependencies diff --git a/spring-cloud-commons/pom.xml b/spring-cloud-commons/pom.xml index aafe795f..550cf1cd 100644 --- a/spring-cloud-commons/pom.xml +++ b/spring-cloud-commons/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.6.BUILD-SNAPSHOT + 1.1.6.RELEASE .. spring-cloud-commons diff --git a/spring-cloud-context/pom.xml b/spring-cloud-context/pom.xml index 3f8b4468..f377ee0b 100644 --- a/spring-cloud-context/pom.xml +++ b/spring-cloud-context/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.6.BUILD-SNAPSHOT + 1.1.6.RELEASE .. spring-cloud-context diff --git a/spring-cloud-starter/pom.xml b/spring-cloud-starter/pom.xml index a1f14306..b02cce30 100644 --- a/spring-cloud-starter/pom.xml +++ b/spring-cloud-starter/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.6.BUILD-SNAPSHOT + 1.1.6.RELEASE spring-cloud-starter spring-cloud-starter From 3e0c8099a208d7e2e034913682c8777280f164b3 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Wed, 23 Nov 2016 14:42:10 -0500 Subject: [PATCH 07/16] Revert "Version changes for 1.1.3 RELEASE" This reverts commit 8a8d27ab6b1c36088c7365fee42774d68349842e. --- docs/pom.xml | 2 +- pom.xml | 4 ++-- spring-cloud-commons-dependencies/pom.xml | 4 ++-- spring-cloud-commons/pom.xml | 2 +- spring-cloud-context/pom.xml | 2 +- spring-cloud-starter/pom.xml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 0aad6a19..76db0f8c 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.6.RELEASE + 1.1.6.BUILD-SNAPSHOT pom Spring Cloud Commons Docs diff --git a/pom.xml b/pom.xml index e7d4ef81..f50230c1 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.springframework.cloud spring-cloud-commons-parent - 1.1.6.RELEASE + 1.1.6.BUILD-SNAPSHOT pom Spring Cloud Commons Parent Spring Cloud Commons Parent @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 1.1.3.RELEASE + 1.1.3.BUILD-SNAPSHOT diff --git a/spring-cloud-commons-dependencies/pom.xml b/spring-cloud-commons-dependencies/pom.xml index bf43f5a0..ccbb669e 100644 --- a/spring-cloud-commons-dependencies/pom.xml +++ b/spring-cloud-commons-dependencies/pom.xml @@ -5,11 +5,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 1.2.1.RELEASE + 1.2.2.BUILD-SNAPSHOT spring-cloud-commons-dependencies - 1.1.6.RELEASE + 1.1.6.BUILD-SNAPSHOT pom spring-cloud-commons-dependencies Spring Cloud Commons Dependencies diff --git a/spring-cloud-commons/pom.xml b/spring-cloud-commons/pom.xml index 550cf1cd..aafe795f 100644 --- a/spring-cloud-commons/pom.xml +++ b/spring-cloud-commons/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.6.RELEASE + 1.1.6.BUILD-SNAPSHOT .. spring-cloud-commons diff --git a/spring-cloud-context/pom.xml b/spring-cloud-context/pom.xml index f377ee0b..3f8b4468 100644 --- a/spring-cloud-context/pom.xml +++ b/spring-cloud-context/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.6.RELEASE + 1.1.6.BUILD-SNAPSHOT .. spring-cloud-context diff --git a/spring-cloud-starter/pom.xml b/spring-cloud-starter/pom.xml index b02cce30..a1f14306 100644 --- a/spring-cloud-starter/pom.xml +++ b/spring-cloud-starter/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.6.RELEASE + 1.1.6.BUILD-SNAPSHOT spring-cloud-starter spring-cloud-starter From cfa761c4c01c45d42fed967953268e609fcd152d Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Wed, 23 Nov 2016 14:45:14 -0500 Subject: [PATCH 08/16] Bumped versions for next release --- docs/pom.xml | 2 +- pom.xml | 4 ++-- spring-cloud-commons-dependencies/pom.xml | 2 +- spring-cloud-commons/pom.xml | 2 +- spring-cloud-context/pom.xml | 2 +- spring-cloud-starter/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 76db0f8c..91baa0bf 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.6.BUILD-SNAPSHOT + 1.1.7.BUILD-SNAPSHOT pom Spring Cloud Commons Docs diff --git a/pom.xml b/pom.xml index f50230c1..521e1ddd 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.springframework.cloud spring-cloud-commons-parent - 1.1.6.BUILD-SNAPSHOT + 1.1.7.BUILD-SNAPSHOT pom Spring Cloud Commons Parent Spring Cloud Commons Parent @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 1.1.3.BUILD-SNAPSHOT + 1.1.4.BUILD-SNAPSHOT diff --git a/spring-cloud-commons-dependencies/pom.xml b/spring-cloud-commons-dependencies/pom.xml index ccbb669e..a9f08d40 100644 --- a/spring-cloud-commons-dependencies/pom.xml +++ b/spring-cloud-commons-dependencies/pom.xml @@ -9,7 +9,7 @@ spring-cloud-commons-dependencies - 1.1.6.BUILD-SNAPSHOT + 1.1.7.BUILD-SNAPSHOT pom spring-cloud-commons-dependencies Spring Cloud Commons Dependencies diff --git a/spring-cloud-commons/pom.xml b/spring-cloud-commons/pom.xml index aafe795f..3ba0bde4 100644 --- a/spring-cloud-commons/pom.xml +++ b/spring-cloud-commons/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.6.BUILD-SNAPSHOT + 1.1.7.BUILD-SNAPSHOT .. spring-cloud-commons diff --git a/spring-cloud-context/pom.xml b/spring-cloud-context/pom.xml index 3f8b4468..540c5e2b 100644 --- a/spring-cloud-context/pom.xml +++ b/spring-cloud-context/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.6.BUILD-SNAPSHOT + 1.1.7.BUILD-SNAPSHOT .. spring-cloud-context diff --git a/spring-cloud-starter/pom.xml b/spring-cloud-starter/pom.xml index a1f14306..0cacc1d9 100644 --- a/spring-cloud-starter/pom.xml +++ b/spring-cloud-starter/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.6.BUILD-SNAPSHOT + 1.1.7.BUILD-SNAPSHOT spring-cloud-starter spring-cloud-starter From ca02313336bcbbe9eafaed28ba510c798144cf87 Mon Sep 17 00:00:00 2001 From: Will Tran Date: Wed, 4 Jan 2017 10:16:15 -0500 Subject: [PATCH 09/16] Customize load balanced requests according to the chosen ServiceInstance Applications can define their own LoadBalancerRequestTransformer beans which can modify the HttpRequest to be executed. These beans can be @Ordered in case of multiple transformers. Fixes #162 --- .../LoadBalancerAutoConfiguration.java | 26 ++- .../loadbalancer/LoadBalancerInterceptor.java | 26 ++- .../LoadBalancerRequestFactory.java | 69 +++++++ .../LoadBalancerRequestTransformer.java | 33 ++++ .../RetryLoadBalancerInterceptor.java | 43 +++-- ...ancerRequestFactoryConfigurationTests.java | 172 ++++++++++++++++++ .../LoadBalancerRequestFactoryTests.java | 123 +++++++++++++ .../RetryLoadBalancerInterceptorTest.java | 17 +- 8 files changed, 471 insertions(+), 38 deletions(-) create mode 100644 spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestFactory.java create mode 100644 spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestTransformer.java create mode 100644 spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestFactoryConfigurationTests.java create mode 100644 spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestFactoryTests.java diff --git a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerAutoConfiguration.java b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerAutoConfiguration.java index a0d51d93..3a892aaf 100644 --- a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerAutoConfiguration.java +++ b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerAutoConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2015 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. @@ -26,7 +26,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -39,6 +38,7 @@ import org.springframework.web.client.RestTemplate; * * @author Spencer Gibb * @author Dave Syer + * @author Will Tran */ @Configuration @ConditionalOnClass(RestTemplate.class) @@ -65,12 +65,24 @@ public class LoadBalancerAutoConfiguration { }; } + @Autowired(required = false) + private List transformers = Collections.emptyList(); + + @Bean + @ConditionalOnMissingBean + public LoadBalancerRequestFactory loadBalancerRequestFactory( + LoadBalancerClient loadBalancerClient) { + return new LoadBalancerRequestFactory(loadBalancerClient, transformers); + } + @Configuration @ConditionalOnMissingClass("org.springframework.retry.support.RetryTemplate") static class LoadBalancerInterceptorConfig { @Bean - public LoadBalancerInterceptor ribbonInterceptor(LoadBalancerClient loadBalancerClient) { - return new LoadBalancerInterceptor(loadBalancerClient); + public LoadBalancerInterceptor ribbonInterceptor( + LoadBalancerClient loadBalancerClient, + LoadBalancerRequestFactory requestFactory) { + return new LoadBalancerInterceptor(loadBalancerClient, requestFactory); } @Bean @@ -108,8 +120,10 @@ public class LoadBalancerAutoConfiguration { @Bean public RetryLoadBalancerInterceptor ribbonInterceptor( LoadBalancerClient loadBalancerClient, LoadBalancerRetryProperties properties, - LoadBalancedRetryPolicyFactory lbRetryPolicyFactory) { - return new RetryLoadBalancerInterceptor(loadBalancerClient, retryTemplate(), properties, lbRetryPolicyFactory); + LoadBalancedRetryPolicyFactory lbRetryPolicyFactory, + LoadBalancerRequestFactory requestFactory) { + return new RetryLoadBalancerInterceptor(loadBalancerClient, retryTemplate(), properties, + lbRetryPolicyFactory, requestFactory); } @Bean diff --git a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerInterceptor.java b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerInterceptor.java index 0d989ae0..0db5379d 100644 --- a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerInterceptor.java +++ b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerInterceptor.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2015 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. @@ -18,7 +18,7 @@ package org.springframework.cloud.client.loadbalancer; import java.io.IOException; import java.net.URI; -import org.springframework.cloud.client.ServiceInstance; + import org.springframework.http.HttpRequest; import org.springframework.http.client.ClientHttpRequestExecution; import org.springframework.http.client.ClientHttpRequestInterceptor; @@ -28,13 +28,21 @@ import org.springframework.http.client.ClientHttpResponse; * @author Spencer Gibb * @author Dave Syer * @author Ryan Baxter + * @author William Tran */ public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor { private LoadBalancerClient loadBalancer; + private LoadBalancerRequestFactory requestFactory; + + public LoadBalancerInterceptor(LoadBalancerClient loadBalancer, LoadBalancerRequestFactory requestFactory) { + this.loadBalancer = loadBalancer; + this.requestFactory = requestFactory; + } public LoadBalancerInterceptor(LoadBalancerClient loadBalancer) { - this.loadBalancer = loadBalancer; + // for backwards compatibility + this(loadBalancer, new LoadBalancerRequestFactory(loadBalancer)); } @Override @@ -42,16 +50,6 @@ public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor { final ClientHttpRequestExecution execution) throws IOException { final URI originalUri = request.getURI(); String serviceName = originalUri.getHost(); - return this.loadBalancer.execute(serviceName, - new LoadBalancerRequest() { - @Override - public ClientHttpResponse apply(final ServiceInstance instance) - throws Exception { - HttpRequest serviceRequest = new ServiceRequestWrapper(request, - instance, loadBalancer); - return execution.execute(serviceRequest, body); - } - - }); + return this.loadBalancer.execute(serviceName, requestFactory.createRequest(request, body, execution)); } } diff --git a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestFactory.java b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestFactory.java new file mode 100644 index 00000000..1a88c986 --- /dev/null +++ b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestFactory.java @@ -0,0 +1,69 @@ +/* + * 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.client.loadbalancer; + +import java.util.List; + +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpResponse; + +/** + * Creates {@link LoadBalancerRequest}s for {@link LoadBalancerInterceptor} and + * {@link RetryLoadBalancerInterceptor}. Applies + * {@link LoadBalancerRequestTransformer}s to the intercepted + * {@link HttpRequest}. + * + * @author William Tran + * + */ +public class LoadBalancerRequestFactory { + + private LoadBalancerClient loadBalancer; + private List transformers; + + public LoadBalancerRequestFactory(LoadBalancerClient loadBalancer, + List transformers) { + this.loadBalancer = loadBalancer; + this.transformers = transformers; + } + + public LoadBalancerRequestFactory(LoadBalancerClient loadBalancer) { + this.loadBalancer = loadBalancer; + } + + public LoadBalancerRequest createRequest(final HttpRequest request, + final byte[] body, final ClientHttpRequestExecution execution) { + return new LoadBalancerRequest() { + + @Override + public ClientHttpResponse apply(final ServiceInstance instance) + throws Exception { + HttpRequest serviceRequest = new ServiceRequestWrapper(request, instance, loadBalancer); + if (transformers != null) { + for (LoadBalancerRequestTransformer transformer : transformers) { + serviceRequest = transformer.transformRequest(serviceRequest, instance); + } + } + return execution.execute(serviceRequest, body); + } + + }; + } + +} diff --git a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestTransformer.java b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestTransformer.java new file mode 100644 index 00000000..bf25e419 --- /dev/null +++ b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestTransformer.java @@ -0,0 +1,33 @@ +/* + * 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.client.loadbalancer; + +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpRequest; + +/** + * Allows applications to transform the load balanced {@link HttpRequest} given + * the chosen {@link ServiceInstance} + * + * @author Will Tran + */ +@Order(LoadBalancerRequestTransformer.DEFAULT_ORDER) +public interface LoadBalancerRequestTransformer { + public static final int DEFAULT_ORDER = 0; + + HttpRequest transformRequest(HttpRequest request, ServiceInstance instance); +} \ No newline at end of file diff --git a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/RetryLoadBalancerInterceptor.java b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/RetryLoadBalancerInterceptor.java index a5cae45f..ab3a289e 100644 --- a/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/RetryLoadBalancerInterceptor.java +++ b/spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/RetryLoadBalancerInterceptor.java @@ -1,3 +1,19 @@ +/* + * Copyright 2016-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.client.loadbalancer; import java.io.IOException; @@ -15,6 +31,7 @@ import org.springframework.retry.support.RetryTemplate; /** * @author Ryan Baxter + * @author Will Tran */ public class RetryLoadBalancerInterceptor implements ClientHttpRequestInterceptor { @@ -22,15 +39,26 @@ public class RetryLoadBalancerInterceptor implements ClientHttpRequestIntercepto private RetryTemplate retryTemplate; private LoadBalancerClient loadBalancer; private LoadBalancerRetryProperties lbProperties; + private LoadBalancerRequestFactory requestFactory; public RetryLoadBalancerInterceptor(LoadBalancerClient loadBalancer, RetryTemplate retryTemplate, LoadBalancerRetryProperties lbProperties, - LoadBalancedRetryPolicyFactory lbRetryPolicyFactory) { + LoadBalancedRetryPolicyFactory lbRetryPolicyFactory, + LoadBalancerRequestFactory requestFactory) { this.loadBalancer = loadBalancer; this.lbRetryPolicyFactory = lbRetryPolicyFactory; this.retryTemplate = retryTemplate; this.lbProperties = lbProperties; + this.requestFactory = requestFactory; + } + + public RetryLoadBalancerInterceptor(LoadBalancerClient loadBalancer, RetryTemplate retryTemplate, + LoadBalancerRetryProperties lbProperties, + LoadBalancedRetryPolicyFactory lbRetryPolicyFactory) { + // for backwards compatibility + this(loadBalancer, retryTemplate, lbProperties, lbRetryPolicyFactory, + new LoadBalancerRequestFactory(loadBalancer)); } @Override @@ -59,18 +87,7 @@ public class RetryLoadBalancerInterceptor implements ClientHttpRequestIntercepto } return RetryLoadBalancerInterceptor.this.loadBalancer.execute( serviceName, serviceInstance, - new LoadBalancerRequest() { - - @Override - public ClientHttpResponse apply( - final ServiceInstance instance) - throws Exception { - HttpRequest serviceRequest = new ServiceRequestWrapper( - request, instance, loadBalancer); - return execution.execute(serviceRequest, body); - } - - }); + requestFactory.createRequest(request, body, execution)); } }); } diff --git a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestFactoryConfigurationTests.java b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestFactoryConfigurationTests.java new file mode 100644 index 00000000..4cdbc0a5 --- /dev/null +++ b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestFactoryConfigurationTests.java @@ -0,0 +1,172 @@ +/* + * 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.client.loadbalancer; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; + +@RunWith(MockitoJUnitRunner.class) +public class LoadBalancerRequestFactoryConfigurationTests { + + @Mock + private HttpRequest request; + @Mock + private HttpRequest transformedRequest; + @Mock + private HttpRequest transformedRequest2; + @Mock + private ClientHttpRequestExecution execution; + @Mock + private ServiceInstance instance; + + private byte[] body = new byte[] {}; + private ArgumentCaptor httpRequestCaptor; + private LoadBalancerRequestFactory lbReqFactory; + private LoadBalancerRequest lbRequest; + + @Before + public void setup() { + httpRequestCaptor = ArgumentCaptor.forClass(HttpRequest.class); + } + + protected ConfigurableApplicationContext init(Class config) { + ConfigurableApplicationContext context = new SpringApplicationBuilder().web(false) + .properties("spring.aop.proxyTargetClass=true") + .sources(config, LoadBalancerAutoConfiguration.class).run(); + + lbReqFactory = context.getBean(LoadBalancerRequestFactory.class); + lbRequest = lbReqFactory.createRequest(request, body, execution); + return context; + } + + @Test + public void transformer() throws Exception { + ConfigurableApplicationContext context = init(Transformer.class); + + LoadBalancerRequestTransformer transformer = context.getBean("transformer", + LoadBalancerRequestTransformer.class); + when(transformer.transformRequest(any(ServiceRequestWrapper.class), eq(instance))) + .thenReturn(transformedRequest); + + lbRequest.apply(instance); + + verify(execution).execute(httpRequestCaptor.capture(), eq(body)); + assertEquals( + "transformer should have transformed the ServiceRequestWrapper into transformedRequest", + transformedRequest, + httpRequestCaptor.getValue()); + } + + @Test + public void noTransformer() throws Exception { + init(NoTransformer.class); + + lbRequest.apply(instance); + + verify(execution).execute(httpRequestCaptor.capture(), eq(body)); + assertEquals( + "ServiceRequestWrapper should be executed", + ServiceRequestWrapper.class, + httpRequestCaptor.getValue().getClass()); + } + + @Test + public void transformersAreOrdered() throws Exception { + ConfigurableApplicationContext context = init(TransformersAreOrdered.class); + + LoadBalancerRequestTransformer transformer = context.getBean("transformer", + LoadBalancerRequestTransformer.class); + when(transformer.transformRequest(any(ServiceRequestWrapper.class), eq(instance))) + .thenReturn(transformedRequest); + LoadBalancerRequestTransformer transformer2 = context.getBean("transformer2", + LoadBalancerRequestTransformer.class); + when(transformer2.transformRequest(transformedRequest, instance)).thenReturn(transformedRequest2); + + lbRequest.apply(instance); + + verify(execution).execute(httpRequestCaptor.capture(), eq(body)); + assertEquals( + "transformer2 should run after transformer", + transformedRequest2, + httpRequestCaptor.getValue()); + } + + @Configuration + static class Transformer { + + @Bean + public LoadBalancerClient loadBalancerClient() { + return mock(LoadBalancerClient.class); + } + + @Bean + public LoadBalancerRequestTransformer transformer() { + return mock(LoadBalancerRequestTransformer.class); + } + + } + + @Configuration + static class TransformersAreOrdered { + + @Bean + public LoadBalancerClient loadBalancerClient() { + return mock(LoadBalancerClient.class); + } + + @Bean + public LoadBalancerRequestTransformer transformer() { + return mock(LoadBalancerRequestTransformer.class); + } + + @Bean + @Order(LoadBalancerRequestTransformer.DEFAULT_ORDER + 1) + public LoadBalancerRequestTransformer transformer2() { + return mock(LoadBalancerRequestTransformer.class); + } + + } + + @Configuration + static class NoTransformer { + + @Bean + public LoadBalancerClient loadBalancerClient() { + return mock(LoadBalancerClient.class); + } + + } + +} diff --git a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestFactoryTests.java b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestFactoryTests.java new file mode 100644 index 00000000..b2640b1d --- /dev/null +++ b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestFactoryTests.java @@ -0,0 +1,123 @@ +/* + * 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.client.loadbalancer; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpResponse; + +@RunWith(MockitoJUnitRunner.class) +public class LoadBalancerRequestFactoryTests { + + @Mock + private LoadBalancerClient loadBalancer; + @Mock + private HttpRequest request; + @Mock + private HttpRequest transformedRequest1; + @Mock + private HttpRequest transformedRequest2; + + private byte[] body = new byte[] {}; + + @Mock + private ClientHttpRequestExecution execution; + @Mock + private ServiceInstance instance; + @Mock + private LoadBalancerRequestTransformer transformer1; + @Mock + private LoadBalancerRequestTransformer transformer2; + + private ArgumentCaptor httpRequestCaptor; + + @Before + public void setup() { + httpRequestCaptor = ArgumentCaptor.forClass(HttpRequest.class); + } + + @Test + public void testNullTransformers() throws Exception { + executeLbRequest(null); + + verify(execution).execute(httpRequestCaptor.capture(), eq(body)); + Assert.assertEquals("request should be of type ServiceRequestWrapper", ServiceRequestWrapper.class, + httpRequestCaptor.getValue().getClass()); + } + + @Test + public void testEmptyTransformers() throws Exception { + List transformers = Collections.emptyList(); + + executeLbRequest(transformers); + + verify(execution).execute(httpRequestCaptor.capture(), eq(body)); + Assert.assertEquals("request should be of type ServiceRequestWrapper", ServiceRequestWrapper.class, + httpRequestCaptor.getValue().getClass()); + } + + @Test + public void testOneTransformer() throws Exception { + List transformers = Arrays.asList(transformer1); + when(transformer1.transformRequest(any(ServiceRequestWrapper.class), eq(instance))).thenReturn(transformedRequest1); + + executeLbRequest(transformers); + + verify(execution).execute(httpRequestCaptor.capture(), eq(body)); + assertEquals("transformer1 should have transformed request into transformedRequest1", transformedRequest1, + httpRequestCaptor.getValue()); + } + + @Test + public void testTwoTransformers() throws Exception { + List transformers = Arrays.asList(transformer1, transformer2); + when(transformer1.transformRequest(any(ServiceRequestWrapper.class), eq(instance))).thenReturn(transformedRequest1); + when(transformer2.transformRequest(transformedRequest1, instance)) + .thenReturn(transformedRequest2); + + executeLbRequest(transformers); + + verify(execution).execute(httpRequestCaptor.capture(), eq(body)); + assertEquals("transformer2 should have transformed transformedRequest1 into transformedRequest2", + transformedRequest2, + httpRequestCaptor.getValue()); + } + + private void executeLbRequest(List transformers) throws Exception { + LoadBalancerRequestFactory lbReqFactory = new LoadBalancerRequestFactory(loadBalancer, transformers); + LoadBalancerRequest lbRequest = lbReqFactory.createRequest(request, body, execution); + lbRequest.apply(instance); + } + +} diff --git a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/RetryLoadBalancerInterceptorTest.java b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/RetryLoadBalancerInterceptorTest.java index 1b4ba551..42bf0a5f 100644 --- a/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/RetryLoadBalancerInterceptorTest.java +++ b/spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/RetryLoadBalancerInterceptorTest.java @@ -35,12 +35,14 @@ public class RetryLoadBalancerInterceptorTest { private LoadBalancerClient client; private RetryTemplate retryTemplate; private LoadBalancerRetryProperties lbProperties; + private LoadBalancerRequestFactory lbRequestFactory; @Before public void setUp() throws Exception { client = mock(LoadBalancerClient.class); retryTemplate = spy(new RetryTemplate()); lbProperties = new LoadBalancerRetryProperties(); + lbRequestFactory = mock(LoadBalancerRequestFactory.class); } @@ -62,11 +64,12 @@ public class RetryLoadBalancerInterceptorTest { when(client.choose(eq("foo"))).thenReturn(serviceInstance); when(client.execute(eq("foo"), eq(serviceInstance), any(LoadBalancerRequest.class))).thenThrow(new IOException()); lbProperties.setEnabled(false); - RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory); + RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory, lbRequestFactory); byte[] body = new byte[]{}; ClientHttpRequestExecution execution = mock(ClientHttpRequestExecution.class); interceptor.intercept(request, body, execution); verify(retryTemplate, times(1)).setRetryPolicy(any(NeverRetryPolicy.class)); + verify(lbRequestFactory).createRequest(request, body, execution); } @Test @@ -80,11 +83,12 @@ public class RetryLoadBalancerInterceptorTest { when(client.choose(eq("foo"))).thenReturn(serviceInstance); when(client.execute(eq("foo"), eq(serviceInstance), any(LoadBalancerRequest.class))).thenReturn(clientHttpResponse); lbProperties.setEnabled(true); - RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory); + RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory, lbRequestFactory); byte[] body = new byte[]{}; ClientHttpRequestExecution execution = mock(ClientHttpRequestExecution.class); interceptor.intercept(request, body, execution); verify(retryTemplate, times(1)).setRetryPolicy(any(NeverRetryPolicy.class)); + verify(lbRequestFactory).createRequest(request, body, execution); } @Test @@ -100,12 +104,13 @@ public class RetryLoadBalancerInterceptorTest { when(client.choose(eq("foo"))).thenReturn(serviceInstance); when(client.execute(eq("foo"), eq(serviceInstance), any(LoadBalancerRequest.class))).thenReturn(clientHttpResponse); lbProperties.setEnabled(true); - RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory); + RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory, lbRequestFactory); byte[] body = new byte[]{}; ClientHttpRequestExecution execution = mock(ClientHttpRequestExecution.class); ClientHttpResponse rsp = interceptor.intercept(request, body, execution); assertThat(rsp, is(clientHttpResponse)); verify(retryTemplate, times(1)).setRetryPolicy(eq(interceptorRetryPolicy)); + verify(lbRequestFactory).createRequest(request, body, execution); } @Test @@ -121,13 +126,14 @@ public class RetryLoadBalancerInterceptorTest { when(client.choose(eq("foo"))).thenReturn(serviceInstance); when(client.execute(eq("foo"), eq(serviceInstance), any(LoadBalancerRequest.class))).thenThrow(new IOException()).thenReturn(clientHttpResponse); lbProperties.setEnabled(true); - RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory); + RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory, lbRequestFactory); byte[] body = new byte[]{}; ClientHttpRequestExecution execution = mock(ClientHttpRequestExecution.class); ClientHttpResponse rsp = interceptor.intercept(request, body, execution); verify(client, times(2)).execute(eq("foo"), eq(serviceInstance), any(LoadBalancerRequest.class)); assertThat(rsp, is(clientHttpResponse)); verify(retryTemplate, times(1)).setRetryPolicy(any(InterceptorRetryPolicy.class)); + verify(lbRequestFactory, times(2)).createRequest(request, body, execution); } @Test(expected = IOException.class) @@ -144,9 +150,10 @@ public class RetryLoadBalancerInterceptorTest { when(client.choose(eq("foo"))).thenReturn(serviceInstance); when(client.execute(eq("foo"), eq(serviceInstance), any(LoadBalancerRequest.class))).thenThrow(new IOException()).thenReturn(clientHttpResponse); lbProperties.setEnabled(true); - RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory); + RetryLoadBalancerInterceptor interceptor = new RetryLoadBalancerInterceptor(client, retryTemplate, lbProperties, lbRetryPolicyFactory, lbRequestFactory); byte[] body = new byte[]{}; ClientHttpRequestExecution execution = mock(ClientHttpRequestExecution.class); ClientHttpResponse rsp = interceptor.intercept(request, body, execution); + verify(lbRequestFactory).createRequest(request, body, execution); } } \ No newline at end of file From 081dea9482a913e11ffcf28fce3b6b3349ebd1d7 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 9 Jan 2017 10:16:44 -0500 Subject: [PATCH 10/16] Updating generated README --- README.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.adoc b/README.adoc index 08753411..3b0612a0 100644 --- a/README.adoc +++ b/README.adoc @@ -76,11 +76,11 @@ a modified file in the correct place. Just commit it and push the change. If you don't have an IDE preference we would recommend that you use http://www.springsource.com/developer/sts[Spring Tools Suite] or http://eclipse.org[Eclipse] when working with the code. We use the -http://eclipse.org/m2e/[m2eclipe] eclipse plugin for maven support. Other IDEs and tools +http://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. ==== Importing into eclipse with m2eclipse -We recommend the http://eclipse.org/m2e/[m2eclipe] eclipse plugin when working with +We recommend the http://eclipse.org/m2e/[m2eclipse] eclipse plugin when working with eclipse. If you don't already have m2eclipse installed it is available from the "eclipse marketplace". From 5b4cbaa2458d2701591ac0bb7172e2b28aef5660 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 9 Jan 2017 10:17:40 -0500 Subject: [PATCH 11/16] Updating versions for 1.1.7 release --- docs/pom.xml | 2 +- pom.xml | 4 ++-- spring-cloud-commons-dependencies/pom.xml | 4 ++-- spring-cloud-commons/pom.xml | 2 +- spring-cloud-context/pom.xml | 2 +- spring-cloud-starter/pom.xml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 91baa0bf..3cded842 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.7.BUILD-SNAPSHOT + 1.1.7.RELEASE pom Spring Cloud Commons Docs diff --git a/pom.xml b/pom.xml index 521e1ddd..85e4ea00 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.springframework.cloud spring-cloud-commons-parent - 1.1.7.BUILD-SNAPSHOT + 1.1.7.RELEASE pom Spring Cloud Commons Parent Spring Cloud Commons Parent @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 1.1.4.BUILD-SNAPSHOT + 1.1.3.RELEASE diff --git a/spring-cloud-commons-dependencies/pom.xml b/spring-cloud-commons-dependencies/pom.xml index a9f08d40..7b928bd8 100644 --- a/spring-cloud-commons-dependencies/pom.xml +++ b/spring-cloud-commons-dependencies/pom.xml @@ -5,11 +5,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 1.2.2.BUILD-SNAPSHOT + 1.2.1.RELEASE spring-cloud-commons-dependencies - 1.1.7.BUILD-SNAPSHOT + 1.1.7.RELEASE pom spring-cloud-commons-dependencies Spring Cloud Commons Dependencies diff --git a/spring-cloud-commons/pom.xml b/spring-cloud-commons/pom.xml index 3ba0bde4..bfc47582 100644 --- a/spring-cloud-commons/pom.xml +++ b/spring-cloud-commons/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.7.BUILD-SNAPSHOT + 1.1.7.RELEASE .. spring-cloud-commons diff --git a/spring-cloud-context/pom.xml b/spring-cloud-context/pom.xml index 540c5e2b..08b40786 100644 --- a/spring-cloud-context/pom.xml +++ b/spring-cloud-context/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.7.BUILD-SNAPSHOT + 1.1.7.RELEASE .. spring-cloud-context diff --git a/spring-cloud-starter/pom.xml b/spring-cloud-starter/pom.xml index 0cacc1d9..4bc75b75 100644 --- a/spring-cloud-starter/pom.xml +++ b/spring-cloud-starter/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.7.BUILD-SNAPSHOT + 1.1.7.RELEASE spring-cloud-starter spring-cloud-starter From 009b6ee7f3d2fd92e98ef51432763e0c89eafe04 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 9 Jan 2017 10:33:27 -0500 Subject: [PATCH 12/16] Revert "Updating versions for 1.1.7 release" This reverts commit 5b4cbaa2458d2701591ac0bb7172e2b28aef5660. --- docs/pom.xml | 2 +- pom.xml | 4 ++-- spring-cloud-commons-dependencies/pom.xml | 4 ++-- spring-cloud-commons/pom.xml | 2 +- spring-cloud-context/pom.xml | 2 +- spring-cloud-starter/pom.xml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 3cded842..91baa0bf 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.7.RELEASE + 1.1.7.BUILD-SNAPSHOT pom Spring Cloud Commons Docs diff --git a/pom.xml b/pom.xml index 85e4ea00..521e1ddd 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.springframework.cloud spring-cloud-commons-parent - 1.1.7.RELEASE + 1.1.7.BUILD-SNAPSHOT pom Spring Cloud Commons Parent Spring Cloud Commons Parent @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-build - 1.1.3.RELEASE + 1.1.4.BUILD-SNAPSHOT diff --git a/spring-cloud-commons-dependencies/pom.xml b/spring-cloud-commons-dependencies/pom.xml index 7b928bd8..a9f08d40 100644 --- a/spring-cloud-commons-dependencies/pom.xml +++ b/spring-cloud-commons-dependencies/pom.xml @@ -5,11 +5,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 1.2.1.RELEASE + 1.2.2.BUILD-SNAPSHOT spring-cloud-commons-dependencies - 1.1.7.RELEASE + 1.1.7.BUILD-SNAPSHOT pom spring-cloud-commons-dependencies Spring Cloud Commons Dependencies diff --git a/spring-cloud-commons/pom.xml b/spring-cloud-commons/pom.xml index bfc47582..3ba0bde4 100644 --- a/spring-cloud-commons/pom.xml +++ b/spring-cloud-commons/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.7.RELEASE + 1.1.7.BUILD-SNAPSHOT .. spring-cloud-commons diff --git a/spring-cloud-context/pom.xml b/spring-cloud-context/pom.xml index 08b40786..540c5e2b 100644 --- a/spring-cloud-context/pom.xml +++ b/spring-cloud-context/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.7.RELEASE + 1.1.7.BUILD-SNAPSHOT .. spring-cloud-context diff --git a/spring-cloud-starter/pom.xml b/spring-cloud-starter/pom.xml index 4bc75b75..0cacc1d9 100644 --- a/spring-cloud-starter/pom.xml +++ b/spring-cloud-starter/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.7.RELEASE + 1.1.7.BUILD-SNAPSHOT spring-cloud-starter spring-cloud-starter From 710080cd47041d033c892198e426ee2e336078b9 Mon Sep 17 00:00:00 2001 From: Ryan Baxter Date: Mon, 9 Jan 2017 10:44:20 -0500 Subject: [PATCH 13/16] Updated versions for next release --- docs/pom.xml | 2 +- pom.xml | 2 +- spring-cloud-commons-dependencies/pom.xml | 2 +- spring-cloud-commons/pom.xml | 2 +- spring-cloud-context/pom.xml | 2 +- spring-cloud-starter/pom.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/pom.xml b/docs/pom.xml index 91baa0bf..e27feda7 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.7.BUILD-SNAPSHOT + 1.1.8.BUILD-SNAPSHOT pom Spring Cloud Commons Docs diff --git a/pom.xml b/pom.xml index 521e1ddd..910e9109 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.springframework.cloud spring-cloud-commons-parent - 1.1.7.BUILD-SNAPSHOT + 1.1.8.BUILD-SNAPSHOT pom Spring Cloud Commons Parent Spring Cloud Commons Parent diff --git a/spring-cloud-commons-dependencies/pom.xml b/spring-cloud-commons-dependencies/pom.xml index a9f08d40..c4ddce1a 100644 --- a/spring-cloud-commons-dependencies/pom.xml +++ b/spring-cloud-commons-dependencies/pom.xml @@ -9,7 +9,7 @@ spring-cloud-commons-dependencies - 1.1.7.BUILD-SNAPSHOT + 1.1.8.BUILD-SNAPSHOT pom spring-cloud-commons-dependencies Spring Cloud Commons Dependencies diff --git a/spring-cloud-commons/pom.xml b/spring-cloud-commons/pom.xml index 3ba0bde4..7843a66e 100644 --- a/spring-cloud-commons/pom.xml +++ b/spring-cloud-commons/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.7.BUILD-SNAPSHOT + 1.1.8.BUILD-SNAPSHOT .. spring-cloud-commons diff --git a/spring-cloud-context/pom.xml b/spring-cloud-context/pom.xml index 540c5e2b..70e92fbc 100644 --- a/spring-cloud-context/pom.xml +++ b/spring-cloud-context/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.7.BUILD-SNAPSHOT + 1.1.8.BUILD-SNAPSHOT .. spring-cloud-context diff --git a/spring-cloud-starter/pom.xml b/spring-cloud-starter/pom.xml index 0cacc1d9..c57f1bc1 100644 --- a/spring-cloud-starter/pom.xml +++ b/spring-cloud-starter/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-commons-parent - 1.1.7.BUILD-SNAPSHOT + 1.1.8.BUILD-SNAPSHOT spring-cloud-starter spring-cloud-starter From 5b8ae3a96a3d59c3e9be3d8828820b21d329f70b Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Tue, 14 Feb 2017 16:17:05 -0700 Subject: [PATCH 14/16] Make sure bootstrap sources are ordered before use. Make call to sort() before setting on builder.sources(). fixes gh-176 (cherry picked from commit 6dc35d1) --- .../BootstrapApplicationListener.java | 2 +- .../BootstrapSourcesOrderingTests.java | 34 +++++++++++++++++++ .../bootstrap/TestBootstrapConfiguration.java | 17 ++++++++++ ...tHigherPriorityBootstrapConfiguration.java | 20 +++++++++++ .../test/resources/META-INF/spring.factories | 4 +++ 5 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/BootstrapSourcesOrderingTests.java create mode 100644 spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/TestBootstrapConfiguration.java create mode 100644 spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/TestHigherPriorityBootstrapConfiguration.java create mode 100644 spring-cloud-context/src/test/resources/META-INF/spring.factories diff --git a/spring-cloud-context/src/main/java/org/springframework/cloud/bootstrap/BootstrapApplicationListener.java b/spring-cloud-context/src/main/java/org/springframework/cloud/bootstrap/BootstrapApplicationListener.java index 8346c63e..76428941 100644 --- a/spring-cloud-context/src/main/java/org/springframework/cloud/bootstrap/BootstrapApplicationListener.java +++ b/spring-cloud-context/src/main/java/org/springframework/cloud/bootstrap/BootstrapApplicationListener.java @@ -133,8 +133,8 @@ public class BootstrapApplicationListener } sources.add(cls); } - builder.sources(sources.toArray(new Class[sources.size()])); AnnotationAwareOrderComparator.sort(sources); + builder.sources(sources.toArray(new Class[sources.size()])); final ConfigurableApplicationContext context = builder.run(); // Make the bootstrap context a parent of the app context addAncestorInitializer(application, context); diff --git a/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/BootstrapSourcesOrderingTests.java b/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/BootstrapSourcesOrderingTests.java new file mode 100644 index 00000000..84df3ad0 --- /dev/null +++ b/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/BootstrapSourcesOrderingTests.java @@ -0,0 +1,34 @@ +package org.springframework.cloud.bootstrap; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cloud.bootstrap.BootstrapOrderingSpringApplicationJsonIntegrationTests.Application; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.cloud.bootstrap.TestHigherPriorityBootstrapConfiguration.firstToBeCreated; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Application.class) +public class BootstrapSourcesOrderingTests { + + @Autowired + private ConfigurableEnvironment environment; + + @Test + public void sourcesAreOrderedCorrectly() { + Class firstConstructedClass = firstToBeCreated.get(); + assertThat(firstConstructedClass).as("bootstrap sources not ordered correctly").isEqualTo(TestHigherPriorityBootstrapConfiguration.class); + } + + @EnableAutoConfiguration + @Configuration + protected static class Application { + } + +} diff --git a/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/TestBootstrapConfiguration.java b/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/TestBootstrapConfiguration.java new file mode 100644 index 00000000..798db7b8 --- /dev/null +++ b/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/TestBootstrapConfiguration.java @@ -0,0 +1,17 @@ +package org.springframework.cloud.bootstrap; + +import org.springframework.core.annotation.Order; + +import static org.springframework.cloud.bootstrap.TestHigherPriorityBootstrapConfiguration.firstToBeCreated; + +/** + * @author Spencer Gibb + */ +@Order(0) +public class TestBootstrapConfiguration { + + public TestBootstrapConfiguration() { + firstToBeCreated.compareAndSet(null, TestBootstrapConfiguration.class); + } + +} diff --git a/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/TestHigherPriorityBootstrapConfiguration.java b/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/TestHigherPriorityBootstrapConfiguration.java new file mode 100644 index 00000000..2494a5b6 --- /dev/null +++ b/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/TestHigherPriorityBootstrapConfiguration.java @@ -0,0 +1,20 @@ +package org.springframework.cloud.bootstrap; + +import java.util.concurrent.atomic.AtomicReference; + +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; + +/** + * @author Spencer Gibb + */ +@Order(Ordered.HIGHEST_PRECEDENCE) +public class TestHigherPriorityBootstrapConfiguration { + + static final AtomicReference> firstToBeCreated = new AtomicReference<>(); + + public TestHigherPriorityBootstrapConfiguration() { + firstToBeCreated.compareAndSet(null, TestHigherPriorityBootstrapConfiguration.class); + } + +} diff --git a/spring-cloud-context/src/test/resources/META-INF/spring.factories b/spring-cloud-context/src/test/resources/META-INF/spring.factories new file mode 100644 index 00000000..419787be --- /dev/null +++ b/spring-cloud-context/src/test/resources/META-INF/spring.factories @@ -0,0 +1,4 @@ +# Bootstrap components +org.springframework.cloud.bootstrap.BootstrapConfiguration=\ +org.springframework.cloud.bootstrap.TestBootstrapConfiguration,\ +org.springframework.cloud.bootstrap.TestHigherPriorityBootstrapConfiguration From a86356327ca23789c04f97990186c822329698ab Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Tue, 14 Feb 2017 14:23:27 -0700 Subject: [PATCH 15/16] fix tests for boot 1.4.x --- .../bootstrap/BootstrapSourcesOrderingTests.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/BootstrapSourcesOrderingTests.java b/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/BootstrapSourcesOrderingTests.java index 84df3ad0..113e1197 100644 --- a/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/BootstrapSourcesOrderingTests.java +++ b/spring-cloud-context/src/test/java/org/springframework/cloud/bootstrap/BootstrapSourcesOrderingTests.java @@ -1,20 +1,20 @@ package org.springframework.cloud.bootstrap; +import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.cloud.bootstrap.BootstrapOrderingSpringApplicationJsonIntegrationTests.Application; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.cloud.bootstrap.TestHigherPriorityBootstrapConfiguration.firstToBeCreated; -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = Application.class) public class BootstrapSourcesOrderingTests { @Autowired @@ -23,7 +23,8 @@ public class BootstrapSourcesOrderingTests { @Test public void sourcesAreOrderedCorrectly() { Class firstConstructedClass = firstToBeCreated.get(); - assertThat(firstConstructedClass).as("bootstrap sources not ordered correctly").isEqualTo(TestHigherPriorityBootstrapConfiguration.class); + Assert.assertEquals("bootstrap sources not ordered correctly", + TestHigherPriorityBootstrapConfiguration.class, firstConstructedClass); } @EnableAutoConfiguration From c683393efa1aa10ed5ae5aba1bb05c55bbd5ec63 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Mon, 20 Feb 2017 10:56:32 +0000 Subject: [PATCH 16/16] Manage version of jar plugin to not break STS --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 910e9109..d2d2ea45 100644 --- a/pom.xml +++ b/pom.xml @@ -71,7 +71,6 @@ org.apache.maven.plugins maven-jar-plugin - 3.0.2