From e9f345a3d66d5dd3b8ddc3c1651ea9671da74bf0 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Wed, 8 May 2019 19:46:30 +0200 Subject: [PATCH 01/16] Upgrade to Spring Cloud Greenwich.SR1 and Spring Boot 2.1.4 --- pom.xml | 7 +++---- spring-petclinic-admin-server/pom.xml | 2 +- spring-petclinic-api-gateway/pom.xml | 2 +- spring-petclinic-config-server/pom.xml | 2 +- spring-petclinic-customers-service/pom.xml | 2 +- spring-petclinic-discovery-server/pom.xml | 2 +- spring-petclinic-hystrix-dashboard/pom.xml | 2 +- spring-petclinic-vets-service/pom.xml | 2 +- spring-petclinic-visits-service/pom.xml | 2 +- 9 files changed, 11 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index 19f5b5b76..38fe5a9fe 100644 --- a/pom.xml +++ b/pom.xml @@ -6,12 +6,12 @@ org.springframework.boot spring-boot-starter-parent - 2.1.1.RELEASE + 2.1.4.RELEASE org.springframework.samples spring-petclinic-microservices - 2.1.2 + 2.1.4 ${project.artifactId} pom @@ -31,8 +31,7 @@ 3.11.1 2.1.2.RELEASE - Greenwich.RELEASE - 1.0.5 + Greenwich.SR1 2.22.0 diff --git a/spring-petclinic-admin-server/pom.xml b/spring-petclinic-admin-server/pom.xml index 7aaa088f3..d27aa29af 100644 --- a/spring-petclinic-admin-server/pom.xml +++ b/spring-petclinic-admin-server/pom.xml @@ -12,7 +12,7 @@ org.springframework.samples spring-petclinic-microservices - 2.1.2 + 2.1.4 diff --git a/spring-petclinic-api-gateway/pom.xml b/spring-petclinic-api-gateway/pom.xml index 4c9aa09f1..02930ba19 100644 --- a/spring-petclinic-api-gateway/pom.xml +++ b/spring-petclinic-api-gateway/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.1.2 + 2.1.4 diff --git a/spring-petclinic-config-server/pom.xml b/spring-petclinic-config-server/pom.xml index 3410f2f1a..07fdca5ec 100644 --- a/spring-petclinic-config-server/pom.xml +++ b/spring-petclinic-config-server/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.1.2 + 2.1.4 diff --git a/spring-petclinic-customers-service/pom.xml b/spring-petclinic-customers-service/pom.xml index dccc8e5a5..2d2015492 100644 --- a/spring-petclinic-customers-service/pom.xml +++ b/spring-petclinic-customers-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.1.2 + 2.1.4 diff --git a/spring-petclinic-discovery-server/pom.xml b/spring-petclinic-discovery-server/pom.xml index 7ef53e766..81e866a87 100644 --- a/spring-petclinic-discovery-server/pom.xml +++ b/spring-petclinic-discovery-server/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.1.2 + 2.1.4 diff --git a/spring-petclinic-hystrix-dashboard/pom.xml b/spring-petclinic-hystrix-dashboard/pom.xml index 3b847df6a..c6c55f5da 100644 --- a/spring-petclinic-hystrix-dashboard/pom.xml +++ b/spring-petclinic-hystrix-dashboard/pom.xml @@ -5,7 +5,7 @@ spring-petclinic-microservices org.springframework.samples - 2.1.2 + 2.1.4 4.0.0 diff --git a/spring-petclinic-vets-service/pom.xml b/spring-petclinic-vets-service/pom.xml index ba93f4603..cfa9ae945 100644 --- a/spring-petclinic-vets-service/pom.xml +++ b/spring-petclinic-vets-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.1.2 + 2.1.4 diff --git a/spring-petclinic-visits-service/pom.xml b/spring-petclinic-visits-service/pom.xml index bf5b1b76a..f9b213454 100644 --- a/spring-petclinic-visits-service/pom.xml +++ b/spring-petclinic-visits-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.1.2 + 2.1.4 From 98fba5447775099f28762061782577afa3a9c545 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Wed, 3 Apr 2019 08:17:17 +0200 Subject: [PATCH 02/16] Migrate from Netflix Zuul to Spring Cloud Gateway #117 --- spring-petclinic-api-gateway/pom.xml | 6 +--- .../petclinic/api/ApiGatewayApplication.java | 26 ++++++++++++++-- .../boundary/web/ApiGatewayController.java | 2 ++ .../src/main/resources/application.yml | 30 ++++++++++++++----- 4 files changed, 49 insertions(+), 15 deletions(-) diff --git a/spring-petclinic-api-gateway/pom.xml b/spring-petclinic-api-gateway/pom.xml index 02930ba19..be54a5828 100644 --- a/spring-petclinic-api-gateway/pom.xml +++ b/spring-petclinic-api-gateway/pom.xml @@ -42,10 +42,6 @@ org.springframework.boot spring-boot-starter-actuator - - org.springframework.boot - spring-boot-starter-web - org.springframework.boot spring-boot-starter-test @@ -71,7 +67,7 @@ org.springframework.cloud - spring-cloud-starter-netflix-zuul + spring-cloud-starter-gateway org.springframework.cloud diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/ApiGatewayApplication.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/ApiGatewayApplication.java index b9e3e506d..b00c90ab1 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/ApiGatewayApplication.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/ApiGatewayApplication.java @@ -15,19 +15,26 @@ */ package org.springframework.samples.petclinic.api; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; -import org.springframework.cloud.netflix.zuul.EnableZuulProxy; import org.springframework.context.annotation.Bean; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import org.springframework.http.MediaType; import org.springframework.web.client.RestTemplate; +import org.springframework.web.reactive.function.server.RequestPredicates; +import org.springframework.web.reactive.function.server.RouterFunction; +import org.springframework.web.reactive.function.server.RouterFunctions; +import org.springframework.web.reactive.function.server.ServerResponse; + /** * @author Maciej Szarlinski */ -@EnableZuulProxy @EnableDiscoveryClient @EnableCircuitBreaker @SpringBootApplication @@ -42,4 +49,19 @@ public static void main(String[] args) { RestTemplate loadBalancedRestTemplate() { return new RestTemplate(); } + + @Value("classpath:/static/index.html") + private Resource indexHtml; + + /** + * workaround solution for forwarding to index.html + * @see #9785 + */ + @Bean + RouterFunction routerFunction() { + RouterFunction router = RouterFunctions.resources("/**", new ClassPathResource("static/")) + .andRoute(RequestPredicates.GET("/"), + request -> ServerResponse.ok().contentType(MediaType.TEXT_HTML).syncBody(indexHtml)); + return router; + } } diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayController.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayController.java index 9d9828c8c..84232606a 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayController.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayController.java @@ -25,6 +25,7 @@ import org.springframework.samples.petclinic.api.dto.VisitDetails; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -35,6 +36,7 @@ */ @RestController @RequiredArgsConstructor +@RequestMapping("/api/gateway") public class ApiGatewayController { private final CustomersServiceClient customersServiceClient; diff --git a/spring-petclinic-api-gateway/src/main/resources/application.yml b/spring-petclinic-api-gateway/src/main/resources/application.yml index e7de112c9..44fb87003 100644 --- a/spring-petclinic-api-gateway/src/main/resources/application.yml +++ b/spring-petclinic-api-gateway/src/main/resources/application.yml @@ -1,8 +1,22 @@ -zuul: - prefix: /api - ignoredServices: '*' - routes: - vets-service: /vet/** - visits-service: /visit/** - customers-service: /customer/** - api-gateway: /gateway/** +spring: + cloud: + gateway: + routes: + - id: vets-service + uri: lb://vets-service + predicates: + - Path=/api/vet/** + filters: + - StripPrefix=2 + - id: visits-service + uri: lb://visits-service + predicates: + - Path=/api/visit/** + filters: + - StripPrefix=2 + - id: customers-service + uri: lb://customers-service + predicates: + - Path=/api/customer/** + filters: + - StripPrefix=2 From 7311fca512a16e4274c2c1eb8f73b3980149558e Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Wed, 8 May 2019 19:14:26 +0200 Subject: [PATCH 03/16] Netflix Zuul replaced by Spring Cloud Gateway #117 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fbbede766..fd378e5d4 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ In order to start entire infrastructure using Docker, you have to build images b from a project root. Once images are ready, you can start them with a single command `docker-compose up`. Containers startup order is coordinated with [`dockerize` script](https://github.com/jwilder/dockerize). After starting services it takes a while for API Gateway to be in sync with service registry, -so don't be scared of initial Zuul timeouts. You can track services availability using Eureka dashboard +so don't be scared of initial Spring Cloud Gateway timeouts. You can track services availability using Eureka dashboard available by default at http://localhost:8761. The `master` branch uses an Alpine linux with JRE 8 as Docker base. You will find a Java 11 version in the `release/java11` branch. @@ -129,7 +129,7 @@ All those three REST controllers `OwnerResource`, `PetResource` and `VisitResour |---------------------------------|------------| | Configuration server | [Config server properties](spring-petclinic-config-server/src/main/resources/application.yml) and [Configuration repository] | | Service Discovery | [Eureka server](spring-petclinic-discovery-server) and [Service discovery client](spring-petclinic-vets-service/src/main/java/org/springframework/samples/petclinic/vets/VetsServiceApplication.java) | -| API Gateway | [Zuul reverse proxy](spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/ApiGatewayApplication.java) and [Routing configuration](https://github.com/spring-petclinic/spring-petclinic-microservices-config/blob/master/api-gateway.yml) | +| API Gateway | [Spring Cloud Gateway starter](spring-petclinic-api-gateway/pom.xml) and [Routing configuration](/spring-petclinic-api-gateway/src/main/resources/application.yml) | | Docker Compose | [Spring Boot with Docker guide](https://spring.io/guides/gs/spring-boot-docker/) and [docker-compose file](docker-compose.yml) | | Circuit Breaker | [Hystrix fallback method](spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/VisitsServiceClient.java) | | Grafana / Prometheus Monitoring | [Micrometer implementation](https://micrometer.io/), [Spring Boot Actuator Production Ready Metrics] | From ee980cd9e037cb8516e7b894a19e83c8f8ca3d66 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Thu, 29 Aug 2019 15:36:00 +0200 Subject: [PATCH 04/16] Switch to openjdk8 Repair Travis build --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c0f28cfa4..9b16d5771 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,2 +1,2 @@ language: java -jdk: oraclejdk8 +jdk: openjdk8 From e34c1bc09d4bfc33f66218ce9ada00082d972e52 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Fri, 27 Sep 2019 18:19:29 +0200 Subject: [PATCH 05/16] Upgrade to Spring Cloud Hoxton.M2 and Spring Boot 2.2.0.M5 --- pom.xml | 26 ++++++++++++++----- .../customers/web/PetResourceTest.java | 2 +- .../visits/model/VisitRepository.java | 3 ++- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 38fe5a9fe..9392166da 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 2.1.4.RELEASE + 2.2.0.M5 org.springframework.samples @@ -30,8 +30,8 @@ 1.8 3.11.1 - 2.1.2.RELEASE - Greenwich.SR1 + 2.2.0.M5 + Hoxton.M2 2.22.0 @@ -177,10 +177,24 @@ - repository.spring.milestone - Spring Milestone Repository - http://repo.spring.io/milestone + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + diff --git a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/PetResourceTest.java b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/PetResourceTest.java index 04a6e0079..0bd2abb38 100644 --- a/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/PetResourceTest.java +++ b/spring-petclinic-customers-service/src/test/java/org/springframework/samples/petclinic/customers/web/PetResourceTest.java @@ -51,7 +51,7 @@ void shouldGetAPetInJSonFormat() throws Exception { mvc.perform(get("/owners/2/pets/2").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) - .andExpect(content().contentType("application/json;charset=UTF-8")) + .andExpect(content().contentType("application/json")) .andExpect(jsonPath("$.id").value(2)) .andExpect(jsonPath("$.name").value("Basil")) .andExpect(jsonPath("$.type.id").value(6)); diff --git a/spring-petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/model/VisitRepository.java b/spring-petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/model/VisitRepository.java index b4f8689be..063b3d270 100644 --- a/spring-petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/model/VisitRepository.java +++ b/spring-petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/model/VisitRepository.java @@ -15,6 +15,7 @@ */ package org.springframework.samples.petclinic.visits.model; +import java.util.Collection; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; @@ -33,5 +34,5 @@ public interface VisitRepository extends JpaRepository { List findByPetId(int petId); - List findByPetIdIn(Iterable petIds); + List findByPetIdIn(Collection petIds); } From 70dedf8f527b470c243f60893742202ab004b3b2 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Thu, 31 Oct 2019 17:30:14 +0100 Subject: [PATCH 06/16] Upgrade to Spring Cloud Hoxton.M3 and Spring Boot 2.2.0.RC1 --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 9392166da..ddca46be5 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 2.2.0.M5 + 2.2.0.RC1 org.springframework.samples @@ -30,8 +30,8 @@ 1.8 3.11.1 - 2.2.0.M5 - Hoxton.M2 + 2.2.0.RC1 + Hoxton.M3 2.22.0 From 15947faca1147f419c27a1a966bf02b7ebecd7cb Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Fri, 1 Nov 2019 17:16:44 +0100 Subject: [PATCH 07/16] Upgrade to Spring Cloud Hoxton.RC1 and Spring Boot 2.2.0.RELEASE --- pom.xml | 8 ++++---- spring-petclinic-admin-server/pom.xml | 2 +- spring-petclinic-api-gateway/pom.xml | 2 +- spring-petclinic-config-server/pom.xml | 2 +- spring-petclinic-customers-service/pom.xml | 2 +- spring-petclinic-discovery-server/pom.xml | 2 +- spring-petclinic-hystrix-dashboard/pom.xml | 2 +- spring-petclinic-vets-service/pom.xml | 2 +- spring-petclinic-visits-service/pom.xml | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index ddca46be5..157d238d6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,12 +6,12 @@ org.springframework.boot spring-boot-starter-parent - 2.2.0.RC1 + 2.2.0.RELEASE org.springframework.samples spring-petclinic-microservices - 2.1.4 + 2.2.0 ${project.artifactId} pom @@ -30,8 +30,8 @@ 1.8 3.11.1 - 2.2.0.RC1 - Hoxton.M3 + 2.2.0.RELEASE + Hoxton.RC1 2.22.0 diff --git a/spring-petclinic-admin-server/pom.xml b/spring-petclinic-admin-server/pom.xml index d27aa29af..c65084aab 100644 --- a/spring-petclinic-admin-server/pom.xml +++ b/spring-petclinic-admin-server/pom.xml @@ -12,7 +12,7 @@ org.springframework.samples spring-petclinic-microservices - 2.1.4 + 2.2.0 diff --git a/spring-petclinic-api-gateway/pom.xml b/spring-petclinic-api-gateway/pom.xml index be54a5828..cd9b4d7bf 100644 --- a/spring-petclinic-api-gateway/pom.xml +++ b/spring-petclinic-api-gateway/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.1.4 + 2.2.0 diff --git a/spring-petclinic-config-server/pom.xml b/spring-petclinic-config-server/pom.xml index 07fdca5ec..0572ef83f 100644 --- a/spring-petclinic-config-server/pom.xml +++ b/spring-petclinic-config-server/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.1.4 + 2.2.0 diff --git a/spring-petclinic-customers-service/pom.xml b/spring-petclinic-customers-service/pom.xml index 2d2015492..4afa10a3b 100644 --- a/spring-petclinic-customers-service/pom.xml +++ b/spring-petclinic-customers-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.1.4 + 2.2.0 diff --git a/spring-petclinic-discovery-server/pom.xml b/spring-petclinic-discovery-server/pom.xml index 81e866a87..2b1b10011 100644 --- a/spring-petclinic-discovery-server/pom.xml +++ b/spring-petclinic-discovery-server/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.1.4 + 2.2.0 diff --git a/spring-petclinic-hystrix-dashboard/pom.xml b/spring-petclinic-hystrix-dashboard/pom.xml index c6c55f5da..e9a43259c 100644 --- a/spring-petclinic-hystrix-dashboard/pom.xml +++ b/spring-petclinic-hystrix-dashboard/pom.xml @@ -5,7 +5,7 @@ spring-petclinic-microservices org.springframework.samples - 2.1.4 + 2.2.0 4.0.0 diff --git a/spring-petclinic-vets-service/pom.xml b/spring-petclinic-vets-service/pom.xml index cfa9ae945..c74dc0cbb 100644 --- a/spring-petclinic-vets-service/pom.xml +++ b/spring-petclinic-vets-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.1.4 + 2.2.0 diff --git a/spring-petclinic-visits-service/pom.xml b/spring-petclinic-visits-service/pom.xml index f9b213454..194698b1a 100644 --- a/spring-petclinic-visits-service/pom.xml +++ b/spring-petclinic-visits-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.1.4 + 2.2.0 From b88129874c58634eb7e2739b2ad49f95e9a644aa Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Fri, 1 Nov 2019 17:33:28 +0100 Subject: [PATCH 08/16] Version Control Backend Filesystem Use --- spring-petclinic-config-server/src/main/resources/bootstrap.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-petclinic-config-server/src/main/resources/bootstrap.yml b/spring-petclinic-config-server/src/main/resources/bootstrap.yml index 6f4cfda69..fdaf2070b 100644 --- a/spring-petclinic-config-server/src/main/resources/bootstrap.yml +++ b/spring-petclinic-config-server/src/main/resources/bootstrap.yml @@ -12,4 +12,4 @@ spring: config: server: git: - uri: file:///${GIT_REPO} + basedir: file:///${GIT_REPO} From 024568aa72ef0cf210eb8ddd7ad713fe61e1c82c Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Sat, 2 Nov 2019 16:37:01 +0100 Subject: [PATCH 09/16] Use the existing native profile --- README.md | 4 ++-- .../src/main/resources/bootstrap.yml | 12 ++++-------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index fd378e5d4..e2774f065 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,9 @@ the URL for an event stream to monitor, for example the `api-gateway` service ru or running into docker: `http://api-gateway:8080/actuator/hystrix.stream` -You can tell Config Server to use your local Git repository by using `local` Spring profile and setting +You can tell Config Server to use your local Git repository by using `native` Spring profile and setting `GIT_REPO` environment variable, for example: -`-Dspring.profiles.active=local -DGIT_REPO=/projects/spring-petclinic-microservices-config` +`-Dspring.profiles.active=native -DGIT_REPO=/projects/spring-petclinic-microservices-config` ## Starting services locally with docker-compose In order to start entire infrastructure using Docker, you have to build images by executing `./mvnw clean install -PbuildDocker` diff --git a/spring-petclinic-config-server/src/main/resources/bootstrap.yml b/spring-petclinic-config-server/src/main/resources/bootstrap.yml index fdaf2070b..43e3e9906 100644 --- a/spring-petclinic-config-server/src/main/resources/bootstrap.yml +++ b/spring-petclinic-config-server/src/main/resources/bootstrap.yml @@ -5,11 +5,7 @@ spring: server: git: uri: https://github.com/spring-petclinic/spring-petclinic-microservices-config ---- -spring: - profiles: local - cloud: - config: - server: - git: - basedir: file:///${GIT_REPO} + # Use the File System Backend to avoid git pulling. Enable "native" profile in the Config Server. + native: + searchLocations: file:///${GIT_REPO} + From 8d90f5626c9de80d2210d9d9714da12e6f66dfac Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Wed, 13 Nov 2019 18:57:46 +0100 Subject: [PATCH 10/16] Use the bodyValue() method instead of the deprecated syncBody() --- .../samples/petclinic/api/ApiGatewayApplication.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/ApiGatewayApplication.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/ApiGatewayApplication.java index b00c90ab1..3ab2eafc0 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/ApiGatewayApplication.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/ApiGatewayApplication.java @@ -61,7 +61,7 @@ RestTemplate loadBalancedRestTemplate() { RouterFunction routerFunction() { RouterFunction router = RouterFunctions.resources("/**", new ClassPathResource("static/")) .andRoute(RequestPredicates.GET("/"), - request -> ServerResponse.ok().contentType(MediaType.TEXT_HTML).syncBody(indexHtml)); + request -> ServerResponse.ok().contentType(MediaType.TEXT_HTML).bodyValue(indexHtml)); return router; } } From eea1e9c0e46984cbea37f8ec4e00b4d03cebbe16 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Wed, 13 Nov 2019 18:31:52 +0100 Subject: [PATCH 11/16] Replace Ribbon by spring-cloud-reactive-loadbalancer and Webflux WebClient --- spring-petclinic-api-gateway/pom.xml | 29 ++++++ .../petclinic/api/ApiGatewayApplication.java | 7 ++ .../application/CustomersServiceClient.java | 11 ++- .../api/application/VisitsServiceClient.java | 41 +++++---- .../boundary/web/ApiGatewayController.java | 36 +++++--- .../src/main/resources/application.yml | 3 + .../VisitsServiceClientIntegrationTest.java | 91 +++++++++++++++++++ .../application/VisitsServiceClientTest.java | 75 --------------- 8 files changed, 181 insertions(+), 112 deletions(-) create mode 100644 spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/application/VisitsServiceClientIntegrationTest.java delete mode 100644 spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/application/VisitsServiceClientTest.java diff --git a/spring-petclinic-api-gateway/pom.xml b/spring-petclinic-api-gateway/pom.xml index cd9b4d7bf..f785980d6 100644 --- a/spring-petclinic-api-gateway/pom.xml +++ b/spring-petclinic-api-gateway/pom.xml @@ -49,6 +49,10 @@ + + org.springframework.cloud + spring-cloud-starter-loadbalancer + org.springframework.cloud spring-cloud-sleuth-zipkin @@ -60,6 +64,20 @@ org.springframework.cloud spring-cloud-starter-netflix-eureka-client + + + org.springframework.cloud + spring-cloud-starter-netflix-ribbon + + + org.springframework.cloud + spring-cloud-netflix-ribbon + + + com.netflix.ribbon + ribbon-eureka + + org.springframework.cloud @@ -72,6 +90,12 @@ org.springframework.cloud spring-cloud-starter-netflix-hystrix + + + org.springframework.cloud + spring-cloud-netflix-ribbon + + @@ -125,6 +149,11 @@ junit-jupiter-engine test + + com.squareup.okhttp3 + mockwebserver + test + diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/ApiGatewayApplication.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/ApiGatewayApplication.java index 3ab2eafc0..1add5f1d8 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/ApiGatewayApplication.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/ApiGatewayApplication.java @@ -26,6 +26,7 @@ import org.springframework.core.io.Resource; import org.springframework.http.MediaType; import org.springframework.web.client.RestTemplate; +import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.server.RequestPredicates; import org.springframework.web.reactive.function.server.RouterFunction; import org.springframework.web.reactive.function.server.RouterFunctions; @@ -50,6 +51,12 @@ RestTemplate loadBalancedRestTemplate() { return new RestTemplate(); } + @Bean + @LoadBalanced + public WebClient.Builder loadBalancedWebClientBuilder() { + return WebClient.builder(); + } + @Value("classpath:/static/index.html") private Resource indexHtml; diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/CustomersServiceClient.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/CustomersServiceClient.java index 2aaa6c674..0cb31c9b1 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/CustomersServiceClient.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/CustomersServiceClient.java @@ -19,6 +19,8 @@ import org.springframework.samples.petclinic.api.dto.OwnerDetails; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; /** * @author Maciej Szarlinski @@ -27,9 +29,12 @@ @RequiredArgsConstructor public class CustomersServiceClient { - private final RestTemplate loadBalancedRestTemplate; + private final WebClient.Builder webClientBuilder; - public OwnerDetails getOwner(final int ownerId) { - return loadBalancedRestTemplate.getForObject("http://customers-service/owners/{ownerId}", OwnerDetails.class, ownerId); + public Mono getOwner(final int ownerId) { + return webClientBuilder.build().get() + .uri("http://customers-service/owners/{ownerId}", ownerId) + .retrieve() + .bodyToMono(OwnerDetails.class); } } diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/VisitsServiceClient.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/VisitsServiceClient.java index 97a6af97d..62de65341 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/VisitsServiceClient.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/VisitsServiceClient.java @@ -15,22 +15,18 @@ */ package org.springframework.samples.petclinic.api.application; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import lombok.RequiredArgsConstructor; import org.springframework.samples.petclinic.api.dto.VisitDetails; import org.springframework.samples.petclinic.api.dto.Visits; import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponentsBuilder; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; +import java.util.Collections; +import java.util.List; +import java.util.Map; -import static java.util.stream.Collectors.groupingBy; import static java.util.stream.Collectors.joining; -import static org.springframework.web.util.UriComponentsBuilder.fromHttpUrl; /** * @author Maciej Szarlinski @@ -39,24 +35,29 @@ @RequiredArgsConstructor public class VisitsServiceClient { - private final RestTemplate loadBalancedRestTemplate; + // Could be changed for testing purpose + private String hostname = "http://visits-service/"; - @HystrixCommand(fallbackMethod = "emptyVisitsForPets") - public Map> getVisitsForPets(final List petIds) { - UriComponentsBuilder builder = fromHttpUrl("http://visits-service/pets/visits") - .queryParam("petId", joinIds(petIds)); + private final WebClient.Builder webClientBuilder; - return loadBalancedRestTemplate.getForObject(builder.toUriString(), Visits.class) - .getItems() - .stream() - .collect(groupingBy(VisitDetails::getPetId)); + // FIXME HYSTRIX @HystrixCommand(fallbackMethod = "emptyVisitsForPets") + public Mono getVisitsForPets(final List petIds) { + return webClientBuilder.build() + .get() + .uri(hostname + "pets/visits?petId={petId}", joinIds(petIds)) + .retrieve() + .bodyToMono(Visits.class); } private String joinIds(List petIds) { return petIds.stream().map(Object::toString).collect(joining(",")); } - private Map> emptyVisitsForPets(List petIds) { - return Collections.emptyMap(); + private Mono>> emptyVisitsForPets(Mono> petIds) { + return Mono.just(Collections.emptyMap()); + } + + public void setHostname(String hostname) { + this.hostname = hostname; } } diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayController.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayController.java index 84232606a..6bc09a73b 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayController.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/boundary/web/ApiGatewayController.java @@ -15,21 +15,19 @@ */ package org.springframework.samples.petclinic.api.boundary.web; -import java.util.List; -import java.util.Map; -import java.util.Optional; import lombok.RequiredArgsConstructor; import org.springframework.samples.petclinic.api.application.CustomersServiceClient; -import org.springframework.samples.petclinic.api.dto.OwnerDetails; import org.springframework.samples.petclinic.api.application.VisitsServiceClient; -import org.springframework.samples.petclinic.api.dto.VisitDetails; +import org.springframework.samples.petclinic.api.dto.OwnerDetails; +import org.springframework.samples.petclinic.api.dto.Visits; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import reactor.core.publisher.Mono; - -import static java.util.Collections.emptyList; +import java.util.function.Function; +import java.util.stream.Collectors; /** * @author Maciej Szarlinski @@ -44,14 +42,24 @@ public class ApiGatewayController { private final VisitsServiceClient visitsServiceClient; @GetMapping(value = "owners/{ownerId}") - public OwnerDetails getOwnerDetails(final @PathVariable int ownerId) { - final OwnerDetails owner = customersServiceClient.getOwner(ownerId); - supplyVisits(owner, visitsServiceClient.getVisitsForPets(owner.getPetIds())); - return owner; + public Mono getOwnerDetails(final @PathVariable int ownerId) { + return customersServiceClient.getOwner(ownerId) + .flatMap(owner -> + visitsServiceClient.getVisitsForPets(owner.getPetIds()) + .map(addVisitsToOwner(owner)) + ); + } - private void supplyVisits(final OwnerDetails owner, final Map> visitsMapping) { - owner.getPets().forEach(pet -> - pet.getVisits().addAll(Optional.ofNullable(visitsMapping.get(pet.getId())).orElse(emptyList()))); + private Function addVisitsToOwner(OwnerDetails owner) { + return visits -> { + owner.getPets() + .forEach(pet -> pet.getVisits() + .addAll(visits.getItems().stream() + .filter(v -> v.getPetId() == pet.getId()) + .collect(Collectors.toList())) + ); + return owner; + }; } } diff --git a/spring-petclinic-api-gateway/src/main/resources/application.yml b/spring-petclinic-api-gateway/src/main/resources/application.yml index 44fb87003..74da17a05 100644 --- a/spring-petclinic-api-gateway/src/main/resources/application.yml +++ b/spring-petclinic-api-gateway/src/main/resources/application.yml @@ -1,5 +1,8 @@ spring: cloud: + loadbalancer: + ribbon: + enabled: false gateway: routes: - id: vets-service diff --git a/spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/application/VisitsServiceClientIntegrationTest.java b/spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/application/VisitsServiceClientIntegrationTest.java new file mode 100644 index 000000000..95181f296 --- /dev/null +++ b/spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/application/VisitsServiceClientIntegrationTest.java @@ -0,0 +1,91 @@ +package org.springframework.samples.petclinic.api.application; + +import okhttp3.mockwebserver.MockResponse; +import okhttp3.mockwebserver.MockWebServer; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.http.MediaType; +import org.springframework.samples.petclinic.api.dto.VisitDetails; +import org.springframework.samples.petclinic.api.dto.Visits; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; +import org.springframework.test.web.client.MockRestServiceServer; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; + +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo; +import static org.springframework.test.web.client.response.MockRestResponseCreators.withServerError; +import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess; + +class VisitsServiceClientIntegrationTest { + + private static final Integer PET_ID = 1; + + private VisitsServiceClient visitsServiceClient; + + private MockWebServer server; + + @BeforeEach + void setUp() { + server = new MockWebServer(); + visitsServiceClient = new VisitsServiceClient(WebClient.builder()); + visitsServiceClient.setHostname(server.url("/").toString()); + } + + @AfterEach + void shutdown() throws IOException { + this.server.shutdown(); + } + + @Test + void getVisitsForPets_withAvailableVisitsService() { + prepareResponse(response -> response + .setHeader("Content-Type", "application/json") + .setBody("{\"items\":[{\"id\":5,\"date\":\"2018-11-15\",\"description\":\"test visit\",\"petId\":1}]}")); + + Mono visits = visitsServiceClient.getVisitsForPets(Collections.singletonList(1)); + + assertVisitDescriptionEquals(visits.block(), PET_ID,"test visit"); + } + + /** + * Test Hystrix fallback method + */ +// @Test +// public void getVisitsForPets_withServerError() { +// +// mockServer.expect(requestTo("http://visits-service/pets/visits?petId=1")) +// .andRespond(withServerError()); +// +// Map> visits = null; +// visitsServiceClient.getVisitsForPets(Mono.just(Collections.singletonList(1))); +// +// assertEquals(0, visits.size()); +// } + + private void assertVisitDescriptionEquals(Visits visits, int petId, String description) { + assertEquals(1, visits.getItems().size()); + assertNotNull(visits.getItems().get(0)); + assertEquals(petId, visits.getItems().get(0).getPetId()); + assertEquals(description, visits.getItems().get(0).getDescription()); + } + + private void prepareResponse(Consumer consumer) { + MockResponse response = new MockResponse(); + consumer.accept(response); + this.server.enqueue(response); + } + +} diff --git a/spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/application/VisitsServiceClientTest.java b/spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/application/VisitsServiceClientTest.java deleted file mode 100644 index 465ab7b74..000000000 --- a/spring-petclinic-api-gateway/src/test/java/org/springframework/samples/petclinic/api/application/VisitsServiceClientTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.springframework.samples.petclinic.api.application; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; -import org.springframework.context.annotation.EnableAspectJAutoProxy; -import org.springframework.http.MediaType; -import org.springframework.samples.petclinic.api.dto.VisitDetails; -import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; -import org.springframework.test.web.client.MockRestServiceServer; -import org.springframework.web.client.RestTemplate; - -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo; -import static org.springframework.test.web.client.response.MockRestResponseCreators.withServerError; -import static org.springframework.test.web.client.response.MockRestResponseCreators.withSuccess; - -@EnableCircuitBreaker -@EnableAspectJAutoProxy -@SpringJUnitConfig(classes = {VisitsServiceClient.class, RestTemplate.class}) -class VisitsServiceClientTest { - - private static final Integer PET_ID = 1; - - @Autowired - private VisitsServiceClient visitsServiceClient; - - @Autowired - private RestTemplate restTemplate; - - private MockRestServiceServer mockServer; - - @BeforeEach - public void setUp() { - mockServer = MockRestServiceServer.createServer(restTemplate); - } - - @Test - public void getVisitsForPets_withAvailableVisitsService() { - mockServer.expect(requestTo("http://visits-service/pets/visits?petId=1")) - .andRespond(withSuccess("{\"items\":[{\"id\":5,\"date\":\"2018-11-15\",\"description\":\"test visit\",\"petId\":1}]}", MediaType.APPLICATION_JSON)); - - Map> visits = visitsServiceClient.getVisitsForPets(Collections.singletonList(1)); - - assertVisitDescriptionEquals(visits, PET_ID,"test visit"); - } - - /** - * Test Hystrix fallback method - */ - @Test - public void getVisitsForPets_withServerError() { - - mockServer.expect(requestTo("http://visits-service/pets/visits?petId=1")) - .andRespond(withServerError()); - - Map> visits = visitsServiceClient.getVisitsForPets(Collections.singletonList(1)); - - assertEquals(0, visits.size()); - } - - private void assertVisitDescriptionEquals(Map> visits, int petId, String description) { - assertEquals(1, visits.size()); - assertNotNull(visits.get(1)); - assertEquals(1, visits.get(petId).size()); - assertEquals(description, visits.get(petId).get(0).getDescription()); - } - -} From 393187f948dd62ef0ed40e3ecbbbeac084214af1 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Fri, 15 Nov 2019 08:31:51 +0100 Subject: [PATCH 12/16] Upgrade to Spring Cloud Hoxton.RC2 and Spring Boot 2.2.1.RELEASE Remove spring-cloud-starter-loadbalancer dependency already included by spring-cloud-starter-netflix-eureka-client --- pom.xml | 6 +++--- spring-petclinic-admin-server/pom.xml | 2 +- spring-petclinic-api-gateway/pom.xml | 6 +----- .../api/application/VisitsServiceClient.java | 2 +- .../VisitsServiceClientIntegrationTest.java | 13 ------------- spring-petclinic-config-server/pom.xml | 2 +- spring-petclinic-customers-service/pom.xml | 2 +- spring-petclinic-discovery-server/pom.xml | 2 +- spring-petclinic-hystrix-dashboard/pom.xml | 2 +- spring-petclinic-vets-service/pom.xml | 2 +- spring-petclinic-visits-service/pom.xml | 2 +- 11 files changed, 12 insertions(+), 29 deletions(-) diff --git a/pom.xml b/pom.xml index 157d238d6..cd85814de 100644 --- a/pom.xml +++ b/pom.xml @@ -6,12 +6,12 @@ org.springframework.boot spring-boot-starter-parent - 2.2.0.RELEASE + 2.2.1.RELEASE org.springframework.samples spring-petclinic-microservices - 2.2.0 + 2.2.1 ${project.artifactId} pom @@ -31,7 +31,7 @@ 3.11.1 2.2.0.RELEASE - Hoxton.RC1 + Hoxton.RC2 2.22.0 diff --git a/spring-petclinic-admin-server/pom.xml b/spring-petclinic-admin-server/pom.xml index c65084aab..0f9c746d2 100644 --- a/spring-petclinic-admin-server/pom.xml +++ b/spring-petclinic-admin-server/pom.xml @@ -12,7 +12,7 @@ org.springframework.samples spring-petclinic-microservices - 2.2.0 + 2.2.1 diff --git a/spring-petclinic-api-gateway/pom.xml b/spring-petclinic-api-gateway/pom.xml index f785980d6..7b66f6c21 100644 --- a/spring-petclinic-api-gateway/pom.xml +++ b/spring-petclinic-api-gateway/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.2.0 + 2.2.1 @@ -49,10 +49,6 @@ - - org.springframework.cloud - spring-cloud-starter-loadbalancer - org.springframework.cloud spring-cloud-sleuth-zipkin diff --git a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/VisitsServiceClient.java b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/VisitsServiceClient.java index 62de65341..8f9c392a9 100644 --- a/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/VisitsServiceClient.java +++ b/spring-petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/application/VisitsServiceClient.java @@ -57,7 +57,7 @@ private Mono>> emptyVisitsForPets(Mono org.springframework.samples spring-petclinic-microservices - 2.2.0 + 2.2.1 diff --git a/spring-petclinic-customers-service/pom.xml b/spring-petclinic-customers-service/pom.xml index 4afa10a3b..b10c75e53 100644 --- a/spring-petclinic-customers-service/pom.xml +++ b/spring-petclinic-customers-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.2.0 + 2.2.1 diff --git a/spring-petclinic-discovery-server/pom.xml b/spring-petclinic-discovery-server/pom.xml index 2b1b10011..c4f69924a 100644 --- a/spring-petclinic-discovery-server/pom.xml +++ b/spring-petclinic-discovery-server/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.2.0 + 2.2.1 diff --git a/spring-petclinic-hystrix-dashboard/pom.xml b/spring-petclinic-hystrix-dashboard/pom.xml index e9a43259c..c6a4eb486 100644 --- a/spring-petclinic-hystrix-dashboard/pom.xml +++ b/spring-petclinic-hystrix-dashboard/pom.xml @@ -5,7 +5,7 @@ spring-petclinic-microservices org.springframework.samples - 2.2.0 + 2.2.1 4.0.0 diff --git a/spring-petclinic-vets-service/pom.xml b/spring-petclinic-vets-service/pom.xml index c74dc0cbb..fb3f6fd93 100644 --- a/spring-petclinic-vets-service/pom.xml +++ b/spring-petclinic-vets-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.2.0 + 2.2.1 diff --git a/spring-petclinic-visits-service/pom.xml b/spring-petclinic-visits-service/pom.xml index 194698b1a..2316f8cbc 100644 --- a/spring-petclinic-visits-service/pom.xml +++ b/spring-petclinic-visits-service/pom.xml @@ -11,7 +11,7 @@ org.springframework.samples spring-petclinic-microservices - 2.2.0 + 2.2.1 From 210b43fa6eef18015cec9e62918eab754bd93c78 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Sat, 14 Mar 2020 19:19:10 +0100 Subject: [PATCH 13/16] Upgrade to Spring Boot Admin 2.2.2 --- spring-petclinic-admin-server/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-petclinic-admin-server/pom.xml b/spring-petclinic-admin-server/pom.xml index 0f9c746d2..5554d0d53 100644 --- a/spring-petclinic-admin-server/pom.xml +++ b/spring-petclinic-admin-server/pom.xml @@ -16,7 +16,7 @@ - 2.1.2 + 2.2.2 9090 ${basedir}/../docker From fbe8e6714c62e147a57f39e70fc9f57376ad2d02 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Sat, 14 Mar 2020 19:19:26 +0100 Subject: [PATCH 14/16] Copyright 2002-2020 --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index acb9205e6..91ef974e0 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright 2002-2017 the original author or authors. +Copyright 2002-2020 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. From 6564aeca4bce06562d5771515db19e96f40375e1 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Sat, 14 Mar 2020 19:19:57 +0100 Subject: [PATCH 15/16] Upgrade to Spring Cloud Hoxton.RELEASE and Spring Boot 2.2.1.RELEASE --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 33d6a39e3..e5ae50834 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 2.2.1.RELEASE + 2.2.5.RELEASE org.springframework.samples @@ -29,8 +29,8 @@ 1.8 3.11.1 - 2.2.0.RELEASE - Hoxton.RC2 + 2.2.1.RELEASE + Hoxton.RELEASE 2.22.0 From 8218b2f1a6fd0dbd44374b51be76591803bbbee9 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Sat, 14 Mar 2020 19:25:20 +0100 Subject: [PATCH 16/16] Rollback spring-boot-starter-parent to 2.2.1.RELEASE --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e5ae50834..e4d7f0f6d 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 2.2.5.RELEASE + 2.2.1.RELEASE org.springframework.samples