From 51965c1ecc66c699ad72eb5e03ec370089246090 Mon Sep 17 00:00:00 2001 From: TomVerkon Date: Thu, 22 Dec 2022 15:28:28 -0500 Subject: [PATCH 01/17] Update Logback Article Added logbak-core-1.3.5 to pom Updated logback.version to 1.3.5 Added slf4j - 2.0.4 to pom Updated javax.mail from 1.4.7 to javax.mail-api 1.6.2 Updated javax.activation to javax.activation-api 1.2.0 Ran both mvn clean verify and mvn exec:java -Dexec.mainClass="com.baeldung.logback.Example" without errors --- logging-modules/logback/pom.xml | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/logging-modules/logback/pom.xml b/logging-modules/logback/pom.xml index ab778e954e..76aeea447d 100644 --- a/logging-modules/logback/pom.xml +++ b/logging-modules/logback/pom.xml @@ -24,6 +24,11 @@ logback-classic ${logback.version} + + ch.qos.logback + logback-core + ${logback.version} + ch.qos.logback.contrib logback-json-classic @@ -34,6 +39,11 @@ logback-jackson ${logback.contrib.version} + + org.slf4j + slf4j-api + ${slf4j.version} + com.fasterxml.jackson.core jackson-databind @@ -56,15 +66,16 @@ javax.mail - mail - ${javax.mail.version} + javax.mail-api + ${javax.mail.version} javax.activation - activation + javax.activation-api ${javax.activation.version} runtime + @@ -106,8 +117,10 @@ 20180130 0.1.5 3.3.5 - 1.4.7 - 1.1.1 + 1.6.2 + 1.2.0 + 1.3.5 + 2.0.4 \ No newline at end of file From 866b46690b0922672b70660d4a61f08e9cfaefba Mon Sep 17 00:00:00 2001 From: TomVerkon Date: Fri, 23 Dec 2022 15:46:05 -0500 Subject: [PATCH 02/17] Updated versions to jakarta namespace --- logging-modules/logback/pom.xml | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/logging-modules/logback/pom.xml b/logging-modules/logback/pom.xml index 76aeea447d..b3d7b7b4dc 100644 --- a/logging-modules/logback/pom.xml +++ b/logging-modules/logback/pom.xml @@ -65,17 +65,15 @@ - javax.mail - javax.mail-api - ${javax.mail.version} + com.sun.mail + jakarta.mail + ${jakarta.mail.version} - javax.activation - javax.activation-api - ${javax.activation.version} - runtime + com.sun.activation + jakarta.activation + ${jakarta.activation.version} - @@ -117,10 +115,10 @@ 20180130 0.1.5 3.3.5 - 1.6.2 - 1.2.0 - 1.3.5 - 2.0.4 + 2.0.1 + 2.0.1 + 1.4.5 + 2.0.6 \ No newline at end of file From ecc8b269c10e8b019fd3c84e5aebcbb4e2b4cdf9 Mon Sep 17 00:00:00 2001 From: TomVerkon Date: Fri, 23 Dec 2022 20:52:59 -0500 Subject: [PATCH 03/17] updated logback libraries; Added logback-core version 1.3.5 to pom Added slf4j version 2.0.4 to pom Updated javax.mail version to 1.6.2. Namespace changed to com.sun.mail Updated javax.activation to version 1.6.2 All changes had to be compatible with jdk 1.8 --- logging-modules/logback/pom.xml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/logging-modules/logback/pom.xml b/logging-modules/logback/pom.xml index b3d7b7b4dc..937a88da09 100644 --- a/logging-modules/logback/pom.xml +++ b/logging-modules/logback/pom.xml @@ -66,13 +66,14 @@ com.sun.mail - jakarta.mail - ${jakarta.mail.version} + javax.mail + ${javax.mail.version} - com.sun.activation - jakarta.activation - ${jakarta.activation.version} + javax.activation + javax.activation-api + ${javax.activation.version} + runtime @@ -115,10 +116,10 @@ 20180130 0.1.5 3.3.5 - 2.0.1 - 2.0.1 - 1.4.5 - 2.0.6 + 1.6.2 + 1.2.0 + 1.3.5 + 2.0.4 \ No newline at end of file From 40249f907cdcf0362b1a280155a53930fcb7f021 Mon Sep 17 00:00:00 2001 From: Ralf Ueberfuhr <40685729+ueberfuhr@users.noreply.github.com> Date: Wed, 28 Dec 2022 21:47:49 +0100 Subject: [PATCH 04/17] BAEL-5867: Micrometer Observability API with Spring Boot 3 (#13180) * BAEL-5867: Create project and create first usage main method * BAEL-5867: Use Observation API in Boot * BAEL-5867: Refactoring and testing * BAEL-5867: Add tracing * BAEL-5867: Remove notes and add project as a module to the aggregator * BAEL-5867: Fix pmd rules violation --- pom.xml | 2 + .../spring-boot-3-observation/pom.xml | 66 +++++++++++++++++++ .../baeldung/samples/GreetingApplication.java | 13 ++++ .../samples/SimpleObservationApplication.java | 66 +++++++++++++++++++ .../samples/boundary/GreetingController.java | 26 ++++++++ .../ObservationFilterConfiguration.java | 22 +++++++ .../config/ObservationHandlerLogger.java | 28 ++++++++ ...ObservationTextPublisherConfiguration.java | 21 ++++++ .../config/ObservedAspectConfiguration.java | 20 ++++++ .../samples/config/SimpleLoggingHandler.java | 59 +++++++++++++++++ .../samples/domain/GreetingService.java | 14 ++++ .../src/main/resources/application.yml | 6 ++ .../config/SimpleLoggingHandlerUnitTest.java | 17 +++++ .../samples/domain/EnableTestObservation.java | 44 +++++++++++++ ...tingServiceObservationIntegrationTest.java | 35 ++++++++++ ...GreetingServiceTracingIntegrationTest.java | 42 ++++++++++++ 16 files changed, 481 insertions(+) create mode 100644 spring-boot-modules/spring-boot-3-observation/pom.xml create mode 100644 spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/GreetingApplication.java create mode 100644 spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/SimpleObservationApplication.java create mode 100644 spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/boundary/GreetingController.java create mode 100644 spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/boundary/ObservationFilterConfiguration.java create mode 100644 spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/ObservationHandlerLogger.java create mode 100644 spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/ObservationTextPublisherConfiguration.java create mode 100644 spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/ObservedAspectConfiguration.java create mode 100644 spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/SimpleLoggingHandler.java create mode 100644 spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/domain/GreetingService.java create mode 100644 spring-boot-modules/spring-boot-3-observation/src/main/resources/application.yml create mode 100644 spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/config/SimpleLoggingHandlerUnitTest.java create mode 100644 spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/domain/EnableTestObservation.java create mode 100644 spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/domain/GreetingServiceObservationIntegrationTest.java create mode 100644 spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/domain/GreetingServiceTracingIntegrationTest.java diff --git a/pom.xml b/pom.xml index a5bdd2cf4c..3d2863e1f2 100644 --- a/pom.xml +++ b/pom.xml @@ -1168,6 +1168,7 @@ spring-boot-modules/spring-boot-camel spring-boot-modules/spring-boot-3 spring-boot-modules/spring-boot-3-native + spring-boot-modules/spring-boot-3-observation spring-swagger-codegen/custom-validations-opeanpi-codegen testing-modules/testing-assertions persistence-modules/fauna @@ -1251,6 +1252,7 @@ spring-boot-modules/spring-boot-camel spring-boot-modules/spring-boot-3 spring-boot-modules/spring-boot-3-native + spring-boot-modules/spring-boot-3-observation spring-swagger-codegen/custom-validations-opeanpi-codegen testing-modules/testing-assertions persistence-modules/fauna diff --git a/spring-boot-modules/spring-boot-3-observation/pom.xml b/spring-boot-modules/spring-boot-3-observation/pom.xml new file mode 100644 index 0000000000..ed613ee98e --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + spring-boot-3-observation + 0.0.1-SNAPSHOT + spring-boot-3-observation + Demo project for Spring Boot 3 Observation + + + com.baeldung + parent-boot-3 + 0.0.1-SNAPSHOT + ../../parent-boot-3 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + io.micrometer + micrometer-tracing + + + io.micrometer + micrometer-tracing-bridge-brave + + + + io.micrometer + micrometer-observation-test + test + + + io.micrometer + micrometer-tracing-test + test + + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + + + diff --git a/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/GreetingApplication.java b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/GreetingApplication.java new file mode 100644 index 0000000000..f5014a8abd --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/GreetingApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.samples; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class GreetingApplication { + + public static void main(String[] args) { + SpringApplication.run(GreetingApplication.class, args); + } + +} diff --git a/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/SimpleObservationApplication.java b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/SimpleObservationApplication.java new file mode 100644 index 0000000000..4434535939 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/SimpleObservationApplication.java @@ -0,0 +1,66 @@ +package com.baeldung.samples; + +import io.micrometer.core.instrument.Measurement; +import io.micrometer.core.instrument.Statistic; +import io.micrometer.core.instrument.observation.DefaultMeterObservationHandler; +import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import io.micrometer.observation.Observation; +import io.micrometer.observation.ObservationRegistry; +import io.micrometer.observation.ObservationTextPublisher; + +import java.util.Optional; +import java.util.stream.StreamSupport; + +public class SimpleObservationApplication { + + // we can run this as a simple command line application + public static void main(String[] args) { + // create registry + final var observationRegistry = ObservationRegistry.create(); + // create meter registry and observation handler + final var meterRegistry = new SimpleMeterRegistry(); + final var meterObservationHandler = new DefaultMeterObservationHandler(meterRegistry); + // create simple logging observation handler + final var loggingObservationHandler = new ObservationTextPublisher(System.out::println); + // register observation handlers + observationRegistry + .observationConfig() + .observationHandler(meterObservationHandler) + .observationHandler(loggingObservationHandler); + // make an observation + Observation.Context context = new Observation.Context(); + String observationName = "obs1"; + Observation observation = Observation + .createNotStarted(observationName, () -> context, observationRegistry) + .lowCardinalityKeyValue("gender", "male") + .highCardinalityKeyValue("age", "41"); + + for (int i = 0; i < 10; i++) { + observation.observe(SimpleObservationApplication::doSomeAction); + } + + meterRegistry.getMeters().forEach(m -> { + System.out.println(m.getId() + "\n============"); + m.measure().forEach(ms -> System.out.println(ms.getValue() + " [" + ms.getStatistic() + "]")); + System.out.println("----------------------------"); + }); + Optional maximumDuration = meterRegistry.getMeters().stream() + .filter(m -> "obs1".equals(m.getId().getName())) + .flatMap(m -> StreamSupport.stream(m.measure().spliterator(), false)) + .filter(ms -> ms.getStatistic() == Statistic.MAX) + .findFirst() + .map(Measurement::getValue); + + System.out.println(maximumDuration); + } + + private static void doSomeAction() { + try { + Thread.sleep(Math.round(Math.random() * 1000)); + System.out.println("Hello World!"); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/boundary/GreetingController.java b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/boundary/GreetingController.java new file mode 100644 index 0000000000..bc179540f8 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/boundary/GreetingController.java @@ -0,0 +1,26 @@ +package com.baeldung.samples.boundary; + +import com.baeldung.samples.domain.GreetingService; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +@RequestMapping("/greet") +public class GreetingController { + + private final GreetingService service; + + public GreetingController(GreetingService service) { + this.service = service; + } + + @GetMapping(produces = MediaType.TEXT_PLAIN_VALUE) + @ResponseBody + public String sayHello() { + return this.service.sayHello(); + } + +} diff --git a/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/boundary/ObservationFilterConfiguration.java b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/boundary/ObservationFilterConfiguration.java new file mode 100644 index 0000000000..c39af961a1 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/boundary/ObservationFilterConfiguration.java @@ -0,0 +1,22 @@ +package com.baeldung.samples.boundary; + +import io.micrometer.observation.ObservationRegistry; +import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.filter.ServerHttpObservationFilter; + +@Configuration +public class ObservationFilterConfiguration { + + // if an ObservationRegistry is already configured + @ConditionalOnBean(ObservationRegistry.class) + // if we do not use Actuator + @ConditionalOnMissingBean(ServerHttpObservationFilter.class) + @Bean + public ServerHttpObservationFilter observationFilter(ObservationRegistry registry) { + return new ServerHttpObservationFilter(registry); + } + +} diff --git a/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/ObservationHandlerLogger.java b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/ObservationHandlerLogger.java new file mode 100644 index 0000000000..0a1f52f9c1 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/ObservationHandlerLogger.java @@ -0,0 +1,28 @@ +package com.baeldung.samples.config; + +import io.micrometer.observation.ObservationHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +@Component +public class ObservationHandlerLogger { + + private static final Logger log = LoggerFactory.getLogger(ObservationHandlerLogger.class); + + private static String toString(ObservationHandler handler) { + return handler.getClass().getName() + " [ " + handler + "]"; + } + + @EventListener(ContextRefreshedEvent.class) + public void logObservationHandlers(ContextRefreshedEvent evt) { + evt.getApplicationContext().getBeansOfType(ObservationHandler.class) + .values() + .stream() + .map(ObservationHandlerLogger::toString) + .forEach(log::info); + } + +} diff --git a/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/ObservationTextPublisherConfiguration.java b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/ObservationTextPublisherConfiguration.java new file mode 100644 index 0000000000..29637166c9 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/ObservationTextPublisherConfiguration.java @@ -0,0 +1,21 @@ +package com.baeldung.samples.config; + +import io.micrometer.observation.Observation; +import io.micrometer.observation.ObservationHandler; +import io.micrometer.observation.ObservationTextPublisher; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class ObservationTextPublisherConfiguration { + + private static final Logger log = LoggerFactory.getLogger(ObservationTextPublisherConfiguration.class); + + @Bean + public ObservationHandler observationTextPublisher() { + return new ObservationTextPublisher(log::info); + } + +} diff --git a/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/ObservedAspectConfiguration.java b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/ObservedAspectConfiguration.java new file mode 100644 index 0000000000..cd475113c7 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/ObservedAspectConfiguration.java @@ -0,0 +1,20 @@ +package com.baeldung.samples.config; + +import io.micrometer.observation.ObservationRegistry; +import io.micrometer.observation.aop.ObservedAspect; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; + +@AutoConfiguration +@ConditionalOnClass(ObservedAspect.class) +public class ObservedAspectConfiguration { + + @Bean + @ConditionalOnMissingBean + public ObservedAspect observedAspect(ObservationRegistry observationRegistry) { + return new ObservedAspect(observationRegistry); + } + +} diff --git a/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/SimpleLoggingHandler.java b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/SimpleLoggingHandler.java new file mode 100644 index 0000000000..c87aa68085 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/config/SimpleLoggingHandler.java @@ -0,0 +1,59 @@ +package com.baeldung.samples.config; + +import io.micrometer.observation.Observation; +import io.micrometer.observation.ObservationHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public class SimpleLoggingHandler implements ObservationHandler { + + private static final Logger log = LoggerFactory.getLogger(SimpleLoggingHandler.class); + + private static String toString(Observation.Context context) { + return null == context ? "(no context)" : context.getName() + + " (" + context.getClass().getName() + "@" + System.identityHashCode(context) + ")"; + } + + private static String toString(Observation.Event event) { + return null == event ? "(no event)" : event.getName(); + } + + @Override + public boolean supportsContext(Observation.Context context) { + return true; + } + + @Override + public void onStart(Observation.Context context) { + log.info("Starting context " + toString(context)); + } + + @Override + public void onError(Observation.Context context) { + log.info("Error for context " + toString(context)); + } + + @Override + public void onEvent(Observation.Event event, Observation.Context context) { + log.info("Event for context " + toString(context) + " [" + toString(event) + "]"); + } + + @Override + public void onScopeOpened(Observation.Context context) { + log.info("Scope opened for context " + toString(context)); + + } + + @Override + public void onScopeClosed(Observation.Context context) { + log.info("Scope closed for context " + toString(context)); + } + + @Override + public void onStop(Observation.Context context) { + log.info("Stopping context " + toString(context)); + } + +} diff --git a/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/domain/GreetingService.java b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/domain/GreetingService.java new file mode 100644 index 0000000000..ec362dd3cc --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/samples/domain/GreetingService.java @@ -0,0 +1,14 @@ +package com.baeldung.samples.domain; + +import io.micrometer.observation.annotation.Observed; +import org.springframework.stereotype.Service; + +@Observed(name = "greetingService") +@Service +public class GreetingService { + + public String sayHello() { + return "Hello World!"; + } + +} diff --git a/spring-boot-modules/spring-boot-3-observation/src/main/resources/application.yml b/spring-boot-modules/spring-boot-3-observation/src/main/resources/application.yml new file mode 100644 index 0000000000..9f91e8a03a --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/main/resources/application.yml @@ -0,0 +1,6 @@ +management: + endpoints: + web: + exposure: + include: '*' + #health,info,beans,metrics,startup diff --git a/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/config/SimpleLoggingHandlerUnitTest.java b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/config/SimpleLoggingHandlerUnitTest.java new file mode 100644 index 0000000000..5a6d1bd23f --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/config/SimpleLoggingHandlerUnitTest.java @@ -0,0 +1,17 @@ +package com.baeldung.samples.config; + +import io.micrometer.observation.Observation; +import io.micrometer.observation.ObservationHandler; +import io.micrometer.observation.tck.AnyContextObservationHandlerCompatibilityKit; + +class SimpleLoggingHandlerUnitTest + extends AnyContextObservationHandlerCompatibilityKit { + + SimpleLoggingHandler handler = new SimpleLoggingHandler(); + + @Override + public ObservationHandler handler() { + return handler; + } + +} diff --git a/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/domain/EnableTestObservation.java b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/domain/EnableTestObservation.java new file mode 100644 index 0000000000..8e4e2a1da0 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/domain/EnableTestObservation.java @@ -0,0 +1,44 @@ +package com.baeldung.samples.domain; + +import com.baeldung.samples.config.ObservedAspectConfiguration; +import io.micrometer.observation.tck.TestObservationRegistry; +import io.micrometer.tracing.test.simple.SimpleTracer; +import org.springframework.boot.test.autoconfigure.actuate.observability.AutoConfigureObservability; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Import; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@AutoConfigureObservability +@Import({ + ObservedAspectConfiguration.class, + EnableTestObservation.ObservationTestConfiguration.class +}) +public @interface EnableTestObservation { + + @TestConfiguration + class ObservationTestConfiguration { + + @Bean + TestObservationRegistry observationRegistry() { + return TestObservationRegistry.create(); + } + + @Bean + SimpleTracer simpleTracer() { + return new SimpleTracer(); + } + + } + +} diff --git a/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/domain/GreetingServiceObservationIntegrationTest.java b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/domain/GreetingServiceObservationIntegrationTest.java new file mode 100644 index 0000000000..98fa175660 --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/domain/GreetingServiceObservationIntegrationTest.java @@ -0,0 +1,35 @@ +package com.baeldung.samples.domain; + +import io.micrometer.observation.tck.TestObservationRegistry; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static io.micrometer.observation.tck.TestObservationRegistryAssert.assertThat; + +@ExtendWith(SpringExtension.class) +@ComponentScan(basePackageClasses = GreetingService.class) +@EnableAutoConfiguration +@EnableTestObservation +class GreetingServiceObservationIntegrationTest { + + @Autowired + GreetingService service; + @Autowired + TestObservationRegistry registry; + + @Test + void testObservation() { + // invoke service + service.sayHello(); + assertThat(registry) + .hasObservationWithNameEqualTo("greetingService") + .that() + .hasBeenStarted() + .hasBeenStopped(); + } + +} diff --git a/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/domain/GreetingServiceTracingIntegrationTest.java b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/domain/GreetingServiceTracingIntegrationTest.java new file mode 100644 index 0000000000..0199c0e7ef --- /dev/null +++ b/spring-boot-modules/spring-boot-3-observation/src/test/java/com/baeldung/samples/domain/GreetingServiceTracingIntegrationTest.java @@ -0,0 +1,42 @@ +package com.baeldung.samples.domain; + +import io.micrometer.tracing.test.simple.SimpleTracer; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static io.micrometer.tracing.test.simple.TracerAssert.assertThat; + +@ExtendWith(SpringExtension.class) +@ComponentScan(basePackageClasses = GreetingService.class) +@EnableAutoConfiguration +@EnableTestObservation +class GreetingServiceTracingIntegrationTest { + + @Autowired + GreetingService service; + @Value("${management.tracing.enabled:true}") + boolean tracingEnabled; + @Autowired + SimpleTracer tracer; + + @Test + void testEnabledTracing() { + Assertions.assertThat(tracingEnabled).isTrue(); + } + + @Test + void testTracingForGreeting() { + service.sayHello(); + assertThat(tracer) + .onlySpan() + .hasNameEqualTo("greeting-service#say-hello") + .isEnded(); + } + +} From 6579553e8db31bde6befbef75d6672ef6379013c Mon Sep 17 00:00:00 2001 From: Graham Cox Date: Fri, 30 Dec 2022 11:13:44 +0000 Subject: [PATCH 05/17] BAEL-6036: Enable caching on the TasksService for Lightrun Article (#13221) --- lightrun/tasks-service/pom.xml | 4 ++++ .../tasksservice/SimpleCacheCustomizer.java | 16 ++++++++++++++++ .../tasksservice/TasksServiceApplication.java | 2 ++ .../tasksservice/service/TasksService.java | 2 ++ 4 files changed, 24 insertions(+) create mode 100644 lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/SimpleCacheCustomizer.java diff --git a/lightrun/tasks-service/pom.xml b/lightrun/tasks-service/pom.xml index 2b3b37e51b..c3542b0089 100644 --- a/lightrun/tasks-service/pom.xml +++ b/lightrun/tasks-service/pom.xml @@ -24,6 +24,10 @@ org.springframework.boot spring-boot-starter-artemis + + org.springframework.boot + spring-boot-starter-cache + org.springframework.boot spring-boot-starter-data-jpa diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/SimpleCacheCustomizer.java b/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/SimpleCacheCustomizer.java new file mode 100644 index 0000000000..bf8bb6ad6e --- /dev/null +++ b/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/SimpleCacheCustomizer.java @@ -0,0 +1,16 @@ +package com.baeldung.tasksservice; + +import java.util.List; + +import org.springframework.boot.autoconfigure.cache.CacheManagerCustomizer; +import org.springframework.cache.concurrent.ConcurrentMapCacheManager; +import org.springframework.stereotype.Component; + +@Component +public class SimpleCacheCustomizer implements CacheManagerCustomizer { + + @Override + public void customize(ConcurrentMapCacheManager cacheManager) { + cacheManager.setCacheNames(List.of("tasks")); + } +} \ No newline at end of file diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/TasksServiceApplication.java b/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/TasksServiceApplication.java index dfd9859674..84a8ed7967 100644 --- a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/TasksServiceApplication.java +++ b/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/TasksServiceApplication.java @@ -2,8 +2,10 @@ package com.baeldung.tasksservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cache.annotation.EnableCaching; @SpringBootApplication +@EnableCaching public class TasksServiceApplication { public static void main(String[] args) { diff --git a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/service/TasksService.java b/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/service/TasksService.java index 3539dbbc3c..107bf56bb9 100644 --- a/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/service/TasksService.java +++ b/lightrun/tasks-service/src/main/java/com/baeldung/tasksservice/service/TasksService.java @@ -19,6 +19,7 @@ import java.util.UUID; import javax.transaction.Transactional; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import com.baeldung.tasksservice.adapters.repository.TaskRecord; @@ -29,6 +30,7 @@ public class TasksService { @Autowired private TasksRepository tasksRepository; + @Cacheable("tasks") public TaskRecord getTaskById(String id) { return tasksRepository.findById(id) .orElseThrow(() -> new UnknownTaskException(id)); From a26acf8a0c48297bd9891712cb64c9c4ec18430c Mon Sep 17 00:00:00 2001 From: Kilian Schneider <48420258+Basler182@users.noreply.github.com> Date: Fri, 30 Dec 2022 19:03:21 +0100 Subject: [PATCH 06/17] BAEL-6055 NonUniqueResultException in Spring Data JPA (#13173) * BAEL-6055 NonUniqueResultException in Spring Data JPA * update using AssertJ Exception * Update persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/nonuniqueresultexception/NonUniqueResultExceptionIntegrationTest.java Co-authored-by: KevinGilmore * Update persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/nonuniqueresultexception/NonUniqueResultExceptionIntegrationTest.java Co-authored-by: KevinGilmore Co-authored-by: KevinGilmore --- .../jpa/query/datetime/ArticleRepository.java | 3 ++ ...nUniqueResultExceptionIntegrationTest.java | 35 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/nonuniqueresultexception/NonUniqueResultExceptionIntegrationTest.java diff --git a/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/query/datetime/ArticleRepository.java b/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/query/datetime/ArticleRepository.java index 9ec14884f4..726764b411 100644 --- a/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/query/datetime/ArticleRepository.java +++ b/persistence-modules/spring-data-jpa-query-3/src/main/java/com/baeldung/spring/data/jpa/query/datetime/ArticleRepository.java @@ -14,6 +14,9 @@ public interface ArticleRepository extends JpaRepository { List
findAllByPublicationTimeBetween(Date publicationTimeStart, Date publicationTimeEnd); + Article findByPublicationTimeBetween(Date publicationTimeStart, + Date publicationTimeEnd); + @Query("select a from Article a where a.creationDateTime <= :creationDateTime") List
findAllWithCreationDateTimeBefore( @Param("creationDateTime") Date creationDateTime); diff --git a/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/nonuniqueresultexception/NonUniqueResultExceptionIntegrationTest.java b/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/nonuniqueresultexception/NonUniqueResultExceptionIntegrationTest.java new file mode 100644 index 0000000000..b032819ad6 --- /dev/null +++ b/persistence-modules/spring-data-jpa-query-3/src/test/java/com/baeldung/spring/data/jpa/query/nonuniqueresultexception/NonUniqueResultExceptionIntegrationTest.java @@ -0,0 +1,35 @@ +package com.baeldung.spring.data.jpa.query.nonuniqueresultexception; + +import com.baeldung.spring.data.jpa.query.datetime.ArticleRepository; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.dao.IncorrectResultSizeDataAccessException; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.persistence.NonUniqueResultException; +import java.text.ParseException; +import java.text.SimpleDateFormat; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; + +@RunWith(SpringRunner.class) +@DataJpaTest(properties = "spring.sql.init.data-locations=classpath:import_entities.sql", showSql = false) +public class NonUniqueResultExceptionIntegrationTest { + + @Autowired + private ArticleRepository repository; + + @Test + public void givenImportedArticles_whenFindByPublicationTimeBetween_thenIncorrectResultSizeDataAccessExceptionThrown() { + assertThatThrownBy(() -> repository.findByPublicationTimeBetween(new SimpleDateFormat("HH:mm").parse("15:15"), new SimpleDateFormat("HH:mm").parse("16:30"))) + .isInstanceOf(IncorrectResultSizeDataAccessException.class) + .hasCauseInstanceOf(NonUniqueResultException.class); + } + + @Test + public void givenImportedArticles_whenFindAllByPublicationTimeBetween_thenSuccess() throws ParseException { + repository.findAllByPublicationTimeBetween(new SimpleDateFormat("HH:mm").parse("15:15"), new SimpleDateFormat("HH:mm").parse("16:30")); + } +} From 1c8006a1df1355ce384b6bca5f0eb80a67c80e34 Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Mon, 2 Jan 2023 21:22:06 +0530 Subject: [PATCH 07/17] JAVA-16722 Upgrade and Fix unit tests of jersey module (#13193) --- jersey/pom.xml | 7 ++++++- .../com/baeldung/jersey/client/JerseyClientHeaders.java | 5 ++++- .../com/baeldung/jersey/server/EchoHeadersUnitTest.java | 3 --- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/jersey/pom.xml b/jersey/pom.xml index c8a7de66ae..7c7330d84f 100644 --- a/jersey/pom.xml +++ b/jersey/pom.xml @@ -72,6 +72,11 @@ ${jersey.version} test + + org.glassfish.jersey.connectors + jersey-apache-connector + ${jersey.version} + @@ -95,7 +100,7 @@ - 2.26 + 2.38 \ No newline at end of file diff --git a/jersey/src/main/java/com/baeldung/jersey/client/JerseyClientHeaders.java b/jersey/src/main/java/com/baeldung/jersey/client/JerseyClientHeaders.java index ebcbe1d4ab..29db298e9e 100644 --- a/jersey/src/main/java/com/baeldung/jersey/client/JerseyClientHeaders.java +++ b/jersey/src/main/java/com/baeldung/jersey/client/JerseyClientHeaders.java @@ -1,6 +1,8 @@ package com.baeldung.jersey.client; import com.baeldung.jersey.client.filter.AddHeaderOnRequestFilter; +import org.glassfish.jersey.apache.connector.ApacheConnectorProvider; +import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; import org.glassfish.jersey.client.oauth1.AccessToken; import org.glassfish.jersey.client.oauth1.ConsumerCredentials; @@ -155,7 +157,8 @@ public class JerseyClientHeaders { } public static Response sendRestrictedHeaderThroughDefaultTransportConnector(String headerKey, String headerValue) { - Client client = ClientBuilder.newClient(); + ClientConfig clientConfig = new ClientConfig().connectorProvider(new ApacheConnectorProvider()); + Client client = ClientBuilder.newClient(clientConfig); System.setProperty("sun.net.http.allowRestrictedHeaders", "true"); return client.target(TARGET) diff --git a/jersey/src/test/java/com/baeldung/jersey/server/EchoHeadersUnitTest.java b/jersey/src/test/java/com/baeldung/jersey/server/EchoHeadersUnitTest.java index cca7446dd1..24552f6d81 100644 --- a/jersey/src/test/java/com/baeldung/jersey/server/EchoHeadersUnitTest.java +++ b/jersey/src/test/java/com/baeldung/jersey/server/EchoHeadersUnitTest.java @@ -2,10 +2,8 @@ package com.baeldung.jersey.server; import com.baeldung.jersey.client.JerseyClientHeaders; import com.baeldung.jersey.client.filter.AddHeaderOnRequestFilter; -import org.glassfish.jersey.media.sse.SseFeature; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.test.JerseyTest; -import org.junit.Ignore; import org.junit.Test; import javax.ws.rs.core.Application; @@ -17,7 +15,6 @@ import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -@Ignore public class EchoHeadersUnitTest extends JerseyTest { private static final String SIMPLE_HEADER_KEY = "my-header-key"; From 4c153707aa7837fe8b2dd4a80594db6c0862d341 Mon Sep 17 00:00:00 2001 From: anuragkumawat Date: Mon, 2 Jan 2023 23:40:25 +0530 Subject: [PATCH 08/17] Java 16013 Add suffix legacy to spring-cloud-bootstrap module (#13218) * JAVA-16013 Add suffix legacy spring-cloud-bootstrap to module * JAVA-16013 Revert local change done to run test --- spring-cloud-modules/pom.xml | 2 +- .../README.md | 0 .../application-config/book-service.properties | 0 .../application-config/discovery.properties | 0 .../application-config/gateway.properties | 0 .../application-config/rating-service.properties | 0 .../application-config/zipkin.properties | 0 .../config/pom.xml | 0 .../cloud/bootstrap/config/ConfigApplication.java | 0 .../cloud/bootstrap/config/SecurityConfig.java | 0 .../src/main/resources/application.properties | 0 .../config/src/main/resources/logback.xml | 0 .../test/java/com/baeldung/SpringContextTest.java | 0 .../customer-service/pom.xml | 0 .../java/com/baeldung/customerservice/Customer.java | 0 .../customerservice/CustomerApplication.java | 0 .../baeldung/customerservice/CustomerService.java | 0 .../src/main/resources/application.properties | 0 .../src/test/resources/application.properties | 0 .../discovery/pom.xml | 0 .../bootstrap/discovery/DiscoveryApplication.java | 0 .../cloud/bootstrap/discovery/SecurityConfig.java | 0 .../cloud/bootstrap/discovery/SessionConfig.java | 0 .../src/main/resources/bootstrap.properties | 0 .../discovery/src/main/resources/logback.xml | 0 .../java/com/baeldung/SpringContextLiveTest.java | 0 .../gateway/pom.xml | 0 .../gateway/src/main/angular/ui/.angular-cli.json | 0 .../gateway/src/main/angular/ui/.editorconfig | 0 .../gateway/src/main/angular/ui/.gitignore | 0 .../gateway/src/main/angular/ui/README.md | 0 .../gateway/src/main/angular/ui/e2e/app.e2e-spec.ts | 0 .../gateway/src/main/angular/ui/e2e/app.po.ts | 0 .../src/main/angular/ui/e2e/tsconfig.e2e.json | 0 .../gateway/src/main/angular/ui/karma.conf.js | 0 .../gateway/src/main/angular/ui/package.json | 0 .../gateway/src/main/angular/ui/protractor.conf.js | 0 .../src/main/angular/ui/src/app/app.component.css | 0 .../src/main/angular/ui/src/app/app.component.html | 0 .../src/main/angular/ui/src/app/app.component.ts | 0 .../src/main/angular/ui/src/app/app.module.ts | 0 .../gateway/src/main/angular/ui/src/app/book.ts | 0 .../app/book/book-detail/book-detail.component.css | 0 .../app/book/book-detail/book-detail.component.html | 0 .../app/book/book-detail/book-detail.component.ts | 0 .../src/app/book/book-list/book-list.component.css | 0 .../src/app/book/book-list/book-list.component.html | 0 .../src/app/book/book-list/book-list.component.ts | 0 .../ui/src/app/click-stop-propagation.directive.ts | 0 .../src/main/angular/ui/src/app/http.service.ts | 0 .../src/main/angular/ui/src/app/principal.ts | 0 .../gateway/src/main/angular/ui/src/app/rating.ts | 0 .../angular/ui/src/app/rating/rating.component.css | 0 .../angular/ui/src/app/rating/rating.component.html | 0 .../angular/ui/src/app/rating/rating.component.ts | 0 .../gateway/src/main/angular/ui/src/assets/.gitkeep | 0 .../angular/ui/src/environments/environment.prod.ts | 0 .../main/angular/ui/src/environments/environment.ts | 0 .../gateway/src/main/angular/ui/src/favicon.ico | Bin .../gateway/src/main/angular/ui/src/index.html | 0 .../gateway/src/main/angular/ui/src/main.ts | 0 .../gateway/src/main/angular/ui/src/polyfills.ts | 0 .../gateway/src/main/angular/ui/src/styles.css | 0 .../gateway/src/main/angular/ui/src/test.ts | 0 .../src/main/angular/ui/src/tsconfig.app.json | 0 .../src/main/angular/ui/src/tsconfig.spec.json | 0 .../gateway/src/main/angular/ui/src/typings.d.ts | 0 .../gateway/src/main/angular/ui/tsconfig.json | 0 .../gateway/src/main/angular/ui/tslint.json | 0 .../bootstrap/gateway/AuthenticationController.java | 0 .../cloud/bootstrap/gateway/ErrorPageConfig.java | 0 .../cloud/bootstrap/gateway/GatewayApplication.java | 0 .../cloud/bootstrap/gateway/SecurityConfig.java | 0 .../cloud/bootstrap/gateway/SessionConfig.java | 0 .../cloud/bootstrap/gateway/client/book/Book.java | 0 .../bootstrap/gateway/client/book/BooksClient.java | 0 .../bootstrap/gateway/client/rating/Rating.java | 0 .../gateway/client/rating/RatingsClient.java | 0 .../gateway/controller/CombinedController.java | 0 .../gateway/filter/SessionSavingZuulPreFilter.java | 0 .../gateway/src/main/resources/bootstrap.properties | 0 .../gateway/src/main/resources/logback.xml | 0 .../src/main/resources/static/eureka/css/wro.css | 0 .../static/eureka/fonts/montserrat-webfont.eot | Bin .../static/eureka/fonts/montserrat-webfont.svg | 0 .../static/eureka/fonts/montserrat-webfont.ttf | Bin .../static/eureka/fonts/montserrat-webfont.woff | Bin .../static/eureka/fonts/varela_round-webfont.eot | Bin .../static/eureka/fonts/varela_round-webfont.svg | 0 .../static/eureka/fonts/varela_round-webfont.ttf | Bin .../static/eureka/fonts/varela_round-webfont.woff | Bin .../resources/static/eureka/images/404-icon.png | Bin .../resources/static/eureka/images/homepage-bg.jpg | Bin .../resources/static/eureka/images/platform-bg.png | Bin .../static/eureka/images/platform-spring-xd.png | Bin .../eureka/images/spring-logo-eureka-mobile.png | Bin .../static/eureka/images/spring-logo-eureka.png | Bin .../src/main/resources/static/eureka/js/wro.js | 0 .../src/main/resources/static/home/favicon.ico | Bin .../src/main/resources/static/home/index.html | 0 .../src/main/resources/static/home/inline.bundle.js | 0 .../main/resources/static/home/inline.bundle.js.map | 0 .../src/main/resources/static/home/main.bundle.js | 0 .../main/resources/static/home/main.bundle.js.map | 0 .../main/resources/static/home/polyfills.bundle.js | 0 .../resources/static/home/polyfills.bundle.js.map | 0 .../src/main/resources/static/home/styles.bundle.js | 0 .../main/resources/static/home/styles.bundle.js.map | 0 .../gateway/src/main/resources/static/index.html | 0 .../java/com/baeldung/SpringContextLiveTest.java | 0 .../spring/cloud/bootstrap/gateway/LiveTest.java | 0 .../bootstrap/gateway/SpringContextLiveTest.java | 0 .../gateway/src/test/resources/bootstrap.properties | 0 .../order-service/order-client/pom.xml | 0 .../baeldung/orderservice/client/OrderClient.java | 0 .../orderservice/client/OrderClientImpl.java | 0 .../com/baeldung/orderservice/client/OrderDTO.java | 0 .../baeldung/orderservice/client/OrderResponse.java | 0 .../src/main/resources/application.properties | 0 .../order-service/order-server/pom.xml | 0 .../main/java/com/baeldung/orderservice/Order.java | 0 .../com/baeldung/orderservice/OrderApplication.java | 0 .../com/baeldung/orderservice/OrderService.java | 0 .../src/main/resources/application.properties | 0 .../order-service/pom.xml | 0 .../pom.xml | 4 ++-- .../svc-book/pom.xml | 0 .../bootstrap/svcbook/BookServiceApplication.java | 0 .../spring/cloud/bootstrap/svcbook/DataLoader.java | 0 .../cloud/bootstrap/svcbook/SecurityConfig.java | 0 .../cloud/bootstrap/svcbook/SessionConfig.java | 0 .../spring/cloud/bootstrap/svcbook/book/Book.java | 0 .../bootstrap/svcbook/book/BookController.java | 0 .../svcbook/book/BookNotFoundException.java | 0 .../bootstrap/svcbook/book/BookRepository.java | 0 .../cloud/bootstrap/svcbook/book/BookService.java | 0 .../src/main/resources/bootstrap.properties | 0 .../svc-book/src/main/resources/logback.xml | 0 .../java/com/baeldung/SpringContextLiveTest.java | 0 .../src/test/resources/bootstrap.properties | 0 .../svc-rating/pom.xml | 0 .../cloud/bootstrap/svcrating/DataLoader.java | 0 .../svcrating/RatingServiceApplication.java | 0 .../cloud/bootstrap/svcrating/SecurityConfig.java | 0 .../cloud/bootstrap/svcrating/SessionConfig.java | 0 .../cloud/bootstrap/svcrating/rating/Rating.java | 0 .../svcrating/rating/RatingCacheRepository.java | 0 .../svcrating/rating/RatingController.java | 0 .../svcrating/rating/RatingNotFoundException.java | 0 .../svcrating/rating/RatingRepository.java | 0 .../bootstrap/svcrating/rating/RatingService.java | 0 .../src/main/resources/bootstrap.properties | 0 .../svc-rating/src/main/resources/logback.xml | 0 .../java/com/baeldung/SpringContextLiveTest.java | 0 .../src/test/resources/bootstrap.properties | 0 .../zipkin/pom.xml | 0 .../cloud/bootstrap/zipkin/ZipkinApplication.java | 0 .../zipkin/src/main/resources/bootstrap.properties | 0 .../zipkin/src/main/resources/logback.xml | 0 .../test/java/com/baeldung/SpringContextTest.java | 0 160 files changed, 3 insertions(+), 3 deletions(-) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/README.md (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/application-config/book-service.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/application-config/discovery.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/application-config/gateway.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/application-config/rating-service.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/application-config/zipkin.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/config/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/ConfigApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/SecurityConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/config/src/main/resources/application.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/config/src/main/resources/logback.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/config/src/test/java/com/baeldung/SpringContextTest.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/customer-service/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/customer-service/src/main/java/com/baeldung/customerservice/Customer.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/customer-service/src/main/java/com/baeldung/customerservice/CustomerApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/customer-service/src/main/java/com/baeldung/customerservice/CustomerService.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/customer-service/src/main/resources/application.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/customer-service/src/test/resources/application.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/discovery/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/DiscoveryApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SecurityConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SessionConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/discovery/src/main/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/discovery/src/main/resources/logback.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/discovery/src/test/java/com/baeldung/SpringContextLiveTest.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/.angular-cli.json (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/.editorconfig (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/.gitignore (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/README.md (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/e2e/app.e2e-spec.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/e2e/app.po.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/e2e/tsconfig.e2e.json (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/karma.conf.js (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/package.json (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/protractor.conf.js (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/app.component.css (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/app.component.html (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/app.component.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/app.module.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/book.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.css (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.html (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.css (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.html (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/click-stop-propagation.directive.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/http.service.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/principal.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/rating.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/rating/rating.component.css (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/rating/rating.component.html (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/app/rating/rating.component.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/assets/.gitkeep (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/environments/environment.prod.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/environments/environment.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/favicon.ico (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/index.html (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/main.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/polyfills.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/styles.css (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/test.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/tsconfig.app.json (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/tsconfig.spec.json (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/src/typings.d.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/tsconfig.json (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/angular/ui/tslint.json (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/AuthenticationController.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/ErrorPageConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/GatewayApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SecurityConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SessionConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/Book.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/BooksClient.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/Rating.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/RatingsClient.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/controller/CombinedController.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/filter/SessionSavingZuulPreFilter.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/logback.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/css/wro.css (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.eot (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.svg (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.ttf (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.woff (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.eot (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.svg (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.ttf (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.woff (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/images/404-icon.png (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/images/homepage-bg.jpg (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/images/platform-bg.png (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/images/platform-spring-xd.png (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/images/spring-logo-eureka-mobile.png (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/images/spring-logo-eureka.png (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/eureka/js/wro.js (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/home/favicon.ico (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/home/index.html (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/home/inline.bundle.js (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/home/inline.bundle.js.map (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/home/main.bundle.js (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/home/main.bundle.js.map (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/home/polyfills.bundle.js (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/home/polyfills.bundle.js.map (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/home/styles.bundle.js (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/home/styles.bundle.js.map (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/main/resources/static/index.html (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/test/java/com/baeldung/SpringContextLiveTest.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/LiveTest.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/gateway/src/test/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/order-service/order-client/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClient.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClientImpl.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderDTO.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderResponse.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/order-service/order-client/src/main/resources/application.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/order-service/order-server/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/order-service/order-server/src/main/java/com/baeldung/orderservice/Order.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderService.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/order-service/order-server/src/main/resources/application.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/order-service/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/pom.xml (89%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-book/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/BookServiceApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/DataLoader.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SecurityConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SessionConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/Book.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookController.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookNotFoundException.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookRepository.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookService.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-book/src/main/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-book/src/main/resources/logback.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-book/src/test/java/com/baeldung/SpringContextLiveTest.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-book/src/test/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-rating/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/DataLoader.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/RatingServiceApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SecurityConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SessionConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/Rating.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingCacheRepository.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingController.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingNotFoundException.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingRepository.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingService.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-rating/src/main/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-rating/src/main/resources/logback.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-rating/src/test/java/com/baeldung/SpringContextLiveTest.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/svc-rating/src/test/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/zipkin/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/zipkin/src/main/java/com/baeldung/spring/cloud/bootstrap/zipkin/ZipkinApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/zipkin/src/main/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/zipkin/src/main/resources/logback.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap => spring-cloud-bootstrap-legacy}/zipkin/src/test/java/com/baeldung/SpringContextTest.java (100%) diff --git a/spring-cloud-modules/pom.xml b/spring-cloud-modules/pom.xml index 7a4eec679e..2f5410b308 100644 --- a/spring-cloud-modules/pom.xml +++ b/spring-cloud-modules/pom.xml @@ -21,7 +21,7 @@ spring-cloud-config spring-cloud-eureka spring-cloud-hystrix - spring-cloud-bootstrap + spring-cloud-bootstrap-legacy spring-cloud-ribbon-client spring-cloud-zookeeper spring-cloud-gateway diff --git a/spring-cloud-modules/spring-cloud-bootstrap/README.md b/spring-cloud-modules/spring-cloud-bootstrap-legacy/README.md similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/README.md rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/README.md diff --git a/spring-cloud-modules/spring-cloud-bootstrap/application-config/book-service.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/book-service.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/application-config/book-service.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/book-service.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/application-config/discovery.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/discovery.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/application-config/discovery.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/discovery.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/application-config/gateway.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/gateway.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/application-config/gateway.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/gateway.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/application-config/rating-service.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/rating-service.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/application-config/rating-service.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/rating-service.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/application-config/zipkin.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/zipkin.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/application-config/zipkin.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/zipkin.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/config/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/config/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/config/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/config/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/ConfigApplication.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/ConfigApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/ConfigApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/ConfigApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/SecurityConfig.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/SecurityConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/SecurityConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/SecurityConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/config/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/config/src/main/resources/application.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/config/src/main/resources/logback.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/config/src/main/resources/logback.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/resources/logback.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/config/src/test/java/com/baeldung/SpringContextTest.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/test/java/com/baeldung/SpringContextTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/config/src/test/java/com/baeldung/SpringContextTest.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/test/java/com/baeldung/SpringContextTest.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/customer-service/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/customer-service/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/java/com/baeldung/customerservice/Customer.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/java/com/baeldung/customerservice/Customer.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/java/com/baeldung/customerservice/Customer.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/java/com/baeldung/customerservice/Customer.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/java/com/baeldung/customerservice/CustomerApplication.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/java/com/baeldung/customerservice/CustomerApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/java/com/baeldung/customerservice/CustomerApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/java/com/baeldung/customerservice/CustomerApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/java/com/baeldung/customerservice/CustomerService.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/java/com/baeldung/customerservice/CustomerService.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/java/com/baeldung/customerservice/CustomerService.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/java/com/baeldung/customerservice/CustomerService.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/resources/application.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/test/resources/application.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/test/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/test/resources/application.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/test/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/discovery/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/discovery/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/DiscoveryApplication.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/DiscoveryApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/DiscoveryApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/DiscoveryApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SecurityConfig.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SecurityConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SecurityConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SecurityConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SessionConfig.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SessionConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SessionConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SessionConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/resources/logback.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/resources/logback.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/resources/logback.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/discovery/src/test/java/com/baeldung/SpringContextLiveTest.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/test/java/com/baeldung/SpringContextLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/discovery/src/test/java/com/baeldung/SpringContextLiveTest.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/test/java/com/baeldung/SpringContextLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/.angular-cli.json b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/.angular-cli.json similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/.angular-cli.json rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/.angular-cli.json diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/.editorconfig b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/.editorconfig similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/.editorconfig rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/.editorconfig diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/.gitignore b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/.gitignore similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/.gitignore rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/.gitignore diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/README.md b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/README.md similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/README.md rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/README.md diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/e2e/app.e2e-spec.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/e2e/app.e2e-spec.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/e2e/app.e2e-spec.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/e2e/app.e2e-spec.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/e2e/app.po.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/e2e/app.po.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/e2e/app.po.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/e2e/app.po.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/e2e/tsconfig.e2e.json b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/e2e/tsconfig.e2e.json similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/e2e/tsconfig.e2e.json rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/e2e/tsconfig.e2e.json diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/karma.conf.js b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/karma.conf.js similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/karma.conf.js rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/karma.conf.js diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/package.json b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/package.json similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/package.json rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/package.json diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/protractor.conf.js b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/protractor.conf.js similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/protractor.conf.js rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/protractor.conf.js diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.component.css b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.component.css similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.component.css rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.component.css diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.component.html b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.component.html similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.component.html rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.component.html diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.component.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.component.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.component.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.component.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.module.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.module.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.module.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.module.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.css b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.css similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.css rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.css diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.html b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.html similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.html rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.html diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.css b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.css similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.css rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.css diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.html b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.html similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.html rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.html diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/click-stop-propagation.directive.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/click-stop-propagation.directive.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/click-stop-propagation.directive.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/click-stop-propagation.directive.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/http.service.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/http.service.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/http.service.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/http.service.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/principal.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/principal.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/principal.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/principal.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating/rating.component.css b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating/rating.component.css similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating/rating.component.css rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating/rating.component.css diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating/rating.component.html b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating/rating.component.html similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating/rating.component.html rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating/rating.component.html diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating/rating.component.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating/rating.component.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating/rating.component.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating/rating.component.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/assets/.gitkeep b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/assets/.gitkeep similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/assets/.gitkeep rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/assets/.gitkeep diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/environments/environment.prod.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/environments/environment.prod.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/environments/environment.prod.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/environments/environment.prod.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/environments/environment.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/environments/environment.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/environments/environment.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/environments/environment.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/favicon.ico b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/favicon.ico similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/favicon.ico rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/favicon.ico diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/index.html b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/index.html similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/index.html rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/index.html diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/main.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/main.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/main.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/main.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/polyfills.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/polyfills.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/polyfills.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/polyfills.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/styles.css b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/styles.css similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/styles.css rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/styles.css diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/test.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/test.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/test.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/test.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/tsconfig.app.json b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/tsconfig.app.json similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/tsconfig.app.json rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/tsconfig.app.json diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/tsconfig.spec.json b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/tsconfig.spec.json similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/tsconfig.spec.json rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/tsconfig.spec.json diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/typings.d.ts b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/typings.d.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/typings.d.ts rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/typings.d.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/tsconfig.json b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/tsconfig.json similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/tsconfig.json rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/tsconfig.json diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/tslint.json b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/tslint.json similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/tslint.json rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/tslint.json diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/AuthenticationController.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/AuthenticationController.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/AuthenticationController.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/AuthenticationController.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/ErrorPageConfig.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/ErrorPageConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/ErrorPageConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/ErrorPageConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/GatewayApplication.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/GatewayApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/GatewayApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/GatewayApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SecurityConfig.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SecurityConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SecurityConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SecurityConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SessionConfig.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SessionConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SessionConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SessionConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/Book.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/Book.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/Book.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/Book.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/BooksClient.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/BooksClient.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/BooksClient.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/BooksClient.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/Rating.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/Rating.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/Rating.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/Rating.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/RatingsClient.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/RatingsClient.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/RatingsClient.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/RatingsClient.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/controller/CombinedController.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/controller/CombinedController.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/controller/CombinedController.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/controller/CombinedController.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/filter/SessionSavingZuulPreFilter.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/filter/SessionSavingZuulPreFilter.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/filter/SessionSavingZuulPreFilter.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/filter/SessionSavingZuulPreFilter.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/logback.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/logback.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/logback.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/css/wro.css b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/css/wro.css similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/css/wro.css rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/css/wro.css diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.eot b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.eot similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.eot rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.eot diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.svg b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.svg similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.svg rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.svg diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.ttf b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.ttf similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.ttf rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.ttf diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.woff b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.woff similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.woff rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.woff diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.eot b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.eot similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.eot rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.eot diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.svg b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.svg similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.svg rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.svg diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.ttf b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.ttf similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.ttf rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.ttf diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.woff b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.woff similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.woff rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.woff diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/404-icon.png b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/404-icon.png similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/404-icon.png rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/404-icon.png diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/homepage-bg.jpg b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/homepage-bg.jpg similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/homepage-bg.jpg rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/homepage-bg.jpg diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/platform-bg.png b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/platform-bg.png similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/platform-bg.png rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/platform-bg.png diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/platform-spring-xd.png b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/platform-spring-xd.png similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/platform-spring-xd.png rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/platform-spring-xd.png diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/spring-logo-eureka-mobile.png b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/spring-logo-eureka-mobile.png similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/spring-logo-eureka-mobile.png rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/spring-logo-eureka-mobile.png diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/spring-logo-eureka.png b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/spring-logo-eureka.png similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/spring-logo-eureka.png rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/spring-logo-eureka.png diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/js/wro.js b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/js/wro.js similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/js/wro.js rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/js/wro.js diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/favicon.ico b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/favicon.ico similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/favicon.ico rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/favicon.ico diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/index.html b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/index.html similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/index.html rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/index.html diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/inline.bundle.js b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/inline.bundle.js similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/inline.bundle.js rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/inline.bundle.js diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/inline.bundle.js.map b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/inline.bundle.js.map similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/inline.bundle.js.map rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/inline.bundle.js.map diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/main.bundle.js b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/main.bundle.js similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/main.bundle.js rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/main.bundle.js diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/main.bundle.js.map b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/main.bundle.js.map similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/main.bundle.js.map rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/main.bundle.js.map diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/polyfills.bundle.js b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/polyfills.bundle.js similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/polyfills.bundle.js rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/polyfills.bundle.js diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/polyfills.bundle.js.map b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/polyfills.bundle.js.map similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/polyfills.bundle.js.map rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/polyfills.bundle.js.map diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/styles.bundle.js b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/styles.bundle.js similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/styles.bundle.js rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/styles.bundle.js diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/styles.bundle.js.map b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/styles.bundle.js.map similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/styles.bundle.js.map rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/styles.bundle.js.map diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/index.html b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/index.html similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/index.html rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/index.html diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/SpringContextLiveTest.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/java/com/baeldung/SpringContextLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/SpringContextLiveTest.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/java/com/baeldung/SpringContextLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/LiveTest.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/LiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/LiveTest.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/LiveTest.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClient.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClient.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClient.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClient.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClientImpl.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClientImpl.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClientImpl.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClientImpl.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderDTO.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderDTO.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderDTO.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderDTO.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderResponse.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderResponse.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderResponse.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderResponse.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/resources/application.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/java/com/baeldung/orderservice/Order.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/java/com/baeldung/orderservice/Order.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/java/com/baeldung/orderservice/Order.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/java/com/baeldung/orderservice/Order.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderApplication.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderService.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderService.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderService.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderService.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/resources/application.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/order-service/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/order-service/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/pom.xml similarity index 89% rename from spring-cloud-modules/spring-cloud-bootstrap/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/pom.xml index 1e97082db1..597f669c69 100644 --- a/spring-cloud-modules/spring-cloud-bootstrap/pom.xml +++ b/spring-cloud-modules/spring-cloud-bootstrap-legacy/pom.xml @@ -3,9 +3,9 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - spring-cloud-bootstrap + spring-cloud-bootstrap-legacy 1.0.0-SNAPSHOT - spring-cloud-bootstrap + spring-cloud-bootstrap-legacy pom diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-book/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-book/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/BookServiceApplication.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/BookServiceApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/BookServiceApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/BookServiceApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/DataLoader.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/DataLoader.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/DataLoader.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/DataLoader.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SecurityConfig.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SecurityConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SecurityConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SecurityConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SessionConfig.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SessionConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SessionConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SessionConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/Book.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/Book.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/Book.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/Book.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookController.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookController.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookController.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookController.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookNotFoundException.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookNotFoundException.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookNotFoundException.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookNotFoundException.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookRepository.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookRepository.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookRepository.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookRepository.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookService.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookService.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookService.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookService.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/resources/logback.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/resources/logback.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/resources/logback.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/test/java/com/baeldung/SpringContextLiveTest.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/test/java/com/baeldung/SpringContextLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/test/java/com/baeldung/SpringContextLiveTest.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/test/java/com/baeldung/SpringContextLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/test/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/test/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/test/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/test/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-rating/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/DataLoader.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/DataLoader.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/DataLoader.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/DataLoader.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/RatingServiceApplication.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/RatingServiceApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/RatingServiceApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/RatingServiceApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SecurityConfig.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SecurityConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SecurityConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SecurityConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SessionConfig.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SessionConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SessionConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SessionConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/Rating.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/Rating.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/Rating.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/Rating.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingCacheRepository.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingCacheRepository.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingCacheRepository.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingCacheRepository.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingController.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingController.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingController.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingController.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingNotFoundException.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingNotFoundException.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingNotFoundException.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingNotFoundException.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingRepository.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingRepository.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingRepository.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingRepository.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingService.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingService.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingService.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingService.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/resources/logback.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/resources/logback.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/resources/logback.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/test/java/com/baeldung/SpringContextLiveTest.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/test/java/com/baeldung/SpringContextLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/test/java/com/baeldung/SpringContextLiveTest.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/test/java/com/baeldung/SpringContextLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/test/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/test/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/test/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/test/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/zipkin/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/zipkin/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/main/java/com/baeldung/spring/cloud/bootstrap/zipkin/ZipkinApplication.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/main/java/com/baeldung/spring/cloud/bootstrap/zipkin/ZipkinApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/main/java/com/baeldung/spring/cloud/bootstrap/zipkin/ZipkinApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/main/java/com/baeldung/spring/cloud/bootstrap/zipkin/ZipkinApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/main/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/main/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/main/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/main/resources/logback.xml b/spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/main/resources/logback.xml rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/main/resources/logback.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/test/java/com/baeldung/SpringContextTest.java b/spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/test/java/com/baeldung/SpringContextTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/test/java/com/baeldung/SpringContextTest.java rename to spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/test/java/com/baeldung/SpringContextTest.java From 111532dc4a59c2e7564621c592477fa867536572 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Tue, 3 Jan 2023 00:02:26 +0530 Subject: [PATCH 09/17] Revert "Java 16013 Add suffix legacy to spring-cloud-bootstrap module (#13218)" (#13231) This reverts commit 4c153707aa7837fe8b2dd4a80594db6c0862d341. --- spring-cloud-modules/pom.xml | 2 +- .../README.md | 0 .../application-config/book-service.properties | 0 .../application-config/discovery.properties | 0 .../application-config/gateway.properties | 0 .../application-config/rating-service.properties | 0 .../application-config/zipkin.properties | 0 .../config/pom.xml | 0 .../cloud/bootstrap/config/ConfigApplication.java | 0 .../cloud/bootstrap/config/SecurityConfig.java | 0 .../src/main/resources/application.properties | 0 .../config/src/main/resources/logback.xml | 0 .../test/java/com/baeldung/SpringContextTest.java | 0 .../customer-service/pom.xml | 0 .../java/com/baeldung/customerservice/Customer.java | 0 .../customerservice/CustomerApplication.java | 0 .../baeldung/customerservice/CustomerService.java | 0 .../src/main/resources/application.properties | 0 .../src/test/resources/application.properties | 0 .../discovery/pom.xml | 0 .../bootstrap/discovery/DiscoveryApplication.java | 0 .../cloud/bootstrap/discovery/SecurityConfig.java | 0 .../cloud/bootstrap/discovery/SessionConfig.java | 0 .../src/main/resources/bootstrap.properties | 0 .../discovery/src/main/resources/logback.xml | 0 .../java/com/baeldung/SpringContextLiveTest.java | 0 .../gateway/pom.xml | 0 .../gateway/src/main/angular/ui/.angular-cli.json | 0 .../gateway/src/main/angular/ui/.editorconfig | 0 .../gateway/src/main/angular/ui/.gitignore | 0 .../gateway/src/main/angular/ui/README.md | 0 .../gateway/src/main/angular/ui/e2e/app.e2e-spec.ts | 0 .../gateway/src/main/angular/ui/e2e/app.po.ts | 0 .../src/main/angular/ui/e2e/tsconfig.e2e.json | 0 .../gateway/src/main/angular/ui/karma.conf.js | 0 .../gateway/src/main/angular/ui/package.json | 0 .../gateway/src/main/angular/ui/protractor.conf.js | 0 .../src/main/angular/ui/src/app/app.component.css | 0 .../src/main/angular/ui/src/app/app.component.html | 0 .../src/main/angular/ui/src/app/app.component.ts | 0 .../src/main/angular/ui/src/app/app.module.ts | 0 .../gateway/src/main/angular/ui/src/app/book.ts | 0 .../app/book/book-detail/book-detail.component.css | 0 .../app/book/book-detail/book-detail.component.html | 0 .../app/book/book-detail/book-detail.component.ts | 0 .../src/app/book/book-list/book-list.component.css | 0 .../src/app/book/book-list/book-list.component.html | 0 .../src/app/book/book-list/book-list.component.ts | 0 .../ui/src/app/click-stop-propagation.directive.ts | 0 .../src/main/angular/ui/src/app/http.service.ts | 0 .../src/main/angular/ui/src/app/principal.ts | 0 .../gateway/src/main/angular/ui/src/app/rating.ts | 0 .../angular/ui/src/app/rating/rating.component.css | 0 .../angular/ui/src/app/rating/rating.component.html | 0 .../angular/ui/src/app/rating/rating.component.ts | 0 .../gateway/src/main/angular/ui/src/assets/.gitkeep | 0 .../angular/ui/src/environments/environment.prod.ts | 0 .../main/angular/ui/src/environments/environment.ts | 0 .../gateway/src/main/angular/ui/src/favicon.ico | Bin .../gateway/src/main/angular/ui/src/index.html | 0 .../gateway/src/main/angular/ui/src/main.ts | 0 .../gateway/src/main/angular/ui/src/polyfills.ts | 0 .../gateway/src/main/angular/ui/src/styles.css | 0 .../gateway/src/main/angular/ui/src/test.ts | 0 .../src/main/angular/ui/src/tsconfig.app.json | 0 .../src/main/angular/ui/src/tsconfig.spec.json | 0 .../gateway/src/main/angular/ui/src/typings.d.ts | 0 .../gateway/src/main/angular/ui/tsconfig.json | 0 .../gateway/src/main/angular/ui/tslint.json | 0 .../bootstrap/gateway/AuthenticationController.java | 0 .../cloud/bootstrap/gateway/ErrorPageConfig.java | 0 .../cloud/bootstrap/gateway/GatewayApplication.java | 0 .../cloud/bootstrap/gateway/SecurityConfig.java | 0 .../cloud/bootstrap/gateway/SessionConfig.java | 0 .../cloud/bootstrap/gateway/client/book/Book.java | 0 .../bootstrap/gateway/client/book/BooksClient.java | 0 .../bootstrap/gateway/client/rating/Rating.java | 0 .../gateway/client/rating/RatingsClient.java | 0 .../gateway/controller/CombinedController.java | 0 .../gateway/filter/SessionSavingZuulPreFilter.java | 0 .../gateway/src/main/resources/bootstrap.properties | 0 .../gateway/src/main/resources/logback.xml | 0 .../src/main/resources/static/eureka/css/wro.css | 0 .../static/eureka/fonts/montserrat-webfont.eot | Bin .../static/eureka/fonts/montserrat-webfont.svg | 0 .../static/eureka/fonts/montserrat-webfont.ttf | Bin .../static/eureka/fonts/montserrat-webfont.woff | Bin .../static/eureka/fonts/varela_round-webfont.eot | Bin .../static/eureka/fonts/varela_round-webfont.svg | 0 .../static/eureka/fonts/varela_round-webfont.ttf | Bin .../static/eureka/fonts/varela_round-webfont.woff | Bin .../resources/static/eureka/images/404-icon.png | Bin .../resources/static/eureka/images/homepage-bg.jpg | Bin .../resources/static/eureka/images/platform-bg.png | Bin .../static/eureka/images/platform-spring-xd.png | Bin .../eureka/images/spring-logo-eureka-mobile.png | Bin .../static/eureka/images/spring-logo-eureka.png | Bin .../src/main/resources/static/eureka/js/wro.js | 0 .../src/main/resources/static/home/favicon.ico | Bin .../src/main/resources/static/home/index.html | 0 .../src/main/resources/static/home/inline.bundle.js | 0 .../main/resources/static/home/inline.bundle.js.map | 0 .../src/main/resources/static/home/main.bundle.js | 0 .../main/resources/static/home/main.bundle.js.map | 0 .../main/resources/static/home/polyfills.bundle.js | 0 .../resources/static/home/polyfills.bundle.js.map | 0 .../src/main/resources/static/home/styles.bundle.js | 0 .../main/resources/static/home/styles.bundle.js.map | 0 .../gateway/src/main/resources/static/index.html | 0 .../java/com/baeldung/SpringContextLiveTest.java | 0 .../spring/cloud/bootstrap/gateway/LiveTest.java | 0 .../bootstrap/gateway/SpringContextLiveTest.java | 0 .../gateway/src/test/resources/bootstrap.properties | 0 .../order-service/order-client/pom.xml | 0 .../baeldung/orderservice/client/OrderClient.java | 0 .../orderservice/client/OrderClientImpl.java | 0 .../com/baeldung/orderservice/client/OrderDTO.java | 0 .../baeldung/orderservice/client/OrderResponse.java | 0 .../src/main/resources/application.properties | 0 .../order-service/order-server/pom.xml | 0 .../main/java/com/baeldung/orderservice/Order.java | 0 .../com/baeldung/orderservice/OrderApplication.java | 0 .../com/baeldung/orderservice/OrderService.java | 0 .../src/main/resources/application.properties | 0 .../order-service/pom.xml | 0 .../pom.xml | 4 ++-- .../svc-book/pom.xml | 0 .../bootstrap/svcbook/BookServiceApplication.java | 0 .../spring/cloud/bootstrap/svcbook/DataLoader.java | 0 .../cloud/bootstrap/svcbook/SecurityConfig.java | 0 .../cloud/bootstrap/svcbook/SessionConfig.java | 0 .../spring/cloud/bootstrap/svcbook/book/Book.java | 0 .../bootstrap/svcbook/book/BookController.java | 0 .../svcbook/book/BookNotFoundException.java | 0 .../bootstrap/svcbook/book/BookRepository.java | 0 .../cloud/bootstrap/svcbook/book/BookService.java | 0 .../src/main/resources/bootstrap.properties | 0 .../svc-book/src/main/resources/logback.xml | 0 .../java/com/baeldung/SpringContextLiveTest.java | 0 .../src/test/resources/bootstrap.properties | 0 .../svc-rating/pom.xml | 0 .../cloud/bootstrap/svcrating/DataLoader.java | 0 .../svcrating/RatingServiceApplication.java | 0 .../cloud/bootstrap/svcrating/SecurityConfig.java | 0 .../cloud/bootstrap/svcrating/SessionConfig.java | 0 .../cloud/bootstrap/svcrating/rating/Rating.java | 0 .../svcrating/rating/RatingCacheRepository.java | 0 .../svcrating/rating/RatingController.java | 0 .../svcrating/rating/RatingNotFoundException.java | 0 .../svcrating/rating/RatingRepository.java | 0 .../bootstrap/svcrating/rating/RatingService.java | 0 .../src/main/resources/bootstrap.properties | 0 .../svc-rating/src/main/resources/logback.xml | 0 .../java/com/baeldung/SpringContextLiveTest.java | 0 .../src/test/resources/bootstrap.properties | 0 .../zipkin/pom.xml | 0 .../cloud/bootstrap/zipkin/ZipkinApplication.java | 0 .../zipkin/src/main/resources/bootstrap.properties | 0 .../zipkin/src/main/resources/logback.xml | 0 .../test/java/com/baeldung/SpringContextTest.java | 0 160 files changed, 3 insertions(+), 3 deletions(-) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/README.md (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/application-config/book-service.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/application-config/discovery.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/application-config/gateway.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/application-config/rating-service.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/application-config/zipkin.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/config/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/ConfigApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/SecurityConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/config/src/main/resources/application.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/config/src/main/resources/logback.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/config/src/test/java/com/baeldung/SpringContextTest.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/customer-service/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/customer-service/src/main/java/com/baeldung/customerservice/Customer.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/customer-service/src/main/java/com/baeldung/customerservice/CustomerApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/customer-service/src/main/java/com/baeldung/customerservice/CustomerService.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/customer-service/src/main/resources/application.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/customer-service/src/test/resources/application.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/discovery/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/DiscoveryApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SecurityConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SessionConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/discovery/src/main/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/discovery/src/main/resources/logback.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/discovery/src/test/java/com/baeldung/SpringContextLiveTest.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/.angular-cli.json (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/.editorconfig (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/.gitignore (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/README.md (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/e2e/app.e2e-spec.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/e2e/app.po.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/e2e/tsconfig.e2e.json (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/karma.conf.js (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/package.json (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/protractor.conf.js (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/app.component.css (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/app.component.html (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/app.component.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/app.module.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/book.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.css (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.html (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.css (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.html (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/click-stop-propagation.directive.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/http.service.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/principal.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/rating.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/rating/rating.component.css (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/rating/rating.component.html (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/app/rating/rating.component.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/assets/.gitkeep (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/environments/environment.prod.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/environments/environment.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/favicon.ico (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/index.html (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/main.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/polyfills.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/styles.css (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/test.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/tsconfig.app.json (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/tsconfig.spec.json (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/src/typings.d.ts (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/tsconfig.json (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/angular/ui/tslint.json (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/AuthenticationController.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/ErrorPageConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/GatewayApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SecurityConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SessionConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/Book.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/BooksClient.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/Rating.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/RatingsClient.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/controller/CombinedController.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/filter/SessionSavingZuulPreFilter.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/logback.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/css/wro.css (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.eot (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.svg (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.ttf (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.woff (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.eot (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.svg (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.ttf (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.woff (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/images/404-icon.png (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/images/homepage-bg.jpg (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/images/platform-bg.png (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/images/platform-spring-xd.png (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/images/spring-logo-eureka-mobile.png (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/images/spring-logo-eureka.png (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/eureka/js/wro.js (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/home/favicon.ico (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/home/index.html (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/home/inline.bundle.js (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/home/inline.bundle.js.map (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/home/main.bundle.js (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/home/main.bundle.js.map (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/home/polyfills.bundle.js (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/home/polyfills.bundle.js.map (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/home/styles.bundle.js (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/home/styles.bundle.js.map (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/main/resources/static/index.html (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/test/java/com/baeldung/SpringContextLiveTest.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/LiveTest.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/gateway/src/test/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/order-service/order-client/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClient.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClientImpl.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderDTO.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderResponse.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/order-service/order-client/src/main/resources/application.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/order-service/order-server/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/order-service/order-server/src/main/java/com/baeldung/orderservice/Order.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderService.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/order-service/order-server/src/main/resources/application.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/order-service/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/pom.xml (89%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-book/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/BookServiceApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/DataLoader.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SecurityConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SessionConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/Book.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookController.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookNotFoundException.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookRepository.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookService.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-book/src/main/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-book/src/main/resources/logback.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-book/src/test/java/com/baeldung/SpringContextLiveTest.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-book/src/test/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-rating/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/DataLoader.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/RatingServiceApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SecurityConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SessionConfig.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/Rating.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingCacheRepository.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingController.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingNotFoundException.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingRepository.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingService.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-rating/src/main/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-rating/src/main/resources/logback.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-rating/src/test/java/com/baeldung/SpringContextLiveTest.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/svc-rating/src/test/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/zipkin/pom.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/zipkin/src/main/java/com/baeldung/spring/cloud/bootstrap/zipkin/ZipkinApplication.java (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/zipkin/src/main/resources/bootstrap.properties (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/zipkin/src/main/resources/logback.xml (100%) rename spring-cloud-modules/{spring-cloud-bootstrap-legacy => spring-cloud-bootstrap}/zipkin/src/test/java/com/baeldung/SpringContextTest.java (100%) diff --git a/spring-cloud-modules/pom.xml b/spring-cloud-modules/pom.xml index 2f5410b308..7a4eec679e 100644 --- a/spring-cloud-modules/pom.xml +++ b/spring-cloud-modules/pom.xml @@ -21,7 +21,7 @@ spring-cloud-config spring-cloud-eureka spring-cloud-hystrix - spring-cloud-bootstrap-legacy + spring-cloud-bootstrap spring-cloud-ribbon-client spring-cloud-zookeeper spring-cloud-gateway diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/README.md b/spring-cloud-modules/spring-cloud-bootstrap/README.md similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/README.md rename to spring-cloud-modules/spring-cloud-bootstrap/README.md diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/book-service.properties b/spring-cloud-modules/spring-cloud-bootstrap/application-config/book-service.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/book-service.properties rename to spring-cloud-modules/spring-cloud-bootstrap/application-config/book-service.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/discovery.properties b/spring-cloud-modules/spring-cloud-bootstrap/application-config/discovery.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/discovery.properties rename to spring-cloud-modules/spring-cloud-bootstrap/application-config/discovery.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/gateway.properties b/spring-cloud-modules/spring-cloud-bootstrap/application-config/gateway.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/gateway.properties rename to spring-cloud-modules/spring-cloud-bootstrap/application-config/gateway.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/rating-service.properties b/spring-cloud-modules/spring-cloud-bootstrap/application-config/rating-service.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/rating-service.properties rename to spring-cloud-modules/spring-cloud-bootstrap/application-config/rating-service.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/zipkin.properties b/spring-cloud-modules/spring-cloud-bootstrap/application-config/zipkin.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/application-config/zipkin.properties rename to spring-cloud-modules/spring-cloud-bootstrap/application-config/zipkin.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/config/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap/config/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/config/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap/config/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/ConfigApplication.java b/spring-cloud-modules/spring-cloud-bootstrap/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/ConfigApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/ConfigApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/ConfigApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/SecurityConfig.java b/spring-cloud-modules/spring-cloud-bootstrap/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/SecurityConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/SecurityConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap/config/src/main/java/com/baeldung/spring/cloud/bootstrap/config/SecurityConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-bootstrap/config/src/main/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/resources/application.properties rename to spring-cloud-modules/spring-cloud-bootstrap/config/src/main/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/resources/logback.xml b/spring-cloud-modules/spring-cloud-bootstrap/config/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/main/resources/logback.xml rename to spring-cloud-modules/spring-cloud-bootstrap/config/src/main/resources/logback.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/test/java/com/baeldung/SpringContextTest.java b/spring-cloud-modules/spring-cloud-bootstrap/config/src/test/java/com/baeldung/SpringContextTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/config/src/test/java/com/baeldung/SpringContextTest.java rename to spring-cloud-modules/spring-cloud-bootstrap/config/src/test/java/com/baeldung/SpringContextTest.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap/customer-service/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap/customer-service/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/java/com/baeldung/customerservice/Customer.java b/spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/java/com/baeldung/customerservice/Customer.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/java/com/baeldung/customerservice/Customer.java rename to spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/java/com/baeldung/customerservice/Customer.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/java/com/baeldung/customerservice/CustomerApplication.java b/spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/java/com/baeldung/customerservice/CustomerApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/java/com/baeldung/customerservice/CustomerApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/java/com/baeldung/customerservice/CustomerApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/java/com/baeldung/customerservice/CustomerService.java b/spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/java/com/baeldung/customerservice/CustomerService.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/java/com/baeldung/customerservice/CustomerService.java rename to spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/java/com/baeldung/customerservice/CustomerService.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/main/resources/application.properties rename to spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/main/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/test/resources/application.properties b/spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/test/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/customer-service/src/test/resources/application.properties rename to spring-cloud-modules/spring-cloud-bootstrap/customer-service/src/test/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap/discovery/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap/discovery/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/DiscoveryApplication.java b/spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/DiscoveryApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/DiscoveryApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/DiscoveryApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SecurityConfig.java b/spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SecurityConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SecurityConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SecurityConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SessionConfig.java b/spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SessionConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SessionConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/java/com/baeldung/spring/cloud/bootstrap/discovery/SessionConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/resources/logback.xml b/spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/main/resources/logback.xml rename to spring-cloud-modules/spring-cloud-bootstrap/discovery/src/main/resources/logback.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/test/java/com/baeldung/SpringContextLiveTest.java b/spring-cloud-modules/spring-cloud-bootstrap/discovery/src/test/java/com/baeldung/SpringContextLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/discovery/src/test/java/com/baeldung/SpringContextLiveTest.java rename to spring-cloud-modules/spring-cloud-bootstrap/discovery/src/test/java/com/baeldung/SpringContextLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap/gateway/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/.angular-cli.json b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/.angular-cli.json similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/.angular-cli.json rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/.angular-cli.json diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/.editorconfig b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/.editorconfig similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/.editorconfig rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/.editorconfig diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/.gitignore b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/.gitignore similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/.gitignore rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/.gitignore diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/README.md b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/README.md similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/README.md rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/README.md diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/e2e/app.e2e-spec.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/e2e/app.e2e-spec.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/e2e/app.e2e-spec.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/e2e/app.e2e-spec.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/e2e/app.po.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/e2e/app.po.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/e2e/app.po.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/e2e/app.po.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/e2e/tsconfig.e2e.json b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/e2e/tsconfig.e2e.json similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/e2e/tsconfig.e2e.json rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/e2e/tsconfig.e2e.json diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/karma.conf.js b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/karma.conf.js similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/karma.conf.js rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/karma.conf.js diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/package.json b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/package.json similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/package.json rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/package.json diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/protractor.conf.js b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/protractor.conf.js similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/protractor.conf.js rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/protractor.conf.js diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.component.css b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.component.css similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.component.css rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.component.css diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.component.html b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.component.html similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.component.html rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.component.html diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.component.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.component.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.component.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.component.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.module.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.module.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/app.module.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/app.module.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.css b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.css similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.css rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.css diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.html b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.html similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.html rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.html diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-detail/book-detail.component.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.css b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.css similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.css rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.css diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.html b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.html similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.html rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.html diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/book/book-list/book-list.component.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/click-stop-propagation.directive.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/click-stop-propagation.directive.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/click-stop-propagation.directive.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/click-stop-propagation.directive.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/http.service.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/http.service.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/http.service.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/http.service.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/principal.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/principal.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/principal.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/principal.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating/rating.component.css b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating/rating.component.css similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating/rating.component.css rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating/rating.component.css diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating/rating.component.html b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating/rating.component.html similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating/rating.component.html rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating/rating.component.html diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating/rating.component.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating/rating.component.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/app/rating/rating.component.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/app/rating/rating.component.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/assets/.gitkeep b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/assets/.gitkeep similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/assets/.gitkeep rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/assets/.gitkeep diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/environments/environment.prod.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/environments/environment.prod.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/environments/environment.prod.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/environments/environment.prod.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/environments/environment.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/environments/environment.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/environments/environment.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/environments/environment.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/favicon.ico b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/favicon.ico similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/favicon.ico rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/favicon.ico diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/index.html b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/index.html similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/index.html rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/index.html diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/main.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/main.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/main.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/main.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/polyfills.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/polyfills.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/polyfills.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/polyfills.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/styles.css b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/styles.css similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/styles.css rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/styles.css diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/test.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/test.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/test.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/test.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/tsconfig.app.json b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/tsconfig.app.json similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/tsconfig.app.json rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/tsconfig.app.json diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/tsconfig.spec.json b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/tsconfig.spec.json similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/tsconfig.spec.json rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/tsconfig.spec.json diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/typings.d.ts b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/typings.d.ts similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/src/typings.d.ts rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/src/typings.d.ts diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/tsconfig.json b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/tsconfig.json similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/tsconfig.json rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/tsconfig.json diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/tslint.json b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/tslint.json similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/angular/ui/tslint.json rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/angular/ui/tslint.json diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/AuthenticationController.java b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/AuthenticationController.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/AuthenticationController.java rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/AuthenticationController.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/ErrorPageConfig.java b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/ErrorPageConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/ErrorPageConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/ErrorPageConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/GatewayApplication.java b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/GatewayApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/GatewayApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/GatewayApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SecurityConfig.java b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SecurityConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SecurityConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SecurityConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SessionConfig.java b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SessionConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SessionConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/SessionConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/Book.java b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/Book.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/Book.java rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/Book.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/BooksClient.java b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/BooksClient.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/BooksClient.java rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/book/BooksClient.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/Rating.java b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/Rating.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/Rating.java rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/Rating.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/RatingsClient.java b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/RatingsClient.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/RatingsClient.java rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/client/rating/RatingsClient.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/controller/CombinedController.java b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/controller/CombinedController.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/controller/CombinedController.java rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/controller/CombinedController.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/filter/SessionSavingZuulPreFilter.java b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/filter/SessionSavingZuulPreFilter.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/filter/SessionSavingZuulPreFilter.java rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/bootstrap/gateway/filter/SessionSavingZuulPreFilter.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/logback.xml b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/logback.xml rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/logback.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/css/wro.css b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/css/wro.css similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/css/wro.css rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/css/wro.css diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.eot b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.eot similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.eot rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.eot diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.svg b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.svg similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.svg rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.svg diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.ttf b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.ttf similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.ttf rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.ttf diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.woff b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.woff similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.woff rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/montserrat-webfont.woff diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.eot b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.eot similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.eot rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.eot diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.svg b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.svg similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.svg rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.svg diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.ttf b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.ttf similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.ttf rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.ttf diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.woff b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.woff similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.woff rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/fonts/varela_round-webfont.woff diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/404-icon.png b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/404-icon.png similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/404-icon.png rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/404-icon.png diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/homepage-bg.jpg b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/homepage-bg.jpg similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/homepage-bg.jpg rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/homepage-bg.jpg diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/platform-bg.png b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/platform-bg.png similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/platform-bg.png rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/platform-bg.png diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/platform-spring-xd.png b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/platform-spring-xd.png similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/platform-spring-xd.png rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/platform-spring-xd.png diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/spring-logo-eureka-mobile.png b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/spring-logo-eureka-mobile.png similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/spring-logo-eureka-mobile.png rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/spring-logo-eureka-mobile.png diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/spring-logo-eureka.png b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/spring-logo-eureka.png similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/images/spring-logo-eureka.png rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/images/spring-logo-eureka.png diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/js/wro.js b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/js/wro.js similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/eureka/js/wro.js rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/eureka/js/wro.js diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/favicon.ico b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/favicon.ico similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/favicon.ico rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/favicon.ico diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/index.html b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/index.html similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/index.html rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/index.html diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/inline.bundle.js b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/inline.bundle.js similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/inline.bundle.js rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/inline.bundle.js diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/inline.bundle.js.map b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/inline.bundle.js.map similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/inline.bundle.js.map rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/inline.bundle.js.map diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/main.bundle.js b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/main.bundle.js similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/main.bundle.js rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/main.bundle.js diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/main.bundle.js.map b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/main.bundle.js.map similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/main.bundle.js.map rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/main.bundle.js.map diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/polyfills.bundle.js b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/polyfills.bundle.js similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/polyfills.bundle.js rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/polyfills.bundle.js diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/polyfills.bundle.js.map b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/polyfills.bundle.js.map similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/polyfills.bundle.js.map rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/polyfills.bundle.js.map diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/styles.bundle.js b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/styles.bundle.js similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/styles.bundle.js rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/styles.bundle.js diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/styles.bundle.js.map b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/styles.bundle.js.map similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/home/styles.bundle.js.map rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/home/styles.bundle.js.map diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/index.html b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/index.html similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/main/resources/static/index.html rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/main/resources/static/index.html diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/java/com/baeldung/SpringContextLiveTest.java b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/SpringContextLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/java/com/baeldung/SpringContextLiveTest.java rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/SpringContextLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/LiveTest.java b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/LiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/LiveTest.java rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/LiveTest.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/gateway/src/test/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap/gateway/src/test/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClient.java b/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClient.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClient.java rename to spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClient.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClientImpl.java b/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClientImpl.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClientImpl.java rename to spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderClientImpl.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderDTO.java b/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderDTO.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderDTO.java rename to spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderDTO.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderResponse.java b/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderResponse.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderResponse.java rename to spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/java/com/baeldung/orderservice/client/OrderResponse.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-client/src/main/resources/application.properties rename to spring-cloud-modules/spring-cloud-bootstrap/order-service/order-client/src/main/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/java/com/baeldung/orderservice/Order.java b/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/java/com/baeldung/orderservice/Order.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/java/com/baeldung/orderservice/Order.java rename to spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/java/com/baeldung/orderservice/Order.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderApplication.java b/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderService.java b/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderService.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderService.java rename to spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/java/com/baeldung/orderservice/OrderService.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/resources/application.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/order-server/src/main/resources/application.properties rename to spring-cloud-modules/spring-cloud-bootstrap/order-service/order-server/src/main/resources/application.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap/order-service/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/order-service/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap/order-service/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap/pom.xml similarity index 89% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap/pom.xml index 597f669c69..1e97082db1 100644 --- a/spring-cloud-modules/spring-cloud-bootstrap-legacy/pom.xml +++ b/spring-cloud-modules/spring-cloud-bootstrap/pom.xml @@ -3,9 +3,9 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - spring-cloud-bootstrap-legacy + spring-cloud-bootstrap 1.0.0-SNAPSHOT - spring-cloud-bootstrap-legacy + spring-cloud-bootstrap pom diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap/svc-book/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap/svc-book/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/BookServiceApplication.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/BookServiceApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/BookServiceApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/BookServiceApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/DataLoader.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/DataLoader.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/DataLoader.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/DataLoader.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SecurityConfig.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SecurityConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SecurityConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SecurityConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SessionConfig.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SessionConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SessionConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/SessionConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/Book.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/Book.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/Book.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/Book.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookController.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookController.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookController.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookController.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookNotFoundException.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookNotFoundException.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookNotFoundException.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookNotFoundException.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookRepository.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookRepository.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookRepository.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookRepository.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookService.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookService.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookService.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/java/com/baeldung/spring/cloud/bootstrap/svcbook/book/BookService.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/resources/logback.xml b/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/main/resources/logback.xml rename to spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/main/resources/logback.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/test/java/com/baeldung/SpringContextLiveTest.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/test/java/com/baeldung/SpringContextLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/test/java/com/baeldung/SpringContextLiveTest.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/test/java/com/baeldung/SpringContextLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/test/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/test/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-book/src/test/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap/svc-book/src/test/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap/svc-rating/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/DataLoader.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/DataLoader.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/DataLoader.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/DataLoader.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/RatingServiceApplication.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/RatingServiceApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/RatingServiceApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/RatingServiceApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SecurityConfig.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SecurityConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SecurityConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SecurityConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SessionConfig.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SessionConfig.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SessionConfig.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SessionConfig.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/Rating.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/Rating.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/Rating.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/Rating.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingCacheRepository.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingCacheRepository.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingCacheRepository.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingCacheRepository.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingController.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingController.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingController.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingController.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingNotFoundException.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingNotFoundException.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingNotFoundException.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingNotFoundException.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingRepository.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingRepository.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingRepository.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingRepository.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingService.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingService.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingService.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingService.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/resources/logback.xml b/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/main/resources/logback.xml rename to spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/main/resources/logback.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/test/java/com/baeldung/SpringContextLiveTest.java b/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/test/java/com/baeldung/SpringContextLiveTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/test/java/com/baeldung/SpringContextLiveTest.java rename to spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/test/java/com/baeldung/SpringContextLiveTest.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/test/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/test/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/svc-rating/src/test/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap/svc-rating/src/test/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/pom.xml b/spring-cloud-modules/spring-cloud-bootstrap/zipkin/pom.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/pom.xml rename to spring-cloud-modules/spring-cloud-bootstrap/zipkin/pom.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/main/java/com/baeldung/spring/cloud/bootstrap/zipkin/ZipkinApplication.java b/spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/main/java/com/baeldung/spring/cloud/bootstrap/zipkin/ZipkinApplication.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/main/java/com/baeldung/spring/cloud/bootstrap/zipkin/ZipkinApplication.java rename to spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/main/java/com/baeldung/spring/cloud/bootstrap/zipkin/ZipkinApplication.java diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/main/resources/bootstrap.properties b/spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/main/resources/bootstrap.properties rename to spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/main/resources/bootstrap.properties diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/main/resources/logback.xml b/spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/main/resources/logback.xml rename to spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/main/resources/logback.xml diff --git a/spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/test/java/com/baeldung/SpringContextTest.java b/spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/test/java/com/baeldung/SpringContextTest.java similarity index 100% rename from spring-cloud-modules/spring-cloud-bootstrap-legacy/zipkin/src/test/java/com/baeldung/SpringContextTest.java rename to spring-cloud-modules/spring-cloud-bootstrap/zipkin/src/test/java/com/baeldung/SpringContextTest.java From 306949719b0914ba02a54c2a1b6eda095cd0ff61 Mon Sep 17 00:00:00 2001 From: Kapil Khandelwal Date: Tue, 3 Jan 2023 01:31:12 +0530 Subject: [PATCH 10/17] Fixing the No such DSL method Error in Jenkins Pipeline (#13223) --- .../jenkins-jobs/dsl-error-fix/no-such-dsl-method-job | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 jenkins-modules/jenkins-jobs/dsl-error-fix/no-such-dsl-method-job diff --git a/jenkins-modules/jenkins-jobs/dsl-error-fix/no-such-dsl-method-job b/jenkins-modules/jenkins-jobs/dsl-error-fix/no-such-dsl-method-job new file mode 100644 index 0000000000..f68cb70c2f --- /dev/null +++ b/jenkins-modules/jenkins-jobs/dsl-error-fix/no-such-dsl-method-job @@ -0,0 +1,10 @@ +pipeline { + agent any + stages { + stage('Build') { + steps { + mvn 'clean install' + } + } + } +} From d6bc6bb5d2dc2fde75dcb0335589514d9256cca0 Mon Sep 17 00:00:00 2001 From: cesarevalenti90 <50798547+cesarevalenti90@users.noreply.github.com> Date: Mon, 2 Jan 2023 21:08:01 +0100 Subject: [PATCH 11/17] BAEL-6057 - Implementing Retry In Kafka Consumer (#13229) * Added test class for a simple shallow copy and deep copy * Added test class for a simple shallow copy and deep copy * refactor naming of test method * formatted * refactor test whenIsAShallowCopyDoneByCopyConstructor_thenImmutableObjectWillNotChange * Renamed package and added md file * refactor README.md * first push * refactor * Revert "refactor README.md" This reverts commit eae77c453ba0bf2af62bad52dc1ed61d07931e34. * Revert "Renamed package and added md file" This reverts commit 42c6f97cbde39cc0a5e0bacf34f86a32ded4f4aa. * Revert "refactor test whenIsAShallowCopyDoneByCopyConstructor_thenImmutableObjectWillNotChange" This reverts commit 44fb57fe2b51857f960dc216d33508e718e5414f. * Revert "formatted" This reverts commit 44be87ef25e566b8e9175cb0fdeed7f0ef485dd3. * Revert "refactor naming of test method" This reverts commit 6133c31057e39b19c4978f960cda1c0ba5559aae. * Revert "Added test class for a simple shallow copy and deep copy" This reverts commit 2cae083578883ae693d1c5e76fd4948e213e9ea0. * Revert "Added test class for a simple shallow copy and deep copy" This reverts commit f43312e2c1979410409f46020a3f7d555e11e966. * Merge prohect java-supplier-callable to project core-java-lambdas * adjusted package name * removed AbstractAgeCalculator.java * added test for supplier-callable * first push for article "Implementing Retry In Kafka Consumer" Co-authored-by: Cesare --- .../spring/kafka/KafkaConsumerConfig.java | 35 +++++++- .../spring/kafka/MultiTypeKafkaListener.java | 6 ++ .../kafka/RetryableApplicationKafkaApp.java | 14 ++++ .../src/main/resources/application.properties | 3 + .../EmbeddedKafkaIntegrationTest.java | 11 ++- .../kafka/KafkaRetryableIntegrationTest.java | 84 +++++++++++++++++++ 6 files changed, 147 insertions(+), 6 deletions(-) create mode 100644 spring-kafka/src/main/java/com/baeldung/spring/kafka/RetryableApplicationKafkaApp.java create mode 100644 spring-kafka/src/test/java/com/baeldung/spring/kafka/KafkaRetryableIntegrationTest.java diff --git a/spring-kafka/src/main/java/com/baeldung/spring/kafka/KafkaConsumerConfig.java b/spring-kafka/src/main/java/com/baeldung/spring/kafka/KafkaConsumerConfig.java index e8aa63a88d..463d3209ea 100644 --- a/spring-kafka/src/main/java/com/baeldung/spring/kafka/KafkaConsumerConfig.java +++ b/spring-kafka/src/main/java/com/baeldung/spring/kafka/KafkaConsumerConfig.java @@ -1,5 +1,6 @@ package com.baeldung.spring.kafka; +import java.net.SocketTimeoutException; import java.util.HashMap; import java.util.Map; @@ -8,15 +9,20 @@ import org.apache.kafka.common.serialization.StringDeserializer; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; import org.springframework.kafka.annotation.EnableKafka; import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory; import org.springframework.kafka.core.ConsumerFactory; import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.listener.ContainerProperties; +import org.springframework.kafka.listener.DefaultErrorHandler; import org.springframework.kafka.support.converter.RecordMessageConverter; import org.springframework.kafka.support.converter.StringJsonMessageConverter; import org.springframework.kafka.support.mapping.DefaultJackson2JavaTypeMapper; import org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper; import org.springframework.kafka.support.serializer.JsonDeserializer; +import org.springframework.util.backoff.BackOff; +import org.springframework.util.backoff.FixedBackOff; @EnableKafka @Configuration @@ -25,6 +31,12 @@ public class KafkaConsumerConfig { @Value(value = "${spring.kafka.bootstrap-servers}") private String bootstrapAddress; + @Value(value = "${kafka.backoff.interval}") + private Long interval; + + @Value(value = "${kafka.backoff.max_failure}") + private Long maxAttempts; + public ConsumerFactory consumerFactory(String groupId) { Map props = new HashMap<>(); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress); @@ -71,7 +83,7 @@ public class KafkaConsumerConfig { public ConcurrentKafkaListenerContainerFactory filterKafkaListenerContainerFactory() { ConcurrentKafkaListenerContainerFactory factory = kafkaListenerContainerFactory("filter"); factory.setRecordFilterStrategy(record -> record.value() - .contains("World")); + .contains("World")); return factory; } @@ -83,7 +95,7 @@ public class KafkaConsumerConfig { } @Bean - public ConcurrentKafkaListenerContainerFactory greetingKafkaListenerContainerFactory() { + public ConcurrentKafkaListenerContainerFactory kafkaListenerContainerFactory() { ConcurrentKafkaListenerContainerFactory factory = new ConcurrentKafkaListenerContainerFactory<>(); factory.setConsumerFactory(greetingConsumerFactory()); return factory; @@ -109,15 +121,32 @@ public class KafkaConsumerConfig { props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress); props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class); + props.put(ConsumerConfig.GROUP_ID_CONFIG, "group_id_test"); return new DefaultKafkaConsumerFactory<>(props); } @Bean - public ConcurrentKafkaListenerContainerFactory multiTypeKafkaListenerContainerFactory() { + @Primary + public ConcurrentKafkaListenerContainerFactory greetingKafkaListenerContainerFactory() { ConcurrentKafkaListenerContainerFactory factory = new ConcurrentKafkaListenerContainerFactory<>(); factory.setConsumerFactory(multiTypeConsumerFactory()); factory.setMessageConverter(multiTypeConverter()); + factory.setCommonErrorHandler(errorHandler()); + factory.getContainerProperties() + .setAckMode(ContainerProperties.AckMode.RECORD); return factory; } + @Bean + public DefaultErrorHandler errorHandler() { + BackOff fixedBackOff = new FixedBackOff(interval, maxAttempts); + DefaultErrorHandler errorHandler = new DefaultErrorHandler((consumerRecord, e) -> { + System.out.println(String.format("consumed record %s because this exception was thrown",consumerRecord.toString(),e.getClass().getName())); + }, fixedBackOff); + //Commented because of the test + //errorHandler.addRetryableExceptions(SocketTimeoutException.class,RuntimeException.class); + errorHandler.addNotRetryableExceptions(NullPointerException.class); + return errorHandler; + } + } diff --git a/spring-kafka/src/main/java/com/baeldung/spring/kafka/MultiTypeKafkaListener.java b/spring-kafka/src/main/java/com/baeldung/spring/kafka/MultiTypeKafkaListener.java index 9afb5ff0b6..4b43c84f15 100644 --- a/spring-kafka/src/main/java/com/baeldung/spring/kafka/MultiTypeKafkaListener.java +++ b/spring-kafka/src/main/java/com/baeldung/spring/kafka/MultiTypeKafkaListener.java @@ -2,6 +2,7 @@ package com.baeldung.spring.kafka; import org.springframework.kafka.annotation.KafkaHandler; import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.messaging.MessagingException; import org.springframework.stereotype.Component; @Component @@ -9,7 +10,12 @@ import org.springframework.stereotype.Component; public class MultiTypeKafkaListener { @KafkaHandler + //@RetryableTopic(backoff = @Backoff(value = 3000L), attempts = "5", autoCreateTopics = "false",include = SocketTimeoutException.class, exclude = NullPointerException.class) public void handleGreeting(Greeting greeting) { + if (greeting.getName() + .equalsIgnoreCase("test")) { + throw new MessagingException("test not allowed"); + } System.out.println("Greeting received: " + greeting); } diff --git a/spring-kafka/src/main/java/com/baeldung/spring/kafka/RetryableApplicationKafkaApp.java b/spring-kafka/src/main/java/com/baeldung/spring/kafka/RetryableApplicationKafkaApp.java new file mode 100644 index 0000000000..e43207829a --- /dev/null +++ b/spring-kafka/src/main/java/com/baeldung/spring/kafka/RetryableApplicationKafkaApp.java @@ -0,0 +1,14 @@ +package com.baeldung.spring.kafka; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Import; + +@SpringBootApplication +@Import(value = { KafkaTopicConfig.class, KafkaConsumerConfig.class, KafkaProducerConfig.class }) +public class RetryableApplicationKafkaApp { + + public static void main(String[] args) { + SpringApplication.run(RetryableApplicationKafkaApp.class, args); + } +} diff --git a/spring-kafka/src/main/resources/application.properties b/spring-kafka/src/main/resources/application.properties index c57537e2af..691b6f55b7 100644 --- a/spring-kafka/src/main/resources/application.properties +++ b/spring-kafka/src/main/resources/application.properties @@ -14,4 +14,7 @@ monitor.producer.simulate=true monitor.consumer.simulate=true monitor.kafka.consumer.groupid.simulate=baeldungGrpSimulate test.topic=testtopic1 +kafka.backoff.interval=9000 +kafka.backoff.max_failure=5 + diff --git a/spring-kafka/src/test/java/com/baeldung/kafka/embedded/EmbeddedKafkaIntegrationTest.java b/spring-kafka/src/test/java/com/baeldung/kafka/embedded/EmbeddedKafkaIntegrationTest.java index eebcf778be..030d166ca4 100644 --- a/spring-kafka/src/test/java/com/baeldung/kafka/embedded/EmbeddedKafkaIntegrationTest.java +++ b/spring-kafka/src/test/java/com/baeldung/kafka/embedded/EmbeddedKafkaIntegrationTest.java @@ -1,7 +1,6 @@ package com.baeldung.kafka.embedded; import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -16,6 +15,8 @@ import org.springframework.kafka.core.KafkaTemplate; import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; +import com.fasterxml.jackson.databind.ObjectMapper; + @SpringBootTest @DirtiesContext @EmbeddedKafka(partitions = 1, brokerProperties = { "listeners=PLAINTEXT://localhost:9092", "port=9092" }) @@ -33,6 +34,8 @@ class EmbeddedKafkaIntegrationTest { @Value("${test.topic}") private String topic; + private ObjectMapper objectMapper = new ObjectMapper(); + @BeforeEach void setup() { consumer.resetLatch(); @@ -44,7 +47,8 @@ class EmbeddedKafkaIntegrationTest { template.send(topic, data); - boolean messageConsumed = consumer.getLatch().await(10, TimeUnit.SECONDS); + boolean messageConsumed = consumer.getLatch() + .await(10, TimeUnit.SECONDS); assertTrue(messageConsumed); assertThat(consumer.getPayload(), containsString(data)); } @@ -55,7 +59,8 @@ class EmbeddedKafkaIntegrationTest { producer.send(topic, data); - boolean messageConsumed = consumer.getLatch().await(10, TimeUnit.SECONDS); + boolean messageConsumed = consumer.getLatch() + .await(10, TimeUnit.SECONDS); assertTrue(messageConsumed); assertThat(consumer.getPayload(), containsString(data)); } diff --git a/spring-kafka/src/test/java/com/baeldung/spring/kafka/KafkaRetryableIntegrationTest.java b/spring-kafka/src/test/java/com/baeldung/spring/kafka/KafkaRetryableIntegrationTest.java new file mode 100644 index 0000000000..029031923e --- /dev/null +++ b/spring-kafka/src/test/java/com/baeldung/spring/kafka/KafkaRetryableIntegrationTest.java @@ -0,0 +1,84 @@ +package com.baeldung.spring.kafka; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.config.KafkaListenerEndpointRegistry; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.listener.AcknowledgingConsumerAwareMessageListener; +import org.springframework.kafka.listener.ConcurrentMessageListenerContainer; +import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.context.EmbeddedKafka; + +import com.fasterxml.jackson.databind.ObjectMapper; + +@SpringBootTest(classes = RetryableApplicationKafkaApp.class) +@EmbeddedKafka(partitions = 1, brokerProperties = { "listeners=PLAINTEXT://localhost:9092", "port=9092" }) +public class KafkaRetryableIntegrationTest { + @ClassRule + public static EmbeddedKafkaBroker embeddedKafka = new EmbeddedKafkaBroker(1, true, "multitype"); + + @Autowired + private KafkaListenerEndpointRegistry registry; + + @Autowired + private KafkaTemplate template; + + private ObjectMapper objectMapper = new ObjectMapper(); + + private static final String CONTAINER_GROUP = "multiGroup"; + + private static final String TOPIC = "topic"; + + @Before + public void setup() { + System.setProperty("spring.kafka.bootstrap-servers", embeddedKafka.getBrokersAsString()); + } + + @Test + public void givenEmbeddedKafkaBroker_whenSendingAWellFormedMessage_thenMessageIsConsumed() throws Exception { + ConcurrentMessageListenerContainer container = (ConcurrentMessageListenerContainer) registry.getListenerContainer(CONTAINER_GROUP); + container.stop(); + @SuppressWarnings("unchecked") AcknowledgingConsumerAwareMessageListener messageListener = (AcknowledgingConsumerAwareMessageListener) container.getContainerProperties() + .getMessageListener(); + CountDownLatch latch = new CountDownLatch(1); + container.getContainerProperties() + .setMessageListener((AcknowledgingConsumerAwareMessageListener) (data, acknowledgment, consumer) -> { + messageListener.onMessage(data, acknowledgment, consumer); + latch.countDown(); + }); + Greeting greeting = new Greeting("test1", "test2"); + container.start(); + template.send(TOPIC, objectMapper.writeValueAsString(greeting)); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + } + + @Test + public void givenEmbeddedKafkaBroker_whenSendingAMalFormedMessage_thenMessageIsConsumedAfterRetry() throws Exception { + ConcurrentMessageListenerContainer container = (ConcurrentMessageListenerContainer) registry.getListenerContainer(CONTAINER_GROUP); + container.stop(); + @SuppressWarnings("unchecked") AcknowledgingConsumerAwareMessageListener messageListener = (AcknowledgingConsumerAwareMessageListener) container.getContainerProperties() + .getMessageListener(); + CountDownLatch latch = new CountDownLatch(1); + container.getContainerProperties() + .setMessageListener((AcknowledgingConsumerAwareMessageListener) (data, acknowledgment, consumer) -> { + messageListener.onMessage(data, acknowledgment, consumer); + latch.countDown(); + }); + container.start(); + Greeting greeting = new Greeting("test", "test"); + template.send(TOPIC, objectMapper.writeValueAsString(greeting)); + //this message will go on error + Greeting greeting2 = new Greeting("test2", "test2"); + template.send(TOPIC, objectMapper.writeValueAsString(greeting2)); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + } + +} From ca9fecfaae3aa490e8832ffe0350b6b6df18302a Mon Sep 17 00:00:00 2001 From: neha298 <32795246+neha298@users.noreply.github.com> Date: Tue, 3 Jan 2023 18:02:13 +0530 Subject: [PATCH 12/17] Multiple repositories in Gradle (#13226) * Creating a deep vs shallow copy of an object * WIP: Initial commit * Publish package to GitHub registry * Import library from package registry * Evaluation code removal Co-authored-by: neha --- .../multiple-repositories/build.gradle | 29 +++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + .../multiple-repositories/gradlew | 234 ++++++++++++++++++ .../multiple-repositories/gradlew.bat | 89 +++++++ .../multiple-repositories/settings.gradle | 1 + .../gradle/multiplerepositories/Student.java | 26 ++ .../MultipleRepositoryTest.java | 19 ++ .../publish-package/build.gradle | 33 +++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59821 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + .../publish-package/gradlew | 234 ++++++++++++++++++ .../publish-package/gradlew.bat | 89 +++++++ .../publish-package/settings.gradle | 1 + .../baeldung/gradle/publish_package/User.java | 35 +++ 15 files changed, 800 insertions(+) create mode 100644 gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/build.gradle create mode 100644 gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/gradle/wrapper/gradle-wrapper.properties create mode 100755 gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/gradlew create mode 100644 gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/gradlew.bat create mode 100644 gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/settings.gradle create mode 100644 gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/src/main/java/com/baeldung/gradle/multiplerepositories/Student.java create mode 100644 gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/src/test/java/com/baeldung/gradle/multiplerepositories/MultipleRepositoryTest.java create mode 100644 gradle-modules/gradle-7/multiple-repositories-demo/publish-package/build.gradle create mode 100644 gradle-modules/gradle-7/multiple-repositories-demo/publish-package/gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle-modules/gradle-7/multiple-repositories-demo/publish-package/gradle/wrapper/gradle-wrapper.properties create mode 100755 gradle-modules/gradle-7/multiple-repositories-demo/publish-package/gradlew create mode 100644 gradle-modules/gradle-7/multiple-repositories-demo/publish-package/gradlew.bat create mode 100644 gradle-modules/gradle-7/multiple-repositories-demo/publish-package/settings.gradle create mode 100644 gradle-modules/gradle-7/multiple-repositories-demo/publish-package/src/main/java/com/baeldung/gradle/publish_package/User.java diff --git a/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/build.gradle b/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/build.gradle new file mode 100644 index 0000000000..355744da86 --- /dev/null +++ b/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/build.gradle @@ -0,0 +1,29 @@ +plugins { + id 'java' +} + +group = "com.baeldung.gradle" +version = "1.0.0-SNAPSHOT" +sourceCompatibility = JavaVersion.VERSION_17 + +repositories { + mavenLocal() + mavenCentral() + maven { + name = "GitHubPackages" + url = "https://maven.pkg.github.com/eugenp/tutorials" + credentials { + username = project.USERNAME + password = project.GITHUB_TOKEN + } + } +} + +dependencies { + implementation('com.baeldung.gradle:publish-package:1.0.0-SNAPSHOT') + testImplementation("org.junit.jupiter:junit-jupiter-engine:5.9.0") +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/gradle/wrapper/gradle-wrapper.jar b/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/gradle/wrapper/gradle-wrapper.properties b/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..070cb702f0 --- /dev/null +++ b/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/gradlew b/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/gradlew new file mode 100755 index 0000000000..1b6c787337 --- /dev/null +++ b/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/gradlew.bat b/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/gradlew.bat new file mode 100644 index 0000000000..107acd32c4 --- /dev/null +++ b/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/settings.gradle b/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/settings.gradle new file mode 100644 index 0000000000..0177937493 --- /dev/null +++ b/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/settings.gradle @@ -0,0 +1 @@ +rootProject.name = "multiple-repositories" diff --git a/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/src/main/java/com/baeldung/gradle/multiplerepositories/Student.java b/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/src/main/java/com/baeldung/gradle/multiplerepositories/Student.java new file mode 100644 index 0000000000..dcb28a3742 --- /dev/null +++ b/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/src/main/java/com/baeldung/gradle/multiplerepositories/Student.java @@ -0,0 +1,26 @@ +package com.baeldung.gradle.multiplerepositories; + +import com.baeldung.gradle.publishPackage.User; + +public class Student extends User { + + private String studentCode; + + private String lastInstitution; + + public String getStudentCode() { + return studentCode; + } + + public void setStudentCode(String studentCode) { + this.studentCode = studentCode; + } + + public String getLastInstitution() { + return lastInstitution; + } + + public void setLastInstitution(String lastInstitution) { + this.lastInstitution = lastInstitution; + } +} diff --git a/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/src/test/java/com/baeldung/gradle/multiplerepositories/MultipleRepositoryTest.java b/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/src/test/java/com/baeldung/gradle/multiplerepositories/MultipleRepositoryTest.java new file mode 100644 index 0000000000..d0a72d9b3c --- /dev/null +++ b/gradle-modules/gradle-7/multiple-repositories-demo/multiple-repositories/src/test/java/com/baeldung/gradle/multiplerepositories/MultipleRepositoryTest.java @@ -0,0 +1,19 @@ +package com.baeldung.gradle.multiplerepositories; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class MultipleRepositoryTest { + + @Test + public void testPublishedPackage() { + Student student = new Student(); + student.setId(1); + student.setStudentCode("CD-875"); + student.setName("John Doe"); + student.setLastInstitution("Institute of Technology"); + + assertEquals("John Doe", student.getName()); + } +} diff --git a/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/build.gradle b/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/build.gradle new file mode 100644 index 0000000000..bd97650e9c --- /dev/null +++ b/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/build.gradle @@ -0,0 +1,33 @@ +plugins { + id "maven-publish" + id "java" +} + +group = "com.baeldung.gradle" +version = "1.0.0-SNAPSHOT" + +repositories { + mavenLocal() + mavenCentral() +} + +publishing { + publications { + register("jar", MavenPublication) { + from(components["java"]) + pom { + url.set("https://github.com/eugenp/tutorials.git") + } + } + } + repositories { + maven { + name = "GitHubPackages" + url = "https://maven.pkg.github.com/eugenp/tutorials" + credentials { + username = project.USERNAME + password = project.GITHUB_TOKEN + } + } + } +} diff --git a/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/gradle/wrapper/gradle-wrapper.jar b/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..41d9927a4d4fb3f96a785543079b8df6723c946b GIT binary patch literal 59821 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 literal 0 HcmV?d00001 diff --git a/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/gradle/wrapper/gradle-wrapper.properties b/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..070cb702f0 --- /dev/null +++ b/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/gradlew b/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/gradlew new file mode 100755 index 0000000000..1b6c787337 --- /dev/null +++ b/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/gradlew.bat b/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/gradlew.bat new file mode 100644 index 0000000000..107acd32c4 --- /dev/null +++ b/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/settings.gradle b/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/settings.gradle new file mode 100644 index 0000000000..9ccd121d0d --- /dev/null +++ b/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/settings.gradle @@ -0,0 +1 @@ +rootProject.name = "publish-package" diff --git a/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/src/main/java/com/baeldung/gradle/publish_package/User.java b/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/src/main/java/com/baeldung/gradle/publish_package/User.java new file mode 100644 index 0000000000..bc612d038b --- /dev/null +++ b/gradle-modules/gradle-7/multiple-repositories-demo/publish-package/src/main/java/com/baeldung/gradle/publish_package/User.java @@ -0,0 +1,35 @@ +package com.baeldung.gradle.publish_package; + +import java.util.Date; + +public class User { + private Integer id; + + private String name; + + private Date dob; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Date getDob() { + return dob; + } + + public void setDob(Date dob) { + this.dob = dob; + } +} From 84a93ffbd4bca171159760a4ce1dc6733ad5545c Mon Sep 17 00:00:00 2001 From: Daniel Strmecki Date: Tue, 3 Jan 2023 14:52:58 +0100 Subject: [PATCH 13/17] Feature/bael 5756 choose api (#13227) * BAEL-5756: Rest controller * BAEL-5756: GraphQL controller (without tests) * BAEL-5756: Fix GraphQL test * BAEL-5756: Fix GraphQL test 2 * BAEL-5756: GRPC working * BAEL-5756: GRPC with Spring Boot * BAEL-5756: Books proto service * BAEL-5756: Fix grpc integration test * BAEL-5756: Refactor * BAEL-5756: Revert some changes * BAEL-5756: Fix integration tests port issue between gRPC and GraphQL * BAEL-5756: Fix pom merge issue * BAEL-5756: Fix typo --- .../spring-boot-graphql/pom.xml | 86 +++++++++---------- .../main/resources/application-chooseapi.yml | 4 +- ...BooksControllerGraphQLIntegrationTest.java | 4 +- .../BooksControllerRestIntegrationTest.java | 4 +- 4 files changed, 52 insertions(+), 46 deletions(-) diff --git a/spring-boot-modules/spring-boot-graphql/pom.xml b/spring-boot-modules/spring-boot-graphql/pom.xml index b4b449166f..bb475679ad 100644 --- a/spring-boot-modules/spring-boot-graphql/pom.xml +++ b/spring-boot-modules/spring-boot-graphql/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-boot-graphql spring-boot-graphql @@ -13,6 +13,47 @@ 1.0.0-SNAPSHOT + + + + kr.motd.maven + os-maven-plugin + 1.7.0 + + + + + org.xolstice.maven.plugins + protobuf-maven-plugin + ${protobuf-plugin.version} + + com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier} + grpc-java + io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier} + + + + + compile + compile-custom + + + + + + + + + 3.19.2 + 0.6.1 + 1.43.2 + 2.13.1.RELEASE + 1.5.1 + 1.3.5 + 1.6.2 + 3.3.2 + + org.springframework.boot @@ -78,45 +119,4 @@ - - - - kr.motd.maven - os-maven-plugin - 1.7.0 - - - - - org.xolstice.maven.plugins - protobuf-maven-plugin - ${protobuf-plugin.version} - - com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier} - grpc-java - io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier} - - - - - compile - compile-custom - - - - - - - - - 3.19.2 - 0.6.1 - 1.43.2 - 2.13.1.RELEASE - 1.5.1 - 1.3.5 - 1.6.2 - 3.3.2 - - \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-graphql/src/main/resources/application-chooseapi.yml b/spring-boot-modules/spring-boot-graphql/src/main/resources/application-chooseapi.yml index 889842df9f..0036bb3284 100644 --- a/spring-boot-modules/spring-boot-graphql/src/main/resources/application-chooseapi.yml +++ b/spring-boot-modules/spring-boot-graphql/src/main/resources/application-chooseapi.yml @@ -2,8 +2,10 @@ server: port: 8082 spring: + main: + allow-bean-definition-overriding: true graphql: graphiql: enabled: true schema: - locations: classpath:chooseapi/ \ No newline at end of file + locations: classpath:chooseapi/ diff --git a/spring-boot-modules/spring-boot-graphql/src/test/java/com/baeldung/chooseapi/controllers/BooksControllerGraphQLIntegrationTest.java b/spring-boot-modules/spring-boot-graphql/src/test/java/com/baeldung/chooseapi/controllers/BooksControllerGraphQLIntegrationTest.java index c1ce711388..48ed73fbde 100644 --- a/spring-boot-modules/spring-boot-graphql/src/test/java/com/baeldung/chooseapi/controllers/BooksControllerGraphQLIntegrationTest.java +++ b/spring-boot-modules/spring-boot-graphql/src/test/java/com/baeldung/chooseapi/controllers/BooksControllerGraphQLIntegrationTest.java @@ -11,7 +11,9 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = ChooseApiApp.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + properties = { "grpc.server.port=-1" }, // Disable gRPC external server + classes = ChooseApiApp.class) @ActiveProfiles("chooseapi") class BooksControllerGraphQLIntegrationTest { diff --git a/spring-boot-modules/spring-boot-graphql/src/test/java/com/baeldung/chooseapi/controllers/BooksControllerRestIntegrationTest.java b/spring-boot-modules/spring-boot-graphql/src/test/java/com/baeldung/chooseapi/controllers/BooksControllerRestIntegrationTest.java index 977a132653..4f2f8e8e51 100644 --- a/spring-boot-modules/spring-boot-graphql/src/test/java/com/baeldung/chooseapi/controllers/BooksControllerRestIntegrationTest.java +++ b/spring-boot-modules/spring-boot-graphql/src/test/java/com/baeldung/chooseapi/controllers/BooksControllerRestIntegrationTest.java @@ -9,13 +9,15 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.web.servlet.MockMvc; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -@SpringBootTest +@SpringBootTest(properties = { "grpc.server.port=-1" }) // Disable gRPC external server +@ActiveProfiles("chooseapi") @AutoConfigureMockMvc class BooksControllerRestIntegrationTest { From 9d4f599a1a399d80b7ba8f8f2b07e368135b87a4 Mon Sep 17 00:00:00 2001 From: panos-kakos <102670093+panos-kakos@users.noreply.github.com> Date: Wed, 4 Jan 2023 15:29:16 +0000 Subject: [PATCH 14/17] [JAVA-16834] Added test case (#13192) Co-authored-by: panagiotiskakos --- .../listassert/OrderAgnosticListComparisonUnitTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/testing-modules/testing-assertions/src/test/java/com/baeldung/listassert/OrderAgnosticListComparisonUnitTest.java b/testing-modules/testing-assertions/src/test/java/com/baeldung/listassert/OrderAgnosticListComparisonUnitTest.java index bf278cea90..58b80ff07e 100644 --- a/testing-modules/testing-assertions/src/test/java/com/baeldung/listassert/OrderAgnosticListComparisonUnitTest.java +++ b/testing-modules/testing-assertions/src/test/java/com/baeldung/listassert/OrderAgnosticListComparisonUnitTest.java @@ -51,4 +51,12 @@ public class OrderAgnosticListComparisonUnitTest { assertThat(a).hasSameElementsAs(b); } + + @Test + void whenTestingForOrderAgnosticEqualityWithDuplicateElementsBothList_ShouldBeEqual() { + List a = Arrays.asList("a", "a", "b", "c"); + List b = Arrays.asList("a", "b", "a", "c"); + + assertThat(a).containsExactlyInAnyOrderElementsOf(b); + } } From f28c9a79b835677dd8bb04c48208d5c31122716f Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Wed, 4 Jan 2023 23:10:33 +0530 Subject: [PATCH 15/17] JAVA-14987 Added missing code and split the code in packages (#13238) - Split the code in respective packages - Added missing codes --- .../spring-cloud-stream-kinesis/pom.xml | 84 +++++++++++-------- .../java/com/baeldung/KinesisApplication.java | 53 ------------ .../com/baeldung/binder/ConsumerBinder.java | 16 ++++ .../binder/KinesisBinderApplication.java | 12 +++ .../com/baeldung/binder/ProducerBinder.java | 24 ++++++ .../baeldung/{ => kclkpl}/IpProcessor.java | 2 +- .../{ => kclkpl}/IpProcessorFactory.java | 2 +- .../java/com/baeldung/kclkpl/IpProducer.java | 30 +++++++ .../kclkpl/KinesisKCLApplication.java | 48 +++++++++++ .../kclkpl/KinesisKPLApplication.java | 38 +++++++++ .../{IpConsumer.java => sdk/ConsumerSDK.java} | 15 +--- .../baeldung/sdk/KinesisSDKApplication.java | 35 ++++++++ .../{IpProducer.java => sdk/ProducerSDK.java} | 16 +--- .../src/main/resources/application.properties | 12 +-- .../KinesisApplicationManualTest.java | 4 +- .../src/test/resources/application.properties | 12 +-- 16 files changed, 274 insertions(+), 129 deletions(-) delete mode 100644 spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/KinesisApplication.java create mode 100644 spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/binder/ConsumerBinder.java create mode 100644 spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/binder/KinesisBinderApplication.java create mode 100644 spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/binder/ProducerBinder.java rename spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/{ => kclkpl}/IpProcessor.java (96%) rename spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/{ => kclkpl}/IpProcessorFactory.java (92%) create mode 100644 spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/IpProducer.java create mode 100644 spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/KinesisKCLApplication.java create mode 100644 spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/KinesisKPLApplication.java rename spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/{IpConsumer.java => sdk/ConsumerSDK.java} (82%) create mode 100644 spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/sdk/KinesisSDKApplication.java rename spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/{IpProducer.java => sdk/ProducerSDK.java} (72%) diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml index c7d3f5d12c..397f06399f 100644 --- a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml +++ b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml @@ -1,44 +1,54 @@ - 4.0.0 - spring-cloud-stream-kinesis - spring-cloud-stream-kinesis + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + spring-cloud-stream-kinesis + spring-cloud-stream-kinesis - - com.baeldung - spring-cloud-stream - 1.0.0-SNAPSHOT - + + com.baeldung + spring-cloud-stream + 1.0.0-SNAPSHOT + - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.cloud - spring-cloud-stream-binder-kinesis - ${spring-cloud-stream-kinesis-binder.version} - - - com.amazonaws - aws-java-sdk-kinesis - ${aws-sdk.version} - - - org.springframework.cloud - spring-cloud-stream-test-support - ${spring-cloud-stream-test.version} - test - - + + + org.springframework.boot + spring-boot-starter-web + + + com.amazonaws + aws-java-sdk-kinesis + ${aws-sdk.version} + + + org.springframework.cloud + spring-cloud-stream-test-support + ${spring-cloud-stream-test.version} + test + + + com.amazonaws + amazon-kinesis-producer + 0.13.1 + + + com.amazonaws + amazon-kinesis-client + 1.11.2 + + + org.springframework.cloud + spring-cloud-stream-binder-kinesis + ${spring-cloud-stream-kinesis-binder.version} + + - - 1.11.632 - 2.0.2.RELEASE - 2.2.1.RELEASE - + + 1.11.632 + 2.0.2.RELEASE + 2.2.1.RELEASE + \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/KinesisApplication.java b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/KinesisApplication.java deleted file mode 100644 index 6926560244..0000000000 --- a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/KinesisApplication.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.baeldung; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.stream.annotation.EnableBinding; -import org.springframework.cloud.stream.annotation.StreamListener; -import org.springframework.cloud.stream.messaging.Processor; -import org.springframework.context.annotation.Bean; -import org.springframework.messaging.support.MessageBuilder; - -import com.amazonaws.auth.AWSStaticCredentialsProvider; -import com.amazonaws.auth.BasicAWSCredentials; -import com.amazonaws.regions.Regions; -import com.amazonaws.services.kinesis.AmazonKinesis; -import com.amazonaws.services.kinesis.AmazonKinesisClientBuilder; - -@SpringBootApplication -@EnableBinding(Processor.class) -public class KinesisApplication { - - @Value("${aws.access.key}") - private String accessKey; - - @Value("${aws.secret.key}") - private String secretKey; - - @Autowired - private Processor processor; - - public static void main(String[] args) { - SpringApplication.run(KinesisApplication.class, args); - } - - @Bean - public AmazonKinesis buildAmazonKinesis() { - BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey); - return AmazonKinesisClientBuilder.standard() - .withCredentials(new AWSStaticCredentialsProvider(awsCredentials)) - .withRegion(Regions.EU_CENTRAL_1) - .build(); - } - - @StreamListener(Processor.INPUT) - public void consume(String val) { - System.out.println(val); - } - - public void produce(String val) { - processor.output().send(MessageBuilder.withPayload(val).build()); - } -} \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/binder/ConsumerBinder.java b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/binder/ConsumerBinder.java new file mode 100644 index 0000000000..38ad634086 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/binder/ConsumerBinder.java @@ -0,0 +1,16 @@ +package com.baeldung.binder; + +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.annotation.StreamListener; +import org.springframework.cloud.stream.messaging.Sink; +import org.springframework.stereotype.Component; + +@Component +@EnableBinding(Sink.class) +public class ConsumerBinder { + + @StreamListener(Sink.INPUT) + public void consume(String ip) { + System.out.println(ip); + } +} \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/binder/KinesisBinderApplication.java b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/binder/KinesisBinderApplication.java new file mode 100644 index 0000000000..e4f6916ed9 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/binder/KinesisBinderApplication.java @@ -0,0 +1,12 @@ +package com.baeldung.binder; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class KinesisBinderApplication { + + public static void main(String[] args) { + SpringApplication.run(KinesisBinderApplication.class, args); + } +} \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/binder/ProducerBinder.java b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/binder/ProducerBinder.java new file mode 100644 index 0000000000..468f2886de --- /dev/null +++ b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/binder/ProducerBinder.java @@ -0,0 +1,24 @@ +package com.baeldung.binder; + +import java.util.stream.IntStream; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.messaging.Source; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Component +@EnableBinding(Source.class) +public class ProducerBinder { + + @Autowired + private Source source; + + @Scheduled(fixedDelay = 3000L) + private void produce() { + IntStream.range(1, 200).mapToObj(ipSuffix -> "192.168.0." + ipSuffix) + .forEach(entry -> source.output().send(MessageBuilder.withPayload(entry).build())); + } +} \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/IpProcessor.java b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/IpProcessor.java similarity index 96% rename from spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/IpProcessor.java rename to spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/IpProcessor.java index 32e6babc86..c028f530dc 100644 --- a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/IpProcessor.java +++ b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/IpProcessor.java @@ -1,4 +1,4 @@ -package com.baeldung; +package com.baeldung.kclkpl; import com.amazonaws.services.kinesis.clientlibrary.interfaces.v2.IRecordProcessor; import com.amazonaws.services.kinesis.clientlibrary.types.InitializationInput; diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/IpProcessorFactory.java b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/IpProcessorFactory.java similarity index 92% rename from spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/IpProcessorFactory.java rename to spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/IpProcessorFactory.java index 1ca774bb39..7515e65eff 100644 --- a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/IpProcessorFactory.java +++ b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/IpProcessorFactory.java @@ -1,4 +1,4 @@ -package com.baeldung; +package com.baeldung.kclkpl; import com.amazonaws.services.kinesis.clientlibrary.interfaces.v2.IRecordProcessor; import com.amazonaws.services.kinesis.clientlibrary.interfaces.v2.IRecordProcessorFactory; diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/IpProducer.java b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/IpProducer.java new file mode 100644 index 0000000000..76111cfe57 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/IpProducer.java @@ -0,0 +1,30 @@ +package com.baeldung.kclkpl; + +import java.nio.ByteBuffer; +import java.util.stream.IntStream; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import com.amazonaws.services.kinesis.producer.KinesisProducer; + +@Component +public class IpProducer { + + @Value("${ips.stream}") + private String IPS_STREAM; + + @Value("${ips.partition.key}") + private String IPS_PARTITION_KEY; + + @Autowired + private KinesisProducer kinesisProducer; + + @Scheduled(fixedDelay = 3000L) + private void produce() { + IntStream.range(1, 200).mapToObj(ipSuffix -> ByteBuffer.wrap(("192.168.0." + ipSuffix).getBytes())) + .forEach(entry -> kinesisProducer.addUserRecord(IPS_STREAM, IPS_PARTITION_KEY, entry)); + } +} \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/KinesisKCLApplication.java b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/KinesisKCLApplication.java new file mode 100644 index 0000000000..01c5af596d --- /dev/null +++ b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/KinesisKCLApplication.java @@ -0,0 +1,48 @@ +package com.baeldung.kclkpl; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.regions.Regions; +import com.amazonaws.services.kinesis.clientlibrary.lib.worker.KinesisClientLibConfiguration; +import com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker; + +@SpringBootApplication +public class KinesisKCLApplication implements ApplicationRunner { + + @Value("${aws.access.key}") + private String accessKey; + + @Value("${aws.secret.key}") + private String secretKey; + + @Value("${ips.stream}") + private String IPS_STREAM; + + public static void main(String[] args) { + SpringApplication.run(KinesisKCLApplication.class, args); + } + + @Override + public void run(ApplicationArguments args) throws Exception { + BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey); + KinesisClientLibConfiguration consumerConfig = new KinesisClientLibConfiguration( + "KinesisKCLConsumer", + IPS_STREAM, + new AWSStaticCredentialsProvider(awsCredentials), + "KinesisKCLConsumer") + .withRegionName(Regions.EU_CENTRAL_1.getName()); + + new Worker.Builder() + .recordProcessorFactory(new IpProcessorFactory()) + .config(consumerConfig) + .build() + .run(); + } + +} \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/KinesisKPLApplication.java b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/KinesisKPLApplication.java new file mode 100644 index 0000000000..4ff7cf8087 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/kclkpl/KinesisKPLApplication.java @@ -0,0 +1,38 @@ +package com.baeldung.kclkpl; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; + +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.regions.Regions; +import com.amazonaws.services.kinesis.producer.KinesisProducer; +import com.amazonaws.services.kinesis.producer.KinesisProducerConfiguration; + +@SpringBootApplication +public class KinesisKPLApplication { + + @Value("${aws.access.key}") + private String accessKey; + + @Value("${aws.secret.key}") + private String secretKey; + + public static void main(String[] args) { + SpringApplication.run(KinesisKPLApplication.class, args); + } + + @Bean + public KinesisProducer kinesisProducer() { + BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey); + KinesisProducerConfiguration producerConfig = new KinesisProducerConfiguration() + .setCredentialsProvider(new AWSStaticCredentialsProvider(awsCredentials)) + .setVerifyCertificate(false) + .setRegion(Regions.EU_CENTRAL_1.getName()); + + return new KinesisProducer(producerConfig); + } + +} \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/IpConsumer.java b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/sdk/ConsumerSDK.java similarity index 82% rename from spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/IpConsumer.java rename to spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/sdk/ConsumerSDK.java index 949787b687..d95d66b75a 100644 --- a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/IpConsumer.java +++ b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/sdk/ConsumerSDK.java @@ -1,12 +1,9 @@ -package com.baeldung; +package com.baeldung.sdk; import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.cloud.stream.annotation.EnableBinding; -import org.springframework.cloud.stream.annotation.StreamListener; -import org.springframework.cloud.stream.messaging.Sink; import org.springframework.stereotype.Component; import com.amazonaws.services.kinesis.AmazonKinesis; @@ -17,8 +14,7 @@ import com.amazonaws.services.kinesis.model.GetShardIteratorResult; import com.amazonaws.services.kinesis.model.ShardIteratorType; @Component -@EnableBinding(Sink.class) -public class IpConsumer { +public class ConsumerSDK { @Value("${ips.stream}") private String IPS_STREAM; @@ -31,12 +27,7 @@ public class IpConsumer { private GetShardIteratorResult shardIterator; - @StreamListener(Sink.INPUT) - public void consume(String ip) { - System.out.println(ip); - } - - private void consumeWithKinesis() { + public void consumeWithKinesis() { GetRecordsRequest recordsRequest = new GetRecordsRequest(); recordsRequest.setShardIterator(shardIterator.getShardIterator()); recordsRequest.setLimit(25); diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/sdk/KinesisSDKApplication.java b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/sdk/KinesisSDKApplication.java new file mode 100644 index 0000000000..28901c0723 --- /dev/null +++ b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/sdk/KinesisSDKApplication.java @@ -0,0 +1,35 @@ +package com.baeldung.sdk; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; + +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.regions.Regions; +import com.amazonaws.services.kinesis.AmazonKinesis; +import com.amazonaws.services.kinesis.AmazonKinesisClientBuilder; + +@SpringBootApplication +public class KinesisSDKApplication { + + @Value("${aws.access.key}") + private String accessKey; + + @Value("${aws.secret.key}") + private String secretKey; + + public static void main(String[] args) { + SpringApplication.run(KinesisSDKApplication.class, args); + } + + @Bean + public AmazonKinesis buildAmazonKinesis() { + BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey); + return AmazonKinesisClientBuilder.standard() + .withCredentials(new AWSStaticCredentialsProvider(awsCredentials)) + .withRegion(Regions.EU_CENTRAL_1) + .build(); + } +} \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/IpProducer.java b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/sdk/ProducerSDK.java similarity index 72% rename from spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/IpProducer.java rename to spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/sdk/ProducerSDK.java index f59b2161f9..76ece8ddb7 100644 --- a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/IpProducer.java +++ b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/java/com/baeldung/sdk/ProducerSDK.java @@ -1,4 +1,4 @@ -package com.baeldung; +package com.baeldung.sdk; import java.nio.ByteBuffer; import java.util.List; @@ -7,9 +7,6 @@ import java.util.stream.IntStream; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.cloud.stream.annotation.EnableBinding; -import org.springframework.cloud.stream.messaging.Source; -import org.springframework.messaging.support.MessageBuilder; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -18,8 +15,7 @@ import com.amazonaws.services.kinesis.model.PutRecordsRequest; import com.amazonaws.services.kinesis.model.PutRecordsRequestEntry; @Component -@EnableBinding(Source.class) -public class IpProducer { +public class ProducerSDK { @Value("${ips.partition.key}") private String IPS_PARTITION_KEY; @@ -27,17 +23,9 @@ public class IpProducer { @Value("${ips.stream}") private String IPS_STREAM; - @Autowired - private Source source; @Autowired private AmazonKinesis kinesis; - @Scheduled(fixedDelay = 3000L) - private void produce() { - IntStream.range(1, 200).mapToObj(ipSuffix -> "192.168.0." + ipSuffix) - .forEach(entry -> source.output().send(MessageBuilder.withPayload(entry).build())); - } - @Scheduled(fixedDelay = 3000L) private void produceWithKinesis() { List entries = IntStream.range(1, 200).mapToObj(ipSuffix -> { diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/resources/application.properties b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/resources/application.properties index 1943766c26..777abef1cc 100644 --- a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/resources/application.properties +++ b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/main/resources/application.properties @@ -1,6 +1,12 @@ +# configurations for AWS SDK consumer and producer aws.access.key=my-aws-access-key-goes-here aws.secret.key=my-aws-secret-key-goes-here +ips.partition.key=ips-partition-key +ips.stream=ips-stream +ips.shard.id=1 + +# configurations for Spring Cloud Stream Kineses Binder consumer and producer cloud.aws.credentials.access-key=my-aws-access-key cloud.aws.credentials.secret-key=my-aws-secret-key cloud.aws.region.static=eu-central-1 @@ -11,8 +17,4 @@ spring.cloud.stream.bindings.input.group=live-ips-group spring.cloud.stream.bindings.input.content-type=text/plain spring.cloud.stream.bindings.output.destination=myStream -spring.cloud.stream.bindings.output.content-type=text/plain - -ips.partition.key=ips-partition-key -ips.stream=ips-stream -ips.shard.id=1 \ No newline at end of file +spring.cloud.stream.bindings.output.content-type=text/plain \ No newline at end of file diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/test/java/com/baeldung/KinesisApplicationManualTest.java b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/test/java/com/baeldung/KinesisApplicationManualTest.java index a232d29be5..bbe871ea11 100644 --- a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/test/java/com/baeldung/KinesisApplicationManualTest.java +++ b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/test/java/com/baeldung/KinesisApplicationManualTest.java @@ -5,11 +5,13 @@ import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; +import com.baeldung.kclkpl.KinesisKPLApplication; + /** * Manual Test - this test needs correct AWS Access Key and Secret to build the Amazon Kinesis and complete successfully */ @RunWith(SpringRunner.class) -@SpringBootTest(classes = KinesisApplication.class) +@SpringBootTest(classes = KinesisKPLApplication.class) public class KinesisApplicationManualTest { @Test public void whenSpringContextIsBootstrapped_thenNoExceptions() { diff --git a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/test/resources/application.properties b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/test/resources/application.properties index 1943766c26..777abef1cc 100644 --- a/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/test/resources/application.properties +++ b/spring-cloud-modules/spring-cloud-stream/spring-cloud-stream-kinesis/src/test/resources/application.properties @@ -1,6 +1,12 @@ +# configurations for AWS SDK consumer and producer aws.access.key=my-aws-access-key-goes-here aws.secret.key=my-aws-secret-key-goes-here +ips.partition.key=ips-partition-key +ips.stream=ips-stream +ips.shard.id=1 + +# configurations for Spring Cloud Stream Kineses Binder consumer and producer cloud.aws.credentials.access-key=my-aws-access-key cloud.aws.credentials.secret-key=my-aws-secret-key cloud.aws.region.static=eu-central-1 @@ -11,8 +17,4 @@ spring.cloud.stream.bindings.input.group=live-ips-group spring.cloud.stream.bindings.input.content-type=text/plain spring.cloud.stream.bindings.output.destination=myStream -spring.cloud.stream.bindings.output.content-type=text/plain - -ips.partition.key=ips-partition-key -ips.stream=ips-stream -ips.shard.id=1 \ No newline at end of file +spring.cloud.stream.bindings.output.content-type=text/plain \ No newline at end of file From f63772f5e46f93e6bbffd1a371fc7b6c6f89a686 Mon Sep 17 00:00:00 2001 From: lucaCambi77 Date: Thu, 5 Jan 2023 04:34:13 +0100 Subject: [PATCH 16/17] [ BAEL-5987 ] - Difference Between JPA and Spring Data JPA (#13209) * feat: add jpa - spring data difference examples * fix: remove _ from package name --- .../spring-data-jpa-repo-2/pom.xml | 61 +++++- .../model/Employee.java | 76 +++++++ .../config/SpringDataJpaConfig.java | 66 ++++++ .../repository/EmployeeRepository.java | 19 ++ .../EmployeeRepositoryPagingAndSort.java | 11 + .../JpaDaoIntegrationTest.java | 201 ++++++++++++++++++ .../SpringDataJpaIntegrationTest.java | 153 +++++++++++++ .../springdatajpadifference/TestUtils.java | 15 ++ .../test/resources/META-INF/persistence.xml | 21 ++ 9 files changed, 621 insertions(+), 2 deletions(-) create mode 100644 persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/model/Employee.java create mode 100644 persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/config/SpringDataJpaConfig.java create mode 100644 persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/repository/EmployeeRepository.java create mode 100644 persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/repository/EmployeeRepositoryPagingAndSort.java create mode 100644 persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/JpaDaoIntegrationTest.java create mode 100644 persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/SpringDataJpaIntegrationTest.java create mode 100644 persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/TestUtils.java create mode 100644 persistence-modules/spring-data-jpa-repo-2/src/test/resources/META-INF/persistence.xml diff --git a/persistence-modules/spring-data-jpa-repo-2/pom.xml b/persistence-modules/spring-data-jpa-repo-2/pom.xml index 9240a00ee2..dd0406eca8 100644 --- a/persistence-modules/spring-data-jpa-repo-2/pom.xml +++ b/persistence-modules/spring-data-jpa-repo-2/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-data-jpa-repo-2 spring-data-jpa-repo-2 @@ -34,6 +34,14 @@ com.h2database h2 + + com.querydsl + querydsl-apt + + + com.querydsl + querydsl-jpa + com.google.guava guava @@ -41,4 +49,53 @@ + + + + com.mysema.maven + apt-maven-plugin + 1.1.3 + + + generate-sources + + process + + + ${project.build.directory}/generated-sources + com.querydsl.apt.jpa.JPAAnnotationProcessor + + + + + + org.bsc.maven + maven-processor-plugin + 3.3.3 + + + process + + process + + generate-sources + + ${project.build.directory}/generated-sources + + org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor + + + + + + + org.hibernate + hibernate-jpamodelgen + 5.6.11.Final + + + + + + \ No newline at end of file diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/model/Employee.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/model/Employee.java new file mode 100644 index 0000000000..9690bcf68a --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/model/Employee.java @@ -0,0 +1,76 @@ +package com.baeldung.spring.data.persistence.springdatajpadifference.model; + +import java.io.Serializable; +import java.util.Objects; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.NamedQuery; +import javax.persistence.Table; + +@Entity +@Table(name = "employee") +@NamedQuery(name = "Employee.findById", query = "SELECT e FROM Employee e WHERE e.id = :id") +public class Employee implements Serializable { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + @Column(nullable = false) + private String firstName; + @Column(nullable = false) + private String lastName; + + @Column(nullable = false) + private String email; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Employee employee = (Employee) o; + return Objects.equals(id, employee.id) && Objects.equals(firstName, employee.firstName) && Objects.equals(lastName, employee.lastName) && Objects.equals(email, employee.email); + } + + @Override + public int hashCode() { + return Objects.hash(id, firstName, lastName, email); + } +} diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/config/SpringDataJpaConfig.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/config/SpringDataJpaConfig.java new file mode 100644 index 0000000000..57f9d2981f --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/config/SpringDataJpaConfig.java @@ -0,0 +1,66 @@ +package com.baeldung.spring.data.persistence.springdatajpadifference.springdata.config; + +import java.util.Properties; + +import javax.persistence.EntityManager; +import javax.sql.DataSource; + +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.JpaVendorAdapter; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import com.baeldung.spring.data.persistence.springdatajpadifference.springdata.repository.EmployeeRepository; +import com.querydsl.jpa.impl.JPAQueryFactory; + +@Configuration +@EnableTransactionManagement +@EnableJpaRepositories(basePackageClasses = EmployeeRepository.class) +public class SpringDataJpaConfig { + + @Bean + public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) { + LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); + em.setDataSource(dataSource); + em.setPackagesToScan("com.baeldung.spring.data.persistence.springdata_jpa_difference.model"); + + JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); + em.setJpaVendorAdapter(vendorAdapter); + + Properties properties = new Properties(); + properties.setProperty("hibernate.hbm2ddl.auto", "create-drop"); + properties.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); + + em.setJpaProperties(properties); + + return em; + } + + @Bean + public PlatformTransactionManager transactionManager(LocalContainerEntityManagerFactoryBean entityManagerFactoryBean) { + JpaTransactionManager transactionManager = new JpaTransactionManager(); + transactionManager.setEntityManagerFactory(entityManagerFactoryBean.getObject()); + return transactionManager; + } + + @Bean + public DataSource dataSource() { + return DataSourceBuilder.create() + .url("jdbc:h2:mem:db;DB_CLOSE_DELAY=-1") + .driverClassName("org.h2.Driver") + .username("sa") + .password("sa") + .build(); + } + + @Bean + public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) { + return new JPAQueryFactory((entityManager)); + } +} diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/repository/EmployeeRepository.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/repository/EmployeeRepository.java new file mode 100644 index 0000000000..012a46d885 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/repository/EmployeeRepository.java @@ -0,0 +1,19 @@ +package com.baeldung.spring.data.persistence.springdatajpadifference.springdata.repository; + +import java.util.List; + +import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import com.baeldung.spring.data.persistence.springdatajpadifference.model.Employee; + +@Repository +public interface EmployeeRepository extends JpaRepository { + + List findByFirstName(String firstName); + + @Query(value = "SELECT e FROM Employee e") + List findAllEmployee(Sort sort); +} \ No newline at end of file diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/repository/EmployeeRepositoryPagingAndSort.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/repository/EmployeeRepositoryPagingAndSort.java new file mode 100644 index 0000000000..731735ea62 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/springdatajpadifference/springdata/repository/EmployeeRepositoryPagingAndSort.java @@ -0,0 +1,11 @@ +package com.baeldung.spring.data.persistence.springdatajpadifference.springdata.repository; + +import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.stereotype.Repository; + +import com.baeldung.spring.data.persistence.springdatajpadifference.model.Employee; + +@Repository +public interface EmployeeRepositoryPagingAndSort extends PagingAndSortingRepository { + +} \ No newline at end of file diff --git a/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/JpaDaoIntegrationTest.java b/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/JpaDaoIntegrationTest.java new file mode 100644 index 0000000000..b25038f175 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/JpaDaoIntegrationTest.java @@ -0,0 +1,201 @@ +package com.baeldung.spring.data.persistence.springdatajpadifference; + +import static com.baeldung.spring.data.persistence.springdatajpadifference.TestUtils.employee; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +import java.util.Arrays; +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; +import javax.persistence.Query; +import javax.persistence.TypedQuery; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.CriteriaUpdate; +import javax.persistence.criteria.Root; + +import org.junit.Before; +import org.junit.Test; + +import com.baeldung.spring.data.persistence.springdatajpadifference.model.Employee; +import com.baeldung.spring.data.persistence.springdatajpadifference.model.Employee_; + +public class JpaDaoIntegrationTest { + + private final EntityManagerFactory emf = Persistence.createEntityManagerFactory("pu-test"); + private final EntityManager entityManager = emf.createEntityManager(); + + @Before + public void setup() { + deleteAllEmployees(); + } + + @Test + public void givenPersistedEmployee_whenFindById_thenEmployeeIsFound() { + Employee employee = employee("John", "Doe"); + save(employee); + + assertEquals(employee, entityManager.find(Employee.class, employee.getId())); + } + + @Test + public void givenPersistedEmployee_whenFindByIdCriteriaQuery_thenEmployeeIsFound() { + Employee employee = employee("John", "Doe"); + save(employee); + + CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); + CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Employee.class); + Root root = criteriaQuery.from(Employee.class); + criteriaQuery.select(root); + + criteriaQuery.where(criteriaBuilder.equal(root.get(Employee_.ID), employee.getId())); + + assertEquals(employee, entityManager.createQuery(criteriaQuery) + .getSingleResult()); + } + + @Test + public void givenPersistedEmployee_whenFindByIdJpql_thenEmployeeIsFound() { + Employee employee = employee("John", "Doe"); + save(employee); + + Query jpqlQuery = entityManager.createQuery("SELECT e from Employee e WHERE e.id=:id"); + jpqlQuery.setParameter("id", employee.getId()); + + assertEquals(employee, jpqlQuery.getSingleResult()); + } + + @Test + public void givenPersistedEmployee_whenFindByIdNamedQuery_thenEmployeeIsFound() { + Employee employee = employee("John", "Doe"); + save(employee); + + Query query = entityManager.createNamedQuery("Employee.findById"); + + query.setParameter(Employee_.ID, employee.getId()); + + assertEquals(employee, query.getSingleResult()); + } + + @Test + public void givenPersistedEmployee_whenFindWithPaginationAndSort_thenEmployeesAreFound() { + Employee john = employee("John", "Doe"); + Employee bob = employee("Bob", "Smith"); + Employee frank = employee("Frank", "Brown"); + Employee james = employee("James", "Smith"); + save(john); + save(bob); + save(frank); + save(james); + + CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); + CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Employee.class); + Root root = criteriaQuery.from(Employee.class); + criteriaQuery.select(root); + criteriaQuery.orderBy(criteriaBuilder.asc(root.get(Employee_.FIRST_NAME))); + + TypedQuery query = entityManager.createQuery(criteriaQuery); + + query.setFirstResult(0); + query.setMaxResults(3); + + List employeeList = query.getResultList(); + + assertEquals(Arrays.asList(bob, frank, james), employeeList); + } + + @Test + public void givenPersistedEmployee_whenUpdateEmployeeEmail_thenEmployeeHasUpdatedEmail() { + Employee employee = employee("John", "Doe"); + save(employee); + + Employee employeeToUpdate = entityManager.find(Employee.class, employee.getId()); + + String updatedEmail = "email@gmail.com"; + + employeeToUpdate.setEmail(updatedEmail); + + update(employeeToUpdate); + + assertEquals(updatedEmail, entityManager.find(Employee.class, employee.getId()) + .getEmail()); + } + + @Test + public void givenPersistedEmployee_whenUpdateEmployeeEmailWithCriteria_thenEmployeeHasUpdatedEmail() { + Employee employee = employee("John", "Doe"); + save(employee); + + String updatedEmail = "email@gmail.com"; + + CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); + CriteriaUpdate criteriaUpdate = criteriaBuilder.createCriteriaUpdate(Employee.class); + Root root = criteriaUpdate.from(Employee.class); + + criteriaUpdate.set(Employee_.EMAIL, updatedEmail); + criteriaUpdate.where(criteriaBuilder.equal(root.get(Employee_.ID), employee.getId())); + + assertEquals(1, update(criteriaUpdate)); + + assertEquals(updatedEmail, entityManager.find(Employee.class, employee.getId()) + .getEmail()); + } + + @Test + public void givenPersistedEmployee_whenRemoveEmployee_thenNoEmployeeIsFound() { + Employee employee = employee("John", "Doe"); + save(employee); + + delete(employee.getId()); + + assertNull(entityManager.find(Employee.class, employee.getId())); + } + + private void deleteAllEmployees() { + entityManager.getTransaction() + .begin(); + entityManager.createNativeQuery("DELETE from Employee") + .executeUpdate(); + entityManager.getTransaction() + .commit(); + } + + public void save(Employee entity) { + entityManager.getTransaction() + .begin(); + entityManager.persist(entity); + entityManager.getTransaction() + .commit(); + } + + public void update(Employee entity) { + entityManager.getTransaction() + .begin(); + entityManager.merge(entity); + entityManager.getTransaction() + .commit(); + } + + public void delete(Long employee) { + entityManager.getTransaction() + .begin(); + entityManager.remove(entityManager.find(Employee.class, employee)); + entityManager.getTransaction() + .commit(); + } + + public int update(CriteriaUpdate criteriaUpdate) { + entityManager.getTransaction() + .begin(); + int result = entityManager.createQuery(criteriaUpdate) + .executeUpdate(); + entityManager.getTransaction() + .commit(); + entityManager.clear(); + + return result; + } +} diff --git a/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/SpringDataJpaIntegrationTest.java b/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/SpringDataJpaIntegrationTest.java new file mode 100644 index 0000000000..e6febdc9f1 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/SpringDataJpaIntegrationTest.java @@ -0,0 +1,153 @@ +package com.baeldung.spring.data.persistence.springdatajpadifference; + +import static com.baeldung.spring.data.persistence.springdatajpadifference.TestUtils.employee; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertFalse; + +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +import com.baeldung.spring.data.persistence.springdatajpadifference.model.Employee; +import com.baeldung.spring.data.persistence.springdatajpadifference.model.QEmployee; +import com.baeldung.spring.data.persistence.springdatajpadifference.springdata.config.SpringDataJpaConfig; +import com.baeldung.spring.data.persistence.springdatajpadifference.springdata.repository.EmployeeRepository; +import com.baeldung.spring.data.persistence.springdatajpadifference.springdata.repository.EmployeeRepositoryPagingAndSort; +import com.querydsl.jpa.impl.JPAQueryFactory; + +@ContextConfiguration(classes = SpringDataJpaConfig.class) +@RunWith(SpringJUnit4ClassRunner.class) +@Transactional +@Rollback +public class SpringDataJpaIntegrationTest { + + @Autowired + private EmployeeRepository employeeRepository; + + @Autowired + private EmployeeRepositoryPagingAndSort employeeRepositoryPagingAndSort; + + @Autowired + private JPAQueryFactory jpaQueryFactory; + + @Test + public void givenPersistedEmployee_whenFindById_thenEmployeeIsFound() { + Employee employee = employee("John", "Doe"); + + employeeRepository.save(employee); + + assertEquals(Optional.of(employee), employeeRepository.findById(employee.getId())); + } + + @Test + public void givenPersistedEmployee_whenFindByFirstName_thenEmployeeIsFound() { + Employee employee = employee("John", "Doe"); + + employeeRepository.save(employee); + + assertEquals(employee, employeeRepository.findByFirstName(employee.getFirstName()) + .get(0)); + } + + @Test + public void givenPersistedEmployee_whenUpdateEmployeeEmail_thenEmployeeHasUpdatedEmail() { + Employee employee = employee("John", "Doe"); + + employeeRepository.save(employee); + + Employee employeeToUpdate = employeeRepository.findById(employee.getId()) + .orElse(null); + + assertNotNull(employeeToUpdate); + assertEquals(employee, employeeToUpdate); + + String updatedEmail = "email@gmail.com"; + + employeeToUpdate.setEmail(updatedEmail); + + employeeRepository.save(employeeToUpdate); + + assertEquals(Optional.of(employeeToUpdate), employeeRepository.findById(employee.getId())); + } + + @Test + public void givenPersistedEmployee_whenRemoveEmployee_thenNoEmployeeIsFound() { + Employee employee = employee("John", "Doe"); + + employeeRepository.save(employee); + + Employee persistedEmployee = employeeRepository.findById(employee.getId()) + .orElse(null); + + assertNotNull(persistedEmployee); + + employeeRepository.delete(persistedEmployee); + + assertFalse(employeeRepository.findById(employee.getId()) + .isPresent()); + } + + @Test + public void givenPersistedEmployees_whenFindSortedByFirstName_thenEmployeeAreFoundInOrder() { + Employee john = employee("John", "Doe"); + Employee bob = employee("Bob", "Smith"); + Employee frank = employee("Frank", "Brown"); + + employeeRepository.saveAll(Arrays.asList(john, bob, frank)); + + List employees = employeeRepository.findAllEmployee(Sort.by("firstName")); + + assertEquals(3, employees.size()); + assertEquals(bob, employees.get(0)); + assertEquals(frank, employees.get(1)); + assertEquals(john, employees.get(2)); + } + + @Test + public void givenPersistedEmployee_whenFindByQueryDsl_thenEmployeeIsFound() { + Employee john = employee("John", "Doe"); + Employee frank = employee("Frank", "Doe"); + + employeeRepository.saveAll(Arrays.asList(john, frank)); + + QEmployee employeePath = QEmployee.employee; + + List employees = jpaQueryFactory.selectFrom(employeePath) + .where(employeePath.firstName.eq("John"), employeePath.lastName.eq("Doe")) + .fetch(); + + assertEquals(1, employees.size()); + assertEquals(john, employees.get(0)); + } + + @Test + public void givenPersistedEmployee_whenFindBySortAndPagingRepository_thenEmployeeAreFound() { + Employee john = employee("John", "Doe"); + Employee bob = employee("Bob", "Smith"); + Employee frank = employee("Frank", "Brown"); + Employee jimmy = employee("Jimmy", "Armstrong"); + + employeeRepositoryPagingAndSort.saveAll(Arrays.asList(john, bob, frank, jimmy)); + + Pageable pageable = PageRequest.of(0, 2, Sort.by("firstName")); + + Page employees = employeeRepositoryPagingAndSort.findAll(pageable); + + assertEquals(Arrays.asList(bob, frank), employees.get() + .collect(Collectors.toList())); + } +} diff --git a/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/TestUtils.java b/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/TestUtils.java new file mode 100644 index 0000000000..989a7db247 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/springdatajpadifference/TestUtils.java @@ -0,0 +1,15 @@ +package com.baeldung.spring.data.persistence.springdatajpadifference; + +import com.baeldung.spring.data.persistence.springdatajpadifference.model.Employee; + +public class TestUtils { + + public static Employee employee(String firstName, String lastname) { + Employee employee = new Employee(); + employee.setFirstName(firstName); + employee.setLastName(lastname); + employee.setEmail(firstName + lastname + "@baeldung.com"); + + return employee; + } +} diff --git a/persistence-modules/spring-data-jpa-repo-2/src/test/resources/META-INF/persistence.xml b/persistence-modules/spring-data-jpa-repo-2/src/test/resources/META-INF/persistence.xml new file mode 100644 index 0000000000..94df50cf0a --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-2/src/test/resources/META-INF/persistence.xml @@ -0,0 +1,21 @@ + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.spring.data.persistence.springdatajpadifference.model.Employee + + + + + + + + + + + + From 08dd5a6f909238c246fac239749352205660d992 Mon Sep 17 00:00:00 2001 From: Kapil Khandelwal Date: Fri, 6 Jan 2023 04:28:26 +0530 Subject: [PATCH 17/17] BAEL-4737:- Jenkins pipeline - change to another folder (#13242) --- .../change-directory-job/pipeline-dir-fullpath-job | 11 +++++++++++ .../change-directory-job/pipeline-dir-job | 11 +++++++++++ .../jenkins-jobs/change-directory-job/pipeline-sh-job | 10 ++++++++++ 3 files changed, 32 insertions(+) create mode 100644 jenkins-modules/jenkins-jobs/change-directory-job/pipeline-dir-fullpath-job create mode 100644 jenkins-modules/jenkins-jobs/change-directory-job/pipeline-dir-job create mode 100644 jenkins-modules/jenkins-jobs/change-directory-job/pipeline-sh-job diff --git a/jenkins-modules/jenkins-jobs/change-directory-job/pipeline-dir-fullpath-job b/jenkins-modules/jenkins-jobs/change-directory-job/pipeline-dir-fullpath-job new file mode 100644 index 0000000000..98dc32efe5 --- /dev/null +++ b/jenkins-modules/jenkins-jobs/change-directory-job/pipeline-dir-fullpath-job @@ -0,0 +1,11 @@ +pipeline { + agent any + stages { + stage('Build') { + steps { + dir('/var/jenkins_home/workspace/SamplePipeline/scripts') { + } + } + } + } +} diff --git a/jenkins-modules/jenkins-jobs/change-directory-job/pipeline-dir-job b/jenkins-modules/jenkins-jobs/change-directory-job/pipeline-dir-job new file mode 100644 index 0000000000..42a946ca49 --- /dev/null +++ b/jenkins-modules/jenkins-jobs/change-directory-job/pipeline-dir-job @@ -0,0 +1,11 @@ + pipeline { + agent any + stages { + stage('Build') { + steps { + dir('scripts') { + } + } + } + } +} diff --git a/jenkins-modules/jenkins-jobs/change-directory-job/pipeline-sh-job b/jenkins-modules/jenkins-jobs/change-directory-job/pipeline-sh-job new file mode 100644 index 0000000000..9b7f992b86 --- /dev/null +++ b/jenkins-modules/jenkins-jobs/change-directory-job/pipeline-sh-job @@ -0,0 +1,10 @@ +pipeline { + agent any + stages { + stage('Build') { + steps { + sh 'cd scripts' + } + } + } +}