diff --git a/pom.xml b/pom.xml
index 91ba9cbe50..cec6ef1922 100644
--- a/pom.xml
+++ b/pom.xml
@@ -557,7 +557,6 @@
atomikos
reactive-systems
slack
- spring-webflux-threads
@@ -620,6 +619,7 @@
spring-5-reactive-security
spring-5-webflux
spring-5-webflux-2
+ spring-reactive
spring-activiti
spring-akka
@@ -1039,7 +1039,6 @@
atomikos
reactive-systems
slack
- spring-webflux-threads
@@ -1093,6 +1092,7 @@
spring-5-reactive-oauth
spring-5-reactive-security
spring-5-webflux
+ spring-reactive
spring-activiti
spring-akka
diff --git a/reactor-core/README.md b/reactor-core/README.md
index a4ced49096..7ca3b5773f 100644
--- a/reactor-core/README.md
+++ b/reactor-core/README.md
@@ -4,7 +4,6 @@ This module contains articles about Reactor Core.
### Relevant articles
-- [Intro To Reactor Core](https://www.baeldung.com/reactor-core)
- [Combining Publishers in Project Reactor](https://www.baeldung.com/reactor-combine-streams)
- [Programmatically Creating Sequences with Project Reactor](https://www.baeldung.com/flux-sequences-reactor)
- [How to Extract a Mono’s Content in Java](https://www.baeldung.com/java-string-from-mono)
diff --git a/spring-5-reactive-2/README.md b/spring-5-reactive-2/README.md
index 33f9ee2b45..1cd3bf46c6 100644
--- a/spring-5-reactive-2/README.md
+++ b/spring-5-reactive-2/README.md
@@ -2,10 +2,8 @@
This module contains articles about reactive Spring 5.
-- [Spring WebClient vs. RestTemplate](https://www.baeldung.com/spring-webclient-resttemplate)
- [Validation for Functional Endpoints in Spring 5](https://www.baeldung.com/spring-functional-endpoints-validation)
- [Testing Reactive Streams Using StepVerifier and TestPublisher](https://www.baeldung.com/reactive-streams-step-verifier-test-publisher)
-- [Debugging Reactive Streams in Java](https://www.baeldung.com/spring-debugging-reactive-streams)
- [Static Content in Spring WebFlux](https://www.baeldung.com/spring-webflux-static-content)
- [Server-Sent Events in Spring](https://www.baeldung.com/spring-server-sent-events)
- [Backpressure Mechanism in Spring WebFlux](https://www.baeldung.com/spring-webflux-backpressure)
diff --git a/spring-5-reactive-security/README.md b/spring-5-reactive-security/README.md
index 915f74cd78..37f999648c 100644
--- a/spring-5-reactive-security/README.md
+++ b/spring-5-reactive-security/README.md
@@ -8,8 +8,5 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring
### Relevant Articles
- [Spring Boot Actuator](https://www.baeldung.com/spring-boot-actuators)
-- [Spring Security 5 for Reactive Applications](https://www.baeldung.com/spring-security-5-reactive)
-- [Guide to Spring 5 WebFlux](https://www.baeldung.com/spring-webflux)
-- [Introduction to the Functional Web Framework in Spring 5](https://www.baeldung.com/spring-5-functional-web)
- [Guide to the AuthenticationManagerResolver in Spring Security](https://www.baeldung.com/spring-security-authenticationmanagerresolver)
- [Spring Webflux and CORS](https://www.baeldung.com/spring-webflux-cors)
diff --git a/spring-5-reactive-security/pom.xml b/spring-5-reactive-security/pom.xml
index 140c6b8296..7b697c7b00 100644
--- a/spring-5-reactive-security/pom.xml
+++ b/spring-5-reactive-security/pom.xml
@@ -110,7 +110,7 @@
org.springframework.boot
spring-boot-maven-plugin
- com.baeldung.webflux.EmployeeSpringApplication
+ com.baeldung.reactive.actuator.Spring5ReactiveApplication
JAR
diff --git a/spring-5-reactive-security/src/main/java/com/baeldung/webflux/EmployeeRepository.java b/spring-5-reactive-security/src/main/java/com/baeldung/webflux/EmployeeRepository.java
deleted file mode 100644
index d7f618f178..0000000000
--- a/spring-5-reactive-security/src/main/java/com/baeldung/webflux/EmployeeRepository.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.baeldung.webflux;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.springframework.stereotype.Repository;
-
-import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
-
-@Repository
-public class EmployeeRepository {
-
- static Map employeeData;
-
- static Map employeeAccessData;
-
- static
- {
- employeeData = new HashMap<>();
- employeeData.put("1",new Employee("1","Employee 1"));
- employeeData.put("2",new Employee("2","Employee 2"));
- employeeData.put("3",new Employee("3","Employee 3"));
- employeeData.put("4",new Employee("4","Employee 4"));
- employeeData.put("5",new Employee("5","Employee 5"));
- employeeData.put("6",new Employee("6","Employee 6"));
- employeeData.put("7",new Employee("7","Employee 7"));
- employeeData.put("8",new Employee("8","Employee 8"));
- employeeData.put("9",new Employee("9","Employee 9"));
- employeeData.put("10",new Employee("10","Employee 10"));
-
- employeeAccessData=new HashMap<>();
- employeeAccessData.put("1", "Employee 1 Access Key");
- employeeAccessData.put("2", "Employee 2 Access Key");
- employeeAccessData.put("3", "Employee 3 Access Key");
- employeeAccessData.put("4", "Employee 4 Access Key");
- employeeAccessData.put("5", "Employee 5 Access Key");
- employeeAccessData.put("6", "Employee 6 Access Key");
- employeeAccessData.put("7", "Employee 7 Access Key");
- employeeAccessData.put("8", "Employee 8 Access Key");
- employeeAccessData.put("9", "Employee 9 Access Key");
- employeeAccessData.put("10", "Employee 10 Access Key");
- }
-
- public Mono findEmployeeById(String id)
- {
- return Mono.just(employeeData.get(id));
- }
-
- public Flux findAllEmployees()
- {
- return Flux.fromIterable(employeeData.values());
- }
-
- public Mono updateEmployee(Employee employee)
- {
- Employee existingEmployee=employeeData.get(employee.getId());
- if(existingEmployee!=null)
- {
- existingEmployee.setName(employee.getName());
- }
- return Mono.just(existingEmployee);
- }
-}
diff --git a/spring-5-reactive-security/src/test/java/com/baeldung/SpringContextTest.java b/spring-5-reactive-security/src/test/java/com/baeldung/SpringContextTest.java
index b4f4118527..e6123de118 100644
--- a/spring-5-reactive-security/src/test/java/com/baeldung/SpringContextTest.java
+++ b/spring-5-reactive-security/src/test/java/com/baeldung/SpringContextTest.java
@@ -1,14 +1,13 @@
package com.baeldung;
+import com.baeldung.reactive.actuator.Spring5ReactiveApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
-import com.baeldung.reactive.security.SpringSecurity5Application;
-
@RunWith(SpringRunner.class)
-@SpringBootTest(classes = SpringSecurity5Application.class)
+@SpringBootTest(classes = Spring5ReactiveApplication.class)
public class SpringContextTest {
@Test
diff --git a/spring-5-reactive/README.md b/spring-5-reactive/README.md
index 1945b7ea33..0f4756c53e 100644
--- a/spring-5-reactive/README.md
+++ b/spring-5-reactive/README.md
@@ -7,11 +7,9 @@ The "REST With Spring" Classes: https://bit.ly/restwithspring
### Relevant Articles
-- [Spring 5 WebClient](https://www.baeldung.com/spring-5-webclient)
- [Exploring the Spring 5 WebFlux URL Matching](https://www.baeldung.com/spring-5-mvc-url-matching)
- [Reactive WebSockets with Spring 5](https://www.baeldung.com/spring-5-reactive-websockets)
- [Spring Webflux Filters](https://www.baeldung.com/spring-webflux-filters)
- [How to Set a Header on a Response with Spring 5](https://www.baeldung.com/spring-response-header)
-- [Handling Errors in Spring WebFlux](https://www.baeldung.com/spring-webflux-errors)
- [A Guide to Spring Session Reactive Support: WebSession](https://www.baeldung.com/spring-session-reactive)
- More articles: [[next -->]](/spring-5-reactive-2)
diff --git a/spring-5-reactive/src/main/java/com/baeldung/web/reactive/Task.java b/spring-5-reactive/src/main/java/com/baeldung/web/reactive/Task.java
deleted file mode 100644
index 725fd931e1..0000000000
--- a/spring-5-reactive/src/main/java/com/baeldung/web/reactive/Task.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.baeldung.web.reactive;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class Task {
-
- private final String name;
-
- private final int id;
-
- public Task(@JsonProperty("name") String name, @JsonProperty("id") int id) {
- this.name = name;
- this.id = id;
- }
-
- public String getName() {
- return this.name;
- }
-
- public int getId() {
- return this.id;
- }
-
- @Override
- public String toString() {
- return "Task{" + "name='" + name + '\'' + ", id=" + id + '}';
- }
-}
diff --git a/spring-5-webflux/README.md b/spring-5-webflux/README.md
index bd667468fb..c0b600943e 100644
--- a/spring-5-webflux/README.md
+++ b/spring-5-webflux/README.md
@@ -6,7 +6,6 @@ This module contains articles about Spring 5 WebFlux
- [Spring Boot Reactor Netty Configuration](https://www.baeldung.com/spring-boot-reactor-netty)
- [How to Return 404 with Spring WebFlux](https://www.baeldung.com/spring-webflux-404)
-- [Spring WebClient Requests with Parameters](https://www.baeldung.com/webflux-webclient-parameters)
- [RSocket Using Spring Boot](https://www.baeldung.com/spring-boot-rsocket)
- [Spring MVC Async vs Spring WebFlux](https://www.baeldung.com/spring-mvc-async-vs-webflux)
- [Set a Timeout in Spring 5 Webflux WebClient](https://www.baeldung.com/spring-webflux-timeout)
diff --git a/spring-reactive/README.md b/spring-reactive/README.md
new file mode 100644
index 0000000000..9f1852d912
--- /dev/null
+++ b/spring-reactive/README.md
@@ -0,0 +1,16 @@
+## Spring Reactive
+
+This module contains articles describing reactive processing in Spring.
+
+## Relevant articles:
+
+- [Intro To Reactor Core](https://www.baeldung.com/reactor-core)
+- [Debugging Reactive Streams in Java](https://www.baeldung.com/spring-debugging-reactive-streams)
+- [Guide to Spring 5 WebFlux](https://www.baeldung.com/spring-webflux)
+- [Introduction to the Functional Web Framework in Spring 5](https://www.baeldung.com/spring-5-functional-web)
+- [Spring 5 WebClient](https://www.baeldung.com/spring-5-webclient)
+- [Spring WebClient vs. RestTemplate](https://www.baeldung.com/spring-webclient-resttemplate)
+- [Spring WebClient Requests with Parameters](https://www.baeldung.com/webflux-webclient-parameters)
+- [Handling Errors in Spring WebFlux](https://www.baeldung.com/spring-webflux-errors)
+- [Spring Security 5 for Reactive Applications](https://www.baeldung.com/spring-security-5-reactive)
+- [Concurrency in Spring WebFlux](https://www.baeldung.com/spring-webflux-concurrency)
\ No newline at end of file
diff --git a/spring-reactive/pom.xml b/spring-reactive/pom.xml
new file mode 100644
index 0000000000..d31ee04d82
--- /dev/null
+++ b/spring-reactive/pom.xml
@@ -0,0 +1,103 @@
+
+
+ 4.0.0
+
+
+ com.baeldung
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../parent-boot-2
+
+
+ spring-reactive
+
+
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ io.reactivex.rxjava2
+ rxjava
+ ${rxjava.version}
+
+
+ io.projectreactor.kafka
+ reactor-kafka
+ ${reactor-kafka.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-data-mongodb-reactive
+
+
+ org.springframework.security
+ spring-security-test
+ test
+
+
+ io.projectreactor
+ reactor-test
+ ${reactor.version}
+ test
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+ integration-lite-first
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ ${project.basedir}/src/test/resources/logback-test.xml
+
+
+
+
+
+
+
+ integration-lite-second
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ ${project.basedir}/src/test/resources/logback-test.xml
+
+
+
+
+
+
+
+
+
+ 3.4.12
+ 1.2.2.RELEASE
+ 2.2.19
+
+
+
\ No newline at end of file
diff --git a/spring-webflux-threads/src/main/java/com/baeldung/webflux/Application.java b/spring-reactive/src/main/java/com/baeldung/reactive/concurrency/Application.java
similarity index 92%
rename from spring-webflux-threads/src/main/java/com/baeldung/webflux/Application.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/concurrency/Application.java
index 06a148a77f..f34d930ef0 100644
--- a/spring-webflux-threads/src/main/java/com/baeldung/webflux/Application.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/concurrency/Application.java
@@ -1,4 +1,4 @@
-package com.baeldung.webflux;
+package com.baeldung.reactive.concurrency;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/spring-webflux-threads/src/main/java/com/baeldung/webflux/Controller.java b/spring-reactive/src/main/java/com/baeldung/reactive/concurrency/Controller.java
similarity index 99%
rename from spring-webflux-threads/src/main/java/com/baeldung/webflux/Controller.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/concurrency/Controller.java
index 3c7e4e41ca..70928d4dca 100644
--- a/spring-webflux-threads/src/main/java/com/baeldung/webflux/Controller.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/concurrency/Controller.java
@@ -1,12 +1,6 @@
-package com.baeldung.webflux;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
+package com.baeldung.reactive.concurrency;
+import io.reactivex.Observable;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
@@ -21,8 +15,6 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.reactive.function.client.WebClient;
-
-import io.reactivex.Observable;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Scheduler;
@@ -34,6 +26,13 @@ import reactor.kafka.sender.KafkaSender;
import reactor.kafka.sender.SenderOptions;
import reactor.kafka.sender.SenderRecord;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
@RestController
@RequestMapping("/")
public class Controller {
diff --git a/spring-webflux-threads/src/main/java/com/baeldung/webflux/Person.java b/spring-reactive/src/main/java/com/baeldung/reactive/concurrency/Person.java
similarity index 91%
rename from spring-webflux-threads/src/main/java/com/baeldung/webflux/Person.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/concurrency/Person.java
index 4c6bd5f585..10029330af 100644
--- a/spring-webflux-threads/src/main/java/com/baeldung/webflux/Person.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/concurrency/Person.java
@@ -1,4 +1,4 @@
-package com.baeldung.webflux;
+package com.baeldung.reactive.concurrency;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
diff --git a/spring-webflux-threads/src/main/java/com/baeldung/webflux/PersonRepository.java b/spring-reactive/src/main/java/com/baeldung/reactive/concurrency/PersonRepository.java
similarity index 79%
rename from spring-webflux-threads/src/main/java/com/baeldung/webflux/PersonRepository.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/concurrency/PersonRepository.java
index 38fbd3d431..221ea3d74d 100644
--- a/spring-webflux-threads/src/main/java/com/baeldung/webflux/PersonRepository.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/concurrency/PersonRepository.java
@@ -1,4 +1,4 @@
-package com.baeldung.webflux;
+package com.baeldung.reactive.concurrency;
import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/ConsumerDebuggingApplication.java b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/ConsumerDebuggingApplication.java
similarity index 96%
rename from spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/ConsumerDebuggingApplication.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/ConsumerDebuggingApplication.java
index 3f01310006..fa10383c95 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/ConsumerDebuggingApplication.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/ConsumerDebuggingApplication.java
@@ -1,6 +1,4 @@
-package com.baeldung.debugging.consumer;
-
-import java.util.Collections;
+package com.baeldung.reactive.debugging.consumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -9,9 +7,10 @@ import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.security.config.web.server.ServerHttpSecurity;
import org.springframework.security.web.server.SecurityWebFilterChain;
-
import reactor.core.publisher.Hooks;
+import java.util.Collections;
+
@SpringBootApplication(exclude = MongoReactiveAutoConfiguration.class)
@EnableScheduling
public class ConsumerDebuggingApplication {
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/chronjobs/ChronJobs.java b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/chronjobs/ChronJobs.java
similarity index 95%
rename from spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/chronjobs/ChronJobs.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/chronjobs/ChronJobs.java
index bf96ab56d6..b58648ff9d 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/chronjobs/ChronJobs.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/chronjobs/ChronJobs.java
@@ -1,8 +1,8 @@
-package com.baeldung.debugging.consumer.chronjobs;
-
-import java.time.Duration;
-import java.util.concurrent.ThreadLocalRandom;
+package com.baeldung.reactive.debugging.consumer.chronjobs;
+import com.baeldung.reactive.debugging.consumer.model.Foo;
+import com.baeldung.reactive.debugging.consumer.model.FooDto;
+import com.baeldung.reactive.debugging.consumer.service.FooService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -10,13 +10,11 @@ import org.springframework.http.MediaType;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
-
-import com.baeldung.debugging.consumer.model.Foo;
-import com.baeldung.debugging.consumer.model.FooDto;
-import com.baeldung.debugging.consumer.service.FooService;
-
import reactor.core.publisher.Flux;
+import java.time.Duration;
+import java.util.concurrent.ThreadLocalRandom;
+
@Component
public class ChronJobs {
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/controllers/ReactiveConfigsToggleRestController.java b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/controllers/ReactiveConfigsToggleRestController.java
similarity index 89%
rename from spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/controllers/ReactiveConfigsToggleRestController.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/controllers/ReactiveConfigsToggleRestController.java
index 3dcdc6c7c0..df13113a82 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/controllers/ReactiveConfigsToggleRestController.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/controllers/ReactiveConfigsToggleRestController.java
@@ -1,8 +1,7 @@
-package com.baeldung.debugging.consumer.controllers;
+package com.baeldung.reactive.debugging.consumer.controllers;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
-
import reactor.core.publisher.Hooks;
@RestController
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/model/Foo.java b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/model/Foo.java
similarity index 91%
rename from spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/model/Foo.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/model/Foo.java
index 916ca93bfc..d20e2c9ba0 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/model/Foo.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/model/Foo.java
@@ -1,12 +1,12 @@
-package com.baeldung.debugging.consumer.model;
-
-import java.util.concurrent.ThreadLocalRandom;
+package com.baeldung.reactive.debugging.consumer.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
+import java.util.concurrent.ThreadLocalRandom;
+
@Getter
@Setter
@NoArgsConstructor
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/model/FooDto.java b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/model/FooDto.java
similarity index 81%
rename from spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/model/FooDto.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/model/FooDto.java
index 33f19c4e60..bf6f614e18 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/model/FooDto.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/model/FooDto.java
@@ -1,4 +1,4 @@
-package com.baeldung.debugging.consumer.model;
+package com.baeldung.reactive.debugging.consumer.model;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/service/FooNameHelper.java b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/service/FooNameHelper.java
similarity index 91%
rename from spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/service/FooNameHelper.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/service/FooNameHelper.java
index 772b360437..cdd9ca31a6 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/service/FooNameHelper.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/service/FooNameHelper.java
@@ -1,11 +1,10 @@
-package com.baeldung.debugging.consumer.service;
+package com.baeldung.reactive.debugging.consumer.service;
+
+import com.baeldung.reactive.debugging.consumer.model.Foo;
+import reactor.core.publisher.Flux;
import java.util.concurrent.ThreadLocalRandom;
-import com.baeldung.debugging.consumer.model.Foo;
-
-import reactor.core.publisher.Flux;
-
public class FooNameHelper {
public static Flux concatAndSubstringFooName(Flux flux) {
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/service/FooQuantityHelper.java b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/service/FooQuantityHelper.java
similarity index 86%
rename from spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/service/FooQuantityHelper.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/service/FooQuantityHelper.java
index 615239313d..f4600b41b9 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/service/FooQuantityHelper.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/service/FooQuantityHelper.java
@@ -1,11 +1,10 @@
-package com.baeldung.debugging.consumer.service;
+package com.baeldung.reactive.debugging.consumer.service;
+
+import com.baeldung.reactive.debugging.consumer.model.Foo;
+import reactor.core.publisher.Flux;
import java.util.concurrent.ThreadLocalRandom;
-import com.baeldung.debugging.consumer.model.Foo;
-
-import reactor.core.publisher.Flux;
-
public class FooQuantityHelper {
public static Flux processFooReducingQuantity(Flux flux) {
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/service/FooReporter.java b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/service/FooReporter.java
similarity index 86%
rename from spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/service/FooReporter.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/service/FooReporter.java
index f53cd238e0..1a8f9bc783 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/service/FooReporter.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/service/FooReporter.java
@@ -1,10 +1,8 @@
-package com.baeldung.debugging.consumer.service;
+package com.baeldung.reactive.debugging.consumer.service;
+import com.baeldung.reactive.debugging.consumer.model.Foo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
-import com.baeldung.debugging.consumer.model.Foo;
-
import reactor.core.publisher.Flux;
public class FooReporter {
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/service/FooService.java b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/service/FooService.java
similarity index 87%
rename from spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/service/FooService.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/service/FooService.java
index 438f6d473c..bafaa3cfa0 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/consumer/service/FooService.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/consumer/service/FooService.java
@@ -1,20 +1,18 @@
-package com.baeldung.debugging.consumer.service;
-
-import static com.baeldung.debugging.consumer.service.FooNameHelper.concatAndSubstringFooName;
-import static com.baeldung.debugging.consumer.service.FooNameHelper.substringFooName;
-import static com.baeldung.debugging.consumer.service.FooQuantityHelper.divideFooQuantity;
-import static com.baeldung.debugging.consumer.service.FooQuantityHelper.processFooReducingQuantity;
-import static com.baeldung.debugging.consumer.service.FooReporter.reportResult;
+package com.baeldung.reactive.debugging.consumer.service;
+import com.baeldung.reactive.debugging.consumer.model.Foo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
-
-import com.baeldung.debugging.consumer.model.Foo;
-
import reactor.core.publisher.Flux;
import reactor.core.scheduler.Schedulers;
+import static com.baeldung.reactive.debugging.consumer.service.FooNameHelper.concatAndSubstringFooName;
+import static com.baeldung.reactive.debugging.consumer.service.FooNameHelper.substringFooName;
+import static com.baeldung.reactive.debugging.consumer.service.FooQuantityHelper.divideFooQuantity;
+import static com.baeldung.reactive.debugging.consumer.service.FooQuantityHelper.processFooReducingQuantity;
+import static com.baeldung.reactive.debugging.consumer.service.FooReporter.reportResult;
+
@Component
public class FooService {
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/server/ServerDebuggingApplication.java b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/server/ServerDebuggingApplication.java
similarity index 95%
rename from spring-5-reactive-2/src/main/java/com/baeldung/debugging/server/ServerDebuggingApplication.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/debugging/server/ServerDebuggingApplication.java
index 4fdc1dd137..c9838705b5 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/server/ServerDebuggingApplication.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/server/ServerDebuggingApplication.java
@@ -1,6 +1,4 @@
-package com.baeldung.debugging.server;
-
-import java.util.Collections;
+package com.baeldung.reactive.debugging.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -9,6 +7,8 @@ import org.springframework.security.config.web.server.ServerHttpSecurity;
import org.springframework.security.web.server.SecurityWebFilterChain;
import org.springframework.web.reactive.config.EnableWebFlux;
+import java.util.Collections;
+
@EnableWebFlux
@SpringBootApplication
public class ServerDebuggingApplication {
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/server/handlers/ServerHandler.java b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/server/handlers/ServerHandler.java
similarity index 93%
rename from spring-5-reactive-2/src/main/java/com/baeldung/debugging/server/handlers/ServerHandler.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/debugging/server/handlers/ServerHandler.java
index 759cd9b01d..15f9a4b786 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/server/handlers/ServerHandler.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/server/handlers/ServerHandler.java
@@ -1,20 +1,18 @@
-package com.baeldung.debugging.server.handlers;
-
-import java.time.Duration;
-import java.util.concurrent.ThreadLocalRandom;
+package com.baeldung.reactive.debugging.server.handlers;
+import com.baeldung.reactive.debugging.server.model.Foo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
-
-import com.baeldung.debugging.server.model.Foo;
-
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
+import java.time.Duration;
+import java.util.concurrent.ThreadLocalRandom;
+
@Component
public class ServerHandler {
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/server/model/Foo.java b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/server/model/Foo.java
similarity index 73%
rename from spring-5-reactive-2/src/main/java/com/baeldung/debugging/server/model/Foo.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/debugging/server/model/Foo.java
index 2d9491f3dd..2c419a23f8 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/server/model/Foo.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/server/model/Foo.java
@@ -1,4 +1,4 @@
-package com.baeldung.debugging.server.model;
+package com.baeldung.reactive.debugging.server.model;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/server/routers/ServerRouter.java b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/server/routers/ServerRouter.java
similarity index 86%
rename from spring-5-reactive-2/src/main/java/com/baeldung/debugging/server/routers/ServerRouter.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/debugging/server/routers/ServerRouter.java
index 6378b2213d..5db2ab92b6 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/debugging/server/routers/ServerRouter.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/debugging/server/routers/ServerRouter.java
@@ -1,5 +1,6 @@
-package com.baeldung.debugging.server.routers;
+package com.baeldung.reactive.debugging.server.routers;
+import com.baeldung.reactive.debugging.server.handlers.ServerHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -8,8 +9,6 @@ import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerResponse;
-import com.baeldung.debugging.server.handlers.ServerHandler;
-
@Configuration
public class ServerRouter {
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/webclient/WebClientApplication.java b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/ErrorHandlingApplication.java
similarity index 62%
rename from spring-5-reactive-2/src/main/java/com/baeldung/webclient/WebClientApplication.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/ErrorHandlingApplication.java
index 3c53a2c1d3..a22f04a8d2 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/webclient/WebClientApplication.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/ErrorHandlingApplication.java
@@ -1,4 +1,4 @@
-package com.baeldung.webclient;
+package com.baeldung.reactive.errorhandling;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -7,16 +7,17 @@ import org.springframework.security.config.web.server.ServerHttpSecurity;
import org.springframework.security.web.server.SecurityWebFilterChain;
@SpringBootApplication
-public class WebClientApplication {
+public class ErrorHandlingApplication {
+
public static void main(String[] args) {
- SpringApplication.run(WebClientApplication.class, args);
+ SpringApplication.run(ErrorHandlingApplication.class, args);
}
-
+
@Bean
- public SecurityWebFilterChain functionalValidationsSpringSecurityFilterChain(ServerHttpSecurity http) {
+ public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
http.authorizeExchange()
- .anyExchange()
- .permitAll();
+ .anyExchange()
+ .permitAll();
http.csrf().disable();
return http.build();
}
diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/GlobalErrorAttributes.java b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/GlobalErrorAttributes.java
similarity index 99%
rename from spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/GlobalErrorAttributes.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/GlobalErrorAttributes.java
index 5885ac50d0..0a96a8593c 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/GlobalErrorAttributes.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/GlobalErrorAttributes.java
@@ -1,14 +1,13 @@
-
package com.baeldung.reactive.errorhandling;
-import java.util.Map;
-
import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.reactive.error.DefaultErrorAttributes;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.server.ServerRequest;
+import java.util.Map;
+
@Component
public class GlobalErrorAttributes extends DefaultErrorAttributes{
diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/GlobalErrorWebExceptionHandler.java b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/GlobalErrorWebExceptionHandler.java
similarity index 97%
rename from spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/GlobalErrorWebExceptionHandler.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/GlobalErrorWebExceptionHandler.java
index 4f3f1795da..24583308cd 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/GlobalErrorWebExceptionHandler.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/GlobalErrorWebExceptionHandler.java
@@ -1,8 +1,5 @@
-
package com.baeldung.reactive.errorhandling;
-import java.util.Map;
-
import org.springframework.boot.autoconfigure.web.WebProperties;
import org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler;
import org.springframework.boot.web.error.ErrorAttributeOptions;
@@ -19,14 +16,15 @@ import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
-
import reactor.core.publisher.Mono;
+import java.util.Map;
+
@Component
@Order(-2)
public class GlobalErrorWebExceptionHandler extends AbstractErrorWebExceptionHandler {
- public GlobalErrorWebExceptionHandler(GlobalErrorAttributes g, ApplicationContext applicationContext,
+ public GlobalErrorWebExceptionHandler(GlobalErrorAttributes g, ApplicationContext applicationContext,
ServerCodecConfigurer serverCodecConfigurer) {
super(g, new WebProperties.Resources(), applicationContext);
super.setMessageWriters(serverCodecConfigurer.getWriters());
diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/NameRequiredException.java b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/NameRequiredException.java
similarity index 99%
rename from spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/NameRequiredException.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/NameRequiredException.java
index 38d35544a7..bdc7771b80 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/NameRequiredException.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/NameRequiredException.java
@@ -1,4 +1,3 @@
-
package com.baeldung.reactive.errorhandling;
import org.springframework.http.HttpStatus;
diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler1.java b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler1.java
similarity index 99%
rename from spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler1.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler1.java
index c71c8ecac0..32f2f1c3a2 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler1.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler1.java
@@ -1,4 +1,3 @@
-
package com.baeldung.reactive.errorhandling.handlers;
import org.springframework.http.MediaType;
diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler2.java b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler2.java
similarity index 99%
rename from spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler2.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler2.java
index 92e881543e..093120c92b 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler2.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler2.java
@@ -1,4 +1,3 @@
-
package com.baeldung.reactive.errorhandling.handlers;
import org.springframework.http.MediaType;
diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler3.java b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler3.java
similarity index 99%
rename from spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler3.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler3.java
index 8c988a6633..44842e0539 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler3.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler3.java
@@ -1,4 +1,3 @@
-
package com.baeldung.reactive.errorhandling.handlers;
import org.springframework.http.MediaType;
diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler4.java b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler4.java
similarity index 99%
rename from spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler4.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler4.java
index 3d6ef258d3..2d391a42a7 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler4.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler4.java
@@ -1,4 +1,3 @@
-
package com.baeldung.reactive.errorhandling.handlers;
import com.baeldung.reactive.errorhandling.NameRequiredException;
diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler5.java b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler5.java
similarity index 99%
rename from spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler5.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler5.java
index 41605b355b..a466982865 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler5.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/handlers/Handler5.java
@@ -1,4 +1,3 @@
-
package com.baeldung.reactive.errorhandling.handlers;
import org.springframework.stereotype.Component;
diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router1.java b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router1.java
similarity index 99%
rename from spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router1.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router1.java
index 91be24571c..caf779b456 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router1.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router1.java
@@ -1,4 +1,3 @@
-
package com.baeldung.reactive.errorhandling.routers;
import com.baeldung.reactive.errorhandling.handlers.Handler1;
diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router2.java b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router2.java
similarity index 99%
rename from spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router2.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router2.java
index bc7831f494..b965257c30 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router2.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router2.java
@@ -1,4 +1,3 @@
-
package com.baeldung.reactive.errorhandling.routers;
import com.baeldung.reactive.errorhandling.handlers.Handler2;
diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router3.java b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router3.java
similarity index 99%
rename from spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router3.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router3.java
index 461e6fe9e7..b8f7f983cc 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router3.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router3.java
@@ -1,4 +1,3 @@
-
package com.baeldung.reactive.errorhandling.routers;
import com.baeldung.reactive.errorhandling.handlers.Handler3;
diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router4.java b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router4.java
similarity index 99%
rename from spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router4.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router4.java
index 9dccc6858f..03c65fec67 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router4.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router4.java
@@ -1,4 +1,3 @@
-
package com.baeldung.reactive.errorhandling.routers;
import com.baeldung.reactive.errorhandling.handlers.Handler4;
diff --git a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router5.java b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router5.java
similarity index 99%
rename from spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router5.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router5.java
index 59fd587fc8..c68e04659f 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router5.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/errorhandling/routers/Router5.java
@@ -1,4 +1,3 @@
-
package com.baeldung.reactive.errorhandling.routers;
import com.baeldung.reactive.errorhandling.handlers.Handler5;
diff --git a/spring-5-reactive-security/src/main/java/com/baeldung/reactive/security/GreetController.java b/spring-reactive/src/main/java/com/baeldung/reactive/security/GreetController.java
similarity index 100%
rename from spring-5-reactive-security/src/main/java/com/baeldung/reactive/security/GreetController.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/security/GreetController.java
diff --git a/spring-5-reactive-security/src/main/java/com/baeldung/reactive/security/GreetService.java b/spring-reactive/src/main/java/com/baeldung/reactive/security/GreetService.java
similarity index 100%
rename from spring-5-reactive-security/src/main/java/com/baeldung/reactive/security/GreetService.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/security/GreetService.java
diff --git a/spring-5-reactive-security/src/main/java/com/baeldung/reactive/security/SecurityConfig.java b/spring-reactive/src/main/java/com/baeldung/reactive/security/SecurityConfig.java
similarity index 88%
rename from spring-5-reactive-security/src/main/java/com/baeldung/reactive/security/SecurityConfig.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/security/SecurityConfig.java
index 64e96ddae1..bb2f2d50e1 100644
--- a/spring-5-reactive-security/src/main/java/com/baeldung/reactive/security/SecurityConfig.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/security/SecurityConfig.java
@@ -1,6 +1,5 @@
package com.baeldung.reactive.security;
-import org.springframework.boot.actuate.autoconfigure.security.reactive.EndpointRequest;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.method.configuration.EnableReactiveMethodSecurity;
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
@@ -12,8 +11,6 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.server.SecurityWebFilterChain;
-import com.baeldung.reactive.actuator.FeaturesEndpoint;
-
@EnableWebFluxSecurity
@EnableReactiveMethodSecurity
public class SecurityConfig {
@@ -23,8 +20,6 @@ public class SecurityConfig {
return http.authorizeExchange()
.pathMatchers("/admin")
.hasAuthority("ROLE_ADMIN")
- .matchers(EndpointRequest.to(FeaturesEndpoint.class))
- .permitAll()
.anyExchange()
.authenticated()
.and()
diff --git a/spring-5-reactive-security/src/main/java/com/baeldung/reactive/security/SpringSecurity5Application.java b/spring-reactive/src/main/java/com/baeldung/reactive/security/SpringSecurity5Application.java
similarity index 99%
rename from spring-5-reactive-security/src/main/java/com/baeldung/reactive/security/SpringSecurity5Application.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/security/SpringSecurity5Application.java
index bb0f007ada..bc0895a38b 100644
--- a/spring-5-reactive-security/src/main/java/com/baeldung/reactive/security/SpringSecurity5Application.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/security/SpringSecurity5Application.java
@@ -8,7 +8,6 @@ import org.springframework.http.server.reactive.HttpHandler;
import org.springframework.http.server.reactive.ReactorHttpHandlerAdapter;
import org.springframework.web.reactive.config.EnableWebFlux;
import org.springframework.web.server.adapter.WebHttpHandlerBuilder;
-
import reactor.netty.DisposableServer;
import reactor.netty.http.server.HttpServer;
diff --git a/spring-5-reactive/src/main/java/com/baeldung/web/reactive/client/Foo.java b/spring-reactive/src/main/java/com/baeldung/reactive/webclient/Foo.java
similarity index 87%
rename from spring-5-reactive/src/main/java/com/baeldung/web/reactive/client/Foo.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/webclient/Foo.java
index c6e3678832..a58d672686 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/web/reactive/client/Foo.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/webclient/Foo.java
@@ -1,4 +1,4 @@
-package com.baeldung.web.reactive.client;
+package com.baeldung.reactive.webclient;
public class Foo {
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/webclient/Tweet.java b/spring-reactive/src/main/java/com/baeldung/reactive/webclient/Tweet.java
similarity index 83%
rename from spring-5-reactive-2/src/main/java/com/baeldung/webclient/Tweet.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/webclient/Tweet.java
index 8d294955f3..4ef1aecabb 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/webclient/Tweet.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/webclient/Tweet.java
@@ -1,4 +1,4 @@
-package com.baeldung.webclient;
+package com.baeldung.reactive.webclient;
import lombok.AllArgsConstructor;
import lombok.Data;
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/webclient/TweetsSlowServiceController.java b/spring-reactive/src/main/java/com/baeldung/reactive/webclient/TweetsSlowServiceController.java
similarity index 93%
rename from spring-5-reactive-2/src/main/java/com/baeldung/webclient/TweetsSlowServiceController.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/webclient/TweetsSlowServiceController.java
index fecaca25ef..42ff603b87 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/webclient/TweetsSlowServiceController.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/webclient/TweetsSlowServiceController.java
@@ -1,4 +1,4 @@
-package com.baeldung.webclient;
+package com.baeldung.reactive.webclient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
diff --git a/spring-5-reactive/src/main/java/com/baeldung/web/reactive/client/WebClientApplication.java b/spring-reactive/src/main/java/com/baeldung/reactive/webclient/WebClientApplication.java
similarity index 91%
rename from spring-5-reactive/src/main/java/com/baeldung/web/reactive/client/WebClientApplication.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/webclient/WebClientApplication.java
index aa9b81de4f..d2a5b6a024 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/web/reactive/client/WebClientApplication.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/webclient/WebClientApplication.java
@@ -1,4 +1,4 @@
-package com.baeldung.web.reactive.client;
+package com.baeldung.reactive.webclient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/spring-5-reactive/src/main/java/com/baeldung/web/reactive/client/WebClientController.java b/spring-reactive/src/main/java/com/baeldung/reactive/webclient/WebClientController.java
similarity index 93%
rename from spring-5-reactive/src/main/java/com/baeldung/web/reactive/client/WebClientController.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/webclient/WebClientController.java
index 1a91001807..0a83b1a1b7 100644
--- a/spring-5-reactive/src/main/java/com/baeldung/web/reactive/client/WebClientController.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/webclient/WebClientController.java
@@ -1,7 +1,4 @@
-package com.baeldung.web.reactive.client;
-
-import java.util.HashMap;
-import java.util.Map;
+package com.baeldung.reactive.webclient;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
@@ -11,9 +8,11 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
-
import reactor.core.publisher.Mono;
+import java.util.HashMap;
+import java.util.Map;
+
@RestController
public class WebClientController {
@@ -37,6 +36,6 @@ public class WebClientController {
@PostMapping(value = "/resource-multipart", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String handleFormUpload(@RequestPart("key1") String value1, @RequestPart("key2") String value2) {
- return "processed-" + value1 + "-" + value2;
+ return "processed-" + value1 + '-' + value2;
}
}
diff --git a/spring-5-reactive-2/src/main/java/com/baeldung/webclient/WebController.java b/spring-reactive/src/main/java/com/baeldung/reactive/webclient/WebController.java
similarity index 97%
rename from spring-5-reactive-2/src/main/java/com/baeldung/webclient/WebController.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/webclient/WebController.java
index 73f5724819..30b3ccc959 100644
--- a/spring-5-reactive-2/src/main/java/com/baeldung/webclient/WebController.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/webclient/WebController.java
@@ -1,4 +1,4 @@
-package com.baeldung.webclient;
+package com.baeldung.reactive.webclient;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
diff --git a/spring-5-webflux/src/main/java/com/baeldung/spring/webclientrequests/SpringWebClientRequestsApp.java b/spring-reactive/src/main/java/com/baeldung/reactive/webclientrequests/SpringWebClientRequestsApp.java
similarity index 86%
rename from spring-5-webflux/src/main/java/com/baeldung/spring/webclientrequests/SpringWebClientRequestsApp.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/webclientrequests/SpringWebClientRequestsApp.java
index 314fe2fdf9..d43fe43a77 100644
--- a/spring-5-webflux/src/main/java/com/baeldung/spring/webclientrequests/SpringWebClientRequestsApp.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/webclientrequests/SpringWebClientRequestsApp.java
@@ -1,4 +1,4 @@
-package com.baeldung.spring.webclientrequests;
+package com.baeldung.reactive.webclientrequests;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/spring-reactive/src/main/java/com/baeldung/reactive/webflux/Employee.java b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/Employee.java
new file mode 100644
index 0000000000..d41a4f2791
--- /dev/null
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/Employee.java
@@ -0,0 +1,17 @@
+package com.baeldung.reactive.webflux;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Employee {
+
+ private String id;
+ private String name;
+
+ // standard getters and setters
+
+}
diff --git a/spring-reactive/src/main/java/com/baeldung/reactive/webflux/EmployeeRepository.java b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/EmployeeRepository.java
new file mode 100644
index 0000000000..8a57f5c510
--- /dev/null
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/EmployeeRepository.java
@@ -0,0 +1,59 @@
+package com.baeldung.reactive.webflux;
+
+import com.baeldung.reactive.webflux.Employee;
+import org.springframework.stereotype.Repository;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Repository
+public class EmployeeRepository {
+
+ static Map employeeData;
+
+ static Map employeeAccessData;
+
+ static {
+ employeeData = new HashMap<>();
+ employeeData.put("1", new Employee("1", "Employee 1"));
+ employeeData.put("2", new Employee("2", "Employee 2"));
+ employeeData.put("3", new Employee("3", "Employee 3"));
+ employeeData.put("4", new Employee("4", "Employee 4"));
+ employeeData.put("5", new Employee("5", "Employee 5"));
+ employeeData.put("6", new Employee("6", "Employee 6"));
+ employeeData.put("7", new Employee("7", "Employee 7"));
+ employeeData.put("8", new Employee("8", "Employee 8"));
+ employeeData.put("9", new Employee("9", "Employee 9"));
+ employeeData.put("10", new Employee("10", "Employee 10"));
+
+ employeeAccessData = new HashMap<>();
+ employeeAccessData.put("1", "Employee 1 Access Key");
+ employeeAccessData.put("2", "Employee 2 Access Key");
+ employeeAccessData.put("3", "Employee 3 Access Key");
+ employeeAccessData.put("4", "Employee 4 Access Key");
+ employeeAccessData.put("5", "Employee 5 Access Key");
+ employeeAccessData.put("6", "Employee 6 Access Key");
+ employeeAccessData.put("7", "Employee 7 Access Key");
+ employeeAccessData.put("8", "Employee 8 Access Key");
+ employeeAccessData.put("9", "Employee 9 Access Key");
+ employeeAccessData.put("10", "Employee 10 Access Key");
+ }
+
+ public Mono findEmployeeById(String id) {
+ return Mono.just(employeeData.get(id));
+ }
+
+ public Flux findAllEmployees() {
+ return Flux.fromIterable(employeeData.values());
+ }
+
+ public Mono updateEmployee(Employee employee) {
+ Employee existingEmployee = employeeData.get(employee.getId());
+ if (existingEmployee != null) {
+ existingEmployee.setName(employee.getName());
+ }
+ return Mono.just(existingEmployee);
+ }
+}
diff --git a/spring-5-reactive-security/src/main/java/com/baeldung/webflux/EmployeeController.java b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/annotation/EmployeeController.java
similarity index 84%
rename from spring-5-reactive-security/src/main/java/com/baeldung/webflux/EmployeeController.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/webflux/annotation/EmployeeController.java
index 34e44afc8b..23aacfdd95 100644
--- a/spring-5-reactive-security/src/main/java/com/baeldung/webflux/EmployeeController.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/annotation/EmployeeController.java
@@ -1,12 +1,13 @@
-package com.baeldung.webflux;
+package com.baeldung.reactive.webflux.annotation;
+import com.baeldung.reactive.webflux.Employee;
+import com.baeldung.reactive.webflux.EmployeeRepository;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
-
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@@ -14,7 +15,7 @@ import reactor.core.publisher.Mono;
@RequestMapping("/employees")
public class EmployeeController {
- private EmployeeRepository employeeRepository;
+ private final EmployeeRepository employeeRepository;
public EmployeeController(EmployeeRepository employeeRepository) {
this.employeeRepository = employeeRepository;
diff --git a/spring-5-reactive-security/src/main/java/com/baeldung/webflux/EmployeeSpringApplication.java b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/annotation/EmployeeSpringApplication.java
similarity index 89%
rename from spring-5-reactive-security/src/main/java/com/baeldung/webflux/EmployeeSpringApplication.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/webflux/annotation/EmployeeSpringApplication.java
index 2652c36695..1a2ada96e9 100644
--- a/spring-5-reactive-security/src/main/java/com/baeldung/webflux/EmployeeSpringApplication.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/annotation/EmployeeSpringApplication.java
@@ -1,4 +1,4 @@
-package com.baeldung.webflux;
+package com.baeldung.reactive.webflux.annotation;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -7,7 +7,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
public class EmployeeSpringApplication {
public static void main(String[] args) {
-
SpringApplication.run(EmployeeSpringApplication.class, args);
EmployeeWebClient employeeWebClient = new EmployeeWebClient();
diff --git a/spring-5-reactive-security/src/main/java/com/baeldung/webflux/EmployeeWebClient.java b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/annotation/EmployeeWebClient.java
similarity index 59%
rename from spring-5-reactive-security/src/main/java/com/baeldung/webflux/EmployeeWebClient.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/webflux/annotation/EmployeeWebClient.java
index eb32408a7f..611a261a1b 100644
--- a/spring-5-reactive-security/src/main/java/com/baeldung/webflux/EmployeeWebClient.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/annotation/EmployeeWebClient.java
@@ -1,12 +1,16 @@
-package com.baeldung.webflux;
+package com.baeldung.reactive.webflux.annotation;
+import com.baeldung.reactive.webflux.Employee;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.web.reactive.function.client.WebClient;
-
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
public class EmployeeWebClient {
+ private static final Logger LOGGER = LoggerFactory.getLogger(EmployeeWebClient.class);
+
WebClient client = WebClient.create("http://localhost:8080");
public void consume() {
@@ -16,13 +20,13 @@ public class EmployeeWebClient {
.retrieve()
.bodyToMono(Employee.class);
- employeeMono.subscribe(System.out::println);
+ employeeMono.subscribe(employee -> LOGGER.debug("Employee: {}", employee));
Flux employeeFlux = client.get()
.uri("/employees")
.retrieve()
.bodyToFlux(Employee.class);
- employeeFlux.subscribe(System.out::println);
+ employeeFlux.subscribe(employee -> LOGGER.debug("Employee: {}", employee));
}
}
\ No newline at end of file
diff --git a/spring-reactive/src/main/java/com/baeldung/reactive/webflux/annotation/EmployeeWebSecurityConfig.java b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/annotation/EmployeeWebSecurityConfig.java
new file mode 100644
index 0000000000..8dfa455ce3
--- /dev/null
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/annotation/EmployeeWebSecurityConfig.java
@@ -0,0 +1,45 @@
+package com.baeldung.reactive.webflux.annotation;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.http.HttpMethod;
+import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
+import org.springframework.security.config.web.server.ServerHttpSecurity;
+import org.springframework.security.core.userdetails.MapReactiveUserDetailsService;
+import org.springframework.security.core.userdetails.User;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.security.web.server.SecurityWebFilterChain;
+
+@EnableWebFluxSecurity
+public class EmployeeWebSecurityConfig {
+
+ @Bean
+ public MapReactiveUserDetailsService userDetailsService() {
+ UserDetails user = User
+ .withUsername("admin")
+ .password(passwordEncoder().encode("password"))
+ .roles("ADMIN")
+ .build();
+ return new MapReactiveUserDetailsService(user);
+ }
+
+ @Bean
+ public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
+ http.csrf()
+ .disable()
+ .authorizeExchange()
+ .pathMatchers(HttpMethod.POST, "/employees/update")
+ .hasRole("ADMIN")
+ .pathMatchers("/**")
+ .permitAll()
+ .and()
+ .httpBasic();
+ return http.build();
+ }
+
+ @Bean
+ public PasswordEncoder passwordEncoder() {
+ return new BCryptPasswordEncoder();
+ }
+}
diff --git a/spring-5-reactive-security/src/main/java/com/baeldung/reactive/functional/EmployeeFunctionalConfig.java b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/functional/EmployeeFunctionalConfig.java
similarity index 92%
rename from spring-5-reactive-security/src/main/java/com/baeldung/reactive/functional/EmployeeFunctionalConfig.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/webflux/functional/EmployeeFunctionalConfig.java
index 76b697c1aa..f97d40e4e7 100644
--- a/spring-5-reactive-security/src/main/java/com/baeldung/reactive/functional/EmployeeFunctionalConfig.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/functional/EmployeeFunctionalConfig.java
@@ -1,75 +1,74 @@
-package com.baeldung.reactive.functional;
-
-import static org.springframework.web.reactive.function.BodyExtractors.toMono;
-import static org.springframework.web.reactive.function.server.RequestPredicates.GET;
-import static org.springframework.web.reactive.function.server.RequestPredicates.POST;
-import static org.springframework.web.reactive.function.server.RouterFunctions.route;
-import static org.springframework.web.reactive.function.server.ServerResponse.ok;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.config.web.server.ServerHttpSecurity;
-import org.springframework.security.web.server.SecurityWebFilterChain;
-import org.springframework.web.reactive.function.server.RouterFunction;
-import org.springframework.web.reactive.function.server.ServerResponse;
-
-import com.baeldung.webflux.Employee;
-import com.baeldung.webflux.EmployeeRepository;
-
-@Configuration
-public class EmployeeFunctionalConfig {
-
- @Bean
- EmployeeRepository employeeRepository() {
- return new EmployeeRepository();
- }
-
- @Bean
- RouterFunction getAllEmployeesRoute() {
- return route(GET("/employees"),
- req -> ok().body(
- employeeRepository().findAllEmployees(), Employee.class));
- }
-
- @Bean
- RouterFunction getEmployeeByIdRoute() {
- return route(GET("/employees/{id}"),
- req -> ok().body(
- employeeRepository().findEmployeeById(req.pathVariable("id")), Employee.class));
- }
-
- @Bean
- RouterFunction updateEmployeeRoute() {
- return route(POST("/employees/update"),
- req -> req.body(toMono(Employee.class))
- .doOnNext(employeeRepository()::updateEmployee)
- .then(ok().build()));
- }
-
- @Bean
- RouterFunction composedRoutes() {
- return
- route(GET("/employees"),
- req -> ok().body(
- employeeRepository().findAllEmployees(), Employee.class))
-
- .and(route(GET("/employees/{id}"),
- req -> ok().body(
- employeeRepository().findEmployeeById(req.pathVariable("id")), Employee.class)))
-
- .and(route(POST("/employees/update"),
- req -> req.body(toMono(Employee.class))
- .doOnNext(employeeRepository()::updateEmployee)
- .then(ok().build())));
- }
-
- @Bean
- public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
- http.csrf()
- .disable()
- .authorizeExchange()
- .anyExchange()
- .permitAll();
- return http.build();
- }
-}
+package com.baeldung.reactive.webflux.functional;
+
+import com.baeldung.reactive.webflux.Employee;
+import com.baeldung.reactive.webflux.EmployeeRepository;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.web.server.ServerHttpSecurity;
+import org.springframework.security.web.server.SecurityWebFilterChain;
+import org.springframework.web.reactive.function.server.RouterFunction;
+import org.springframework.web.reactive.function.server.ServerResponse;
+
+import static org.springframework.web.reactive.function.BodyExtractors.toMono;
+import static org.springframework.web.reactive.function.server.RequestPredicates.GET;
+import static org.springframework.web.reactive.function.server.RequestPredicates.POST;
+import static org.springframework.web.reactive.function.server.RouterFunctions.route;
+import static org.springframework.web.reactive.function.server.ServerResponse.ok;
+
+@Configuration
+public class EmployeeFunctionalConfig {
+
+ @Bean
+ EmployeeRepository employeeRepository() {
+ return new EmployeeRepository();
+ }
+
+ @Bean
+ RouterFunction getAllEmployeesRoute() {
+ return route(GET("/employees"),
+ req -> ok().body(
+ employeeRepository().findAllEmployees(), Employee.class));
+ }
+
+ @Bean
+ RouterFunction getEmployeeByIdRoute() {
+ return route(GET("/employees/{id}"),
+ req -> ok().body(
+ employeeRepository().findEmployeeById(req.pathVariable("id")), Employee.class));
+ }
+
+ @Bean
+ RouterFunction updateEmployeeRoute() {
+ return route(POST("/employees/update"),
+ req -> req.body(toMono(Employee.class))
+ .doOnNext(employeeRepository()::updateEmployee)
+ .then(ok().build()));
+ }
+
+ @Bean
+ RouterFunction composedRoutes() {
+ return
+ route(GET("/employees"),
+ req -> ok().body(
+ employeeRepository().findAllEmployees(), Employee.class))
+
+ .and(route(GET("/employees/{id}"),
+ req -> ok().body(
+ employeeRepository().findEmployeeById(req.pathVariable("id")), Employee.class)))
+
+ .and(route(POST("/employees/update"),
+ req -> req.body(toMono(Employee.class))
+ .doOnNext(employeeRepository()::updateEmployee)
+ .then(ok().build())));
+ }
+
+ @Bean
+ public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
+ http.csrf()
+ .disable()
+ .authorizeExchange()
+ .anyExchange()
+ .permitAll();
+ return http.build();
+ }
+}
diff --git a/spring-5-reactive-security/src/main/java/com/baeldung/reactive/functional/EmployeeSpringFunctionalApplication.java b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/functional/EmployeeSpringFunctionalApplication.java
similarity index 85%
rename from spring-5-reactive-security/src/main/java/com/baeldung/reactive/functional/EmployeeSpringFunctionalApplication.java
rename to spring-reactive/src/main/java/com/baeldung/reactive/webflux/functional/EmployeeSpringFunctionalApplication.java
index 1f2bd871fc..f710cf44eb 100644
--- a/spring-5-reactive-security/src/main/java/com/baeldung/reactive/functional/EmployeeSpringFunctionalApplication.java
+++ b/spring-reactive/src/main/java/com/baeldung/reactive/webflux/functional/EmployeeSpringFunctionalApplication.java
@@ -1,13 +1,13 @@
-package com.baeldung.reactive.functional;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class EmployeeSpringFunctionalApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(EmployeeSpringFunctionalApplication.class, args);
- }
-
-}
+package com.baeldung.reactive.webflux.functional;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class EmployeeSpringFunctionalApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(EmployeeSpringFunctionalApplication.class, args);
+ }
+
+}
diff --git a/spring-5-reactive-2/src/test/java/com/baeldung/debugging/consumer/ConsumerFooServiceIntegrationTest.java b/spring-reactive/src/test/java/com/baeldung/reactive/debugging/consumer/ConsumerFooServiceIntegrationTest.java
similarity index 54%
rename from spring-5-reactive-2/src/test/java/com/baeldung/debugging/consumer/ConsumerFooServiceIntegrationTest.java
rename to spring-reactive/src/test/java/com/baeldung/reactive/debugging/consumer/ConsumerFooServiceIntegrationTest.java
index 9d04541f8d..37e2ebe0ac 100644
--- a/spring-5-reactive-2/src/test/java/com/baeldung/debugging/consumer/ConsumerFooServiceIntegrationTest.java
+++ b/spring-reactive/src/test/java/com/baeldung/reactive/debugging/consumer/ConsumerFooServiceIntegrationTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.debugging.consumer;
+package com.baeldung.reactive.debugging.consumer;
import static org.assertj.core.api.Assertions.assertThat;
@@ -8,13 +8,12 @@ import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import com.baeldung.reactive.debugging.consumer.model.Foo;
+import com.baeldung.reactive.debugging.consumer.service.FooService;
+import com.baeldung.reactive.debugging.consumer.utils.ListAppender;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import com.baeldung.debugging.consumer.model.Foo;
-import com.baeldung.debugging.consumer.service.FooService;
-import com.baeldung.debugging.consumer.utils.ListAppender;
-
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.IThrowableProxy;
import reactor.core.publisher.Flux;
@@ -39,26 +38,26 @@ public class ConsumerFooServiceIntegrationTest {
service.processFoo(flux);
Collection allLoggedEntries = ListAppender.getEvents()
- .stream()
- .map(ILoggingEvent::getFormattedMessage)
- .collect(Collectors.toList());
+ .stream()
+ .map(ILoggingEvent::getFormattedMessage)
+ .collect(Collectors.toList());
Collection allSuppressedEntries = ListAppender.getEvents()
- .stream()
- .map(ILoggingEvent::getThrowableProxy)
- .flatMap(t -> {
- return Optional.ofNullable(t)
- .map(IThrowableProxy::getSuppressed)
- .map(Arrays::stream)
- .orElse(Stream.empty());
- })
- .map(IThrowableProxy::getClassName)
- .collect(Collectors.toList());
+ .stream()
+ .map(ILoggingEvent::getThrowableProxy)
+ .flatMap(t -> {
+ return Optional.ofNullable(t)
+ .map(IThrowableProxy::getSuppressed)
+ .map(Arrays::stream)
+ .orElse(Stream.empty());
+ })
+ .map(IThrowableProxy::getClassName)
+ .collect(Collectors.toList());
assertThat(allLoggedEntries).anyMatch(entry -> entry.contains("The following error happened on processFoo method!"))
- .anyMatch(entry -> entry.contains("| onSubscribe"))
- .anyMatch(entry -> entry.contains("| cancel()"));
+ .anyMatch(entry -> entry.contains("| onSubscribe"))
+ .anyMatch(entry -> entry.contains("| cancel()"));
assertThat(allSuppressedEntries)
- .anyMatch(entry -> entry.contains("reactor.core.publisher.FluxOnAssembly$OnAssemblyException"));
+ .anyMatch(entry -> entry.contains("reactor.core.publisher.FluxOnAssembly$OnAssemblyException"));
}
}
diff --git a/spring-5-reactive-2/src/test/java/com/baeldung/debugging/consumer/ConsumerFooServiceLiveTest.java b/spring-reactive/src/test/java/com/baeldung/reactive/debugging/consumer/ConsumerFooServiceLiveTest.java
similarity index 84%
rename from spring-5-reactive-2/src/test/java/com/baeldung/debugging/consumer/ConsumerFooServiceLiveTest.java
rename to spring-reactive/src/test/java/com/baeldung/reactive/debugging/consumer/ConsumerFooServiceLiveTest.java
index e61ea9e155..ff6e4b2bd2 100644
--- a/spring-5-reactive-2/src/test/java/com/baeldung/debugging/consumer/ConsumerFooServiceLiveTest.java
+++ b/spring-reactive/src/test/java/com/baeldung/reactive/debugging/consumer/ConsumerFooServiceLiveTest.java
@@ -1,16 +1,15 @@
-package com.baeldung.debugging.consumer;
+package com.baeldung.reactive.debugging.consumer;
+import com.baeldung.reactive.debugging.consumer.service.FooService;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.test.web.reactive.server.WebTestClient.ResponseSpec;
-import com.baeldung.debugging.consumer.service.FooService;
-
/**
* In order to run this live test, start the following classes:
- * - com.baeldung.debugging.server.ServerDebuggingApplication
- * - com.baeldung.debugging.consumer.ConsumerDebuggingApplication
+ * - com.baeldung.reactive.debugging.server.ServerDebuggingApplication
+ * - com.baeldung.reactive.debugging.consumer.ConsumerDebuggingApplication
*/
public class ConsumerFooServiceLiveTest {
diff --git a/spring-5-reactive-2/src/test/java/com/baeldung/debugging/consumer/utils/ListAppender.java b/spring-reactive/src/test/java/com/baeldung/reactive/debugging/consumer/utils/ListAppender.java
similarity index 90%
rename from spring-5-reactive-2/src/test/java/com/baeldung/debugging/consumer/utils/ListAppender.java
rename to spring-reactive/src/test/java/com/baeldung/reactive/debugging/consumer/utils/ListAppender.java
index c8c1c110bb..fe8b04e824 100644
--- a/spring-5-reactive-2/src/test/java/com/baeldung/debugging/consumer/utils/ListAppender.java
+++ b/spring-reactive/src/test/java/com/baeldung/reactive/debugging/consumer/utils/ListAppender.java
@@ -1,11 +1,11 @@
-package com.baeldung.debugging.consumer.utils;
-
-import java.util.ArrayList;
-import java.util.List;
+package com.baeldung.reactive.debugging.consumer.utils;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.AppenderBase;
+import java.util.ArrayList;
+import java.util.List;
+
public class ListAppender extends AppenderBase {
static private List events = new ArrayList<>();
diff --git a/spring-5-reactive/src/test/java/com/baeldung/reactive/errorhandling/ErrorHandlingIntegrationTest.java b/spring-reactive/src/test/java/com/baeldung/reactive/errorhandling/ErrorHandlingIntegrationTest.java
similarity index 100%
rename from spring-5-reactive/src/test/java/com/baeldung/reactive/errorhandling/ErrorHandlingIntegrationTest.java
rename to spring-reactive/src/test/java/com/baeldung/reactive/errorhandling/ErrorHandlingIntegrationTest.java
index 38443a4eac..1167792542 100644
--- a/spring-5-reactive/src/test/java/com/baeldung/reactive/errorhandling/ErrorHandlingIntegrationTest.java
+++ b/spring-reactive/src/test/java/com/baeldung/reactive/errorhandling/ErrorHandlingIntegrationTest.java
@@ -1,9 +1,5 @@
package com.baeldung.reactive.errorhandling;
-import static org.junit.Assert.assertEquals;
-
-import java.io.IOException;
-
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +12,10 @@ import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.reactive.server.WebTestClient;
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@DirtiesContext
diff --git a/reactor-core/src/test/java/com/baeldung/reactor/introduction/ReactorIntegrationTest.java b/spring-reactive/src/test/java/com/baeldung/reactive/introduction/ReactorIntegrationTest.java
similarity index 90%
rename from reactor-core/src/test/java/com/baeldung/reactor/introduction/ReactorIntegrationTest.java
rename to spring-reactive/src/test/java/com/baeldung/reactive/introduction/ReactorIntegrationTest.java
index a1acffac91..307cc2cfeb 100644
--- a/reactor-core/src/test/java/com/baeldung/reactor/introduction/ReactorIntegrationTest.java
+++ b/spring-reactive/src/test/java/com/baeldung/reactive/introduction/ReactorIntegrationTest.java
@@ -1,8 +1,10 @@
-package com.baeldung.reactor.introduction;
+package com.baeldung.reactive.introduction;
import org.junit.Test;
import org.reactivestreams.Subscriber;
import org.reactivestreams.Subscription;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import reactor.core.publisher.ConnectableFlux;
import reactor.core.publisher.Flux;
import reactor.core.scheduler.Schedulers;
@@ -14,6 +16,8 @@ import static org.assertj.core.api.Assertions.assertThat;
public class ReactorIntegrationTest {
+ private static final Logger LOGGER = LoggerFactory.getLogger(ReactorIntegrationTest.class);
+
@Test
public void givenFlux_whenSubscribing_thenStream() {
@@ -22,7 +26,7 @@ public class ReactorIntegrationTest {
Flux.just(1, 2, 3, 4)
.log()
.map(i -> {
- System.out.println(i + ":" + Thread.currentThread());
+ LOGGER.debug("{}:{}", i, Thread.currentThread());
return i * 2;
})
.subscribe(elements::add);
@@ -97,7 +101,8 @@ public class ReactorIntegrationTest {
Thread.sleep(1000);
- assertThat(threadNames).containsExactly("parallel-1", "parallel-1", "parallel-1", "parallel-1");
+ assertThat(threadNames).isNotEmpty();
+ assertThat(threadNames).hasSize(4);
}
@Test
diff --git a/spring-5-reactive-security/src/test/java/com/baeldung/security/SecurityIntegrationTest.java b/spring-reactive/src/test/java/com/baeldung/reactive/security/SecurityIntegrationTest.java
similarity index 75%
rename from spring-5-reactive-security/src/test/java/com/baeldung/security/SecurityIntegrationTest.java
rename to spring-reactive/src/test/java/com/baeldung/reactive/security/SecurityIntegrationTest.java
index 423500e09c..06644fbf77 100644
--- a/spring-5-reactive-security/src/test/java/com/baeldung/security/SecurityIntegrationTest.java
+++ b/spring-reactive/src/test/java/com/baeldung/reactive/security/SecurityIntegrationTest.java
@@ -1,19 +1,16 @@
-package com.baeldung.security;
+package com.baeldung.reactive.security;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.reactive.server.WebTestClient;
-import com.baeldung.reactive.security.SpringSecurity5Application;
-
-@RunWith(SpringRunner.class)
+@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = SpringSecurity5Application.class)
public class SecurityIntegrationTest {
@@ -22,7 +19,7 @@ public class SecurityIntegrationTest {
private WebTestClient rest;
- @Before
+ @BeforeEach
public void setup() {
this.rest = WebTestClient.bindToApplicationContext(this.context).configureClient().build();
}
@@ -33,7 +30,6 @@ public class SecurityIntegrationTest {
}
@Test
- @Ignore
@WithMockUser
public void whenHasCredentials_thenSeesGreeting() {
this.rest.get().uri("/").exchange().expectStatus().isOk().expectBody(String.class).isEqualTo("Hello, user");
diff --git a/spring-5-reactive/src/test/java/com/baeldung/web/client/SpringContextTest.java b/spring-reactive/src/test/java/com/baeldung/reactive/webclient/SpringContextTest.java
similarity index 73%
rename from spring-5-reactive/src/test/java/com/baeldung/web/client/SpringContextTest.java
rename to spring-reactive/src/test/java/com/baeldung/reactive/webclient/SpringContextTest.java
index 8d2ca41451..4a1fc4390a 100644
--- a/spring-5-reactive/src/test/java/com/baeldung/web/client/SpringContextTest.java
+++ b/spring-reactive/src/test/java/com/baeldung/reactive/webclient/SpringContextTest.java
@@ -1,10 +1,8 @@
-package com.baeldung.web.client;
+package com.baeldung.reactive.webclient;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
-import com.baeldung.web.reactive.client.WebClientApplication;
-
@SpringBootTest(classes = WebClientApplication.class)
public class SpringContextTest {
diff --git a/spring-5-reactive/src/test/java/com/baeldung/web/client/WebClientIntegrationTest.java b/spring-reactive/src/test/java/com/baeldung/reactive/webclient/WebClientIntegrationTest.java
similarity index 98%
rename from spring-5-reactive/src/test/java/com/baeldung/web/client/WebClientIntegrationTest.java
rename to spring-reactive/src/test/java/com/baeldung/reactive/webclient/WebClientIntegrationTest.java
index 7e1fc86847..28b4c19a10 100644
--- a/spring-5-reactive/src/test/java/com/baeldung/web/client/WebClientIntegrationTest.java
+++ b/spring-reactive/src/test/java/com/baeldung/reactive/webclient/WebClientIntegrationTest.java
@@ -1,15 +1,9 @@
-package com.baeldung.web.client;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.net.URI;
-import java.nio.charset.StandardCharsets;
-import java.time.Duration;
-import java.time.ZonedDateTime;
-import java.util.Collections;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
+package com.baeldung.reactive.webclient;
+import io.netty.channel.ChannelOption;
+import io.netty.handler.timeout.ReadTimeoutException;
+import io.netty.handler.timeout.ReadTimeoutHandler;
+import io.netty.handler.timeout.WriteTimeoutHandler;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
@@ -34,18 +28,20 @@ import org.springframework.web.reactive.function.client.WebClient.RequestHeaders
import org.springframework.web.reactive.function.client.WebClient.RequestHeadersUriSpec;
import org.springframework.web.reactive.function.client.WebClient.ResponseSpec;
import org.springframework.web.reactive.function.client.WebClientRequestException;
-
-import com.baeldung.web.reactive.client.Foo;
-import com.baeldung.web.reactive.client.WebClientApplication;
-
-import io.netty.channel.ChannelOption;
-import io.netty.handler.timeout.ReadTimeoutException;
-import io.netty.handler.timeout.ReadTimeoutHandler;
-import io.netty.handler.timeout.WriteTimeoutHandler;
import reactor.core.publisher.Mono;
import reactor.netty.http.client.HttpClient;
import reactor.test.StepVerifier;
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+import java.time.Duration;
+import java.time.ZonedDateTime;
+import java.util.Collections;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
@SpringBootTest(classes = WebClientApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT)
public class WebClientIntegrationTest {
@@ -211,8 +207,7 @@ public class WebClientIntegrationTest {
ResponseSpec responseSpecPostString = createDefaultPostResourceRequestResponse().retrieve();
Mono responsePostString = responseSpecPostString.bodyToMono(String.class);
Mono responsePostString2 = createDefaultPostResourceRequestResponse().exchangeToMono(response -> {
- if (response.statusCode()
- .equals(HttpStatus.OK)) {
+ if (response.statusCode() == HttpStatus.OK) {
return response.bodyToMono(String.class);
} else if (response.statusCode()
.is4xxClientError()) {
@@ -223,8 +218,7 @@ public class WebClientIntegrationTest {
}
});
Mono responsePostNoBody = createDefaultPostResourceRequest().exchangeToMono(response -> {
- if (response.statusCode()
- .equals(HttpStatus.OK)) {
+ if (response.statusCode() == HttpStatus.OK) {
return response.bodyToMono(String.class);
} else if (response.statusCode()
.is4xxClientError()) {
diff --git a/spring-5-reactive-2/src/test/java/com/baeldung/webclient/WebControllerIntegrationTest.java b/spring-reactive/src/test/java/com/baeldung/reactive/webclient/WebControllerIntegrationTest.java
similarity index 97%
rename from spring-5-reactive-2/src/test/java/com/baeldung/webclient/WebControllerIntegrationTest.java
rename to spring-reactive/src/test/java/com/baeldung/reactive/webclient/WebControllerIntegrationTest.java
index 09c3a5fb84..3c0683a419 100644
--- a/spring-5-reactive-2/src/test/java/com/baeldung/webclient/WebControllerIntegrationTest.java
+++ b/spring-reactive/src/test/java/com/baeldung/reactive/webclient/WebControllerIntegrationTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.webclient;
+package com.baeldung.reactive.webclient;
import org.junit.Before;
import org.junit.Test;
diff --git a/spring-5-reactive/src/test/java/com/baeldung/web/client/WebTestClientIntegrationTest.java b/spring-reactive/src/test/java/com/baeldung/reactive/webclient/WebTestClientIntegrationTest.java
similarity index 94%
rename from spring-5-reactive/src/test/java/com/baeldung/web/client/WebTestClientIntegrationTest.java
rename to spring-reactive/src/test/java/com/baeldung/reactive/webclient/WebTestClientIntegrationTest.java
index 07a4c81c91..90f4a0eca2 100644
--- a/spring-5-reactive/src/test/java/com/baeldung/web/client/WebTestClientIntegrationTest.java
+++ b/spring-reactive/src/test/java/com/baeldung/reactive/webclient/WebTestClientIntegrationTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.web.client;
+package com.baeldung.reactive.webclient;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -12,10 +12,6 @@ import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.RouterFunctions;
import org.springframework.web.reactive.function.server.ServerResponse;
import org.springframework.web.server.WebHandler;
-
-import com.baeldung.web.reactive.client.WebClientApplication;
-import com.baeldung.web.reactive.client.WebClientController;
-
import reactor.core.publisher.Mono;
@SpringBootTest(classes = WebClientApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
diff --git a/spring-5-webflux/src/test/java/com/baeldung/spring/webclientrequests/WebClientRequestsUnitTest.java b/spring-reactive/src/test/java/com/baeldung/reactive/webclientrequests/WebClientRequestsUnitTest.java
similarity index 99%
rename from spring-5-webflux/src/test/java/com/baeldung/spring/webclientrequests/WebClientRequestsUnitTest.java
rename to spring-reactive/src/test/java/com/baeldung/reactive/webclientrequests/WebClientRequestsUnitTest.java
index 353cb24d0a..ff59f12391 100644
--- a/spring-5-webflux/src/test/java/com/baeldung/spring/webclientrequests/WebClientRequestsUnitTest.java
+++ b/spring-reactive/src/test/java/com/baeldung/reactive/webclientrequests/WebClientRequestsUnitTest.java
@@ -1,10 +1,5 @@
-package com.baeldung.spring.webclientrequests;
+package com.baeldung.reactive.webclientrequests;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.when;
-
-import java.time.Duration;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -22,6 +17,12 @@ import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.util.DefaultUriBuilderFactory;
import reactor.core.publisher.Mono;
+import java.time.Duration;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
+import static org.mockito.Mockito.when;
+
@RunWith(SpringRunner.class)
@WebFluxTest
public class WebClientRequestsUnitTest {
@@ -48,7 +49,6 @@ public class WebClientRequestsUnitTest {
.build();
}
-
@Test
public void whenCallSimpleURI_thenURIMatched() {
this.webClient.get()
diff --git a/spring-5-reactive-security/src/test/java/com/baeldung/reactive/webflux/EmployeeControllerIntegrationTest.java b/spring-reactive/src/test/java/com/baeldung/reactive/webflux/annotation/EmployeeControllerIntegrationTest.java
similarity index 88%
rename from spring-5-reactive-security/src/test/java/com/baeldung/reactive/webflux/EmployeeControllerIntegrationTest.java
rename to spring-reactive/src/test/java/com/baeldung/reactive/webflux/annotation/EmployeeControllerIntegrationTest.java
index 12a21ed4ef..24c4303e83 100644
--- a/spring-5-reactive-security/src/test/java/com/baeldung/reactive/webflux/EmployeeControllerIntegrationTest.java
+++ b/spring-reactive/src/test/java/com/baeldung/reactive/webflux/annotation/EmployeeControllerIntegrationTest.java
@@ -1,10 +1,8 @@
-package com.baeldung.reactive.webflux;
-
-import static org.mockito.BDDMockito.given;
-
-import java.util.ArrayList;
-import java.util.List;
+package com.baeldung.reactive.webflux.annotation;
+import com.baeldung.reactive.webflux.Employee;
+import com.baeldung.reactive.webflux.EmployeeRepository;
+import com.baeldung.reactive.webflux.annotation.EmployeeSpringApplication;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -14,16 +12,16 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.reactive.server.WebTestClient;
-
-import com.baeldung.webflux.EmployeeSpringApplication;
-import com.baeldung.webflux.Employee;
-import com.baeldung.webflux.EmployeeRepository;
-
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.mockito.BDDMockito.given;
+
@RunWith(SpringRunner.class)
-@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes=EmployeeSpringApplication.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes= EmployeeSpringApplication.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class EmployeeControllerIntegrationTest {
diff --git a/spring-5-reactive-security/src/test/java/com/baeldung/reactive/functional/EmployeeSpringFunctionalIntegrationTest.java b/spring-reactive/src/test/java/com/baeldung/reactive/webflux/functional/EmployeeSpringFunctionalIntegrationTest.java
similarity index 94%
rename from spring-5-reactive-security/src/test/java/com/baeldung/reactive/functional/EmployeeSpringFunctionalIntegrationTest.java
rename to spring-reactive/src/test/java/com/baeldung/reactive/webflux/functional/EmployeeSpringFunctionalIntegrationTest.java
index d8e2f0b23b..da866724cc 100644
--- a/spring-5-reactive-security/src/test/java/com/baeldung/reactive/functional/EmployeeSpringFunctionalIntegrationTest.java
+++ b/spring-reactive/src/test/java/com/baeldung/reactive/webflux/functional/EmployeeSpringFunctionalIntegrationTest.java
@@ -1,7 +1,7 @@
-package com.baeldung.reactive.functional;
+package com.baeldung.reactive.webflux.functional;
-import com.baeldung.webflux.Employee;
-import com.baeldung.webflux.EmployeeRepository;
+import com.baeldung.reactive.webflux.Employee;
+import com.baeldung.reactive.webflux.EmployeeRepository;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/spring-reactive/src/test/resources/logback-test.xml b/spring-reactive/src/test/resources/logback-test.xml
new file mode 100644
index 0000000000..69c10177a9
--- /dev/null
+++ b/spring-reactive/src/test/resources/logback-test.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-webflux-threads/README.md b/spring-webflux-threads/README.md
deleted file mode 100644
index 746514feda..0000000000
--- a/spring-webflux-threads/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-### Relevant Articles:
-
-- [Concurrency in Spring WebFlux](https://www.baeldung.com/spring-webflux-concurrency)
diff --git a/spring-webflux-threads/pom.xml b/spring-webflux-threads/pom.xml
deleted file mode 100644
index fedfaa6967..0000000000
--- a/spring-webflux-threads/pom.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
- 4.0.0
- com.baeldung.spring
- spring-webflux-threads
- 1.0.0-SNAPSHOT
- spring-webflux-threads
- jar
- Spring WebFlux Threads Sample
-
-
- com.baeldung
- parent-boot-2
- 0.0.1-SNAPSHOT
- ../parent-boot-2
-
-
-
-
- org.springframework.boot
- spring-boot-starter-webflux
-
-
-
-
-
-
-
-
- io.reactivex.rxjava2
- rxjava
- 2.2.19
-
-
- org.springframework.boot
- spring-boot-starter-data-mongodb-reactive
-
-
- io.projectreactor.kafka
- reactor-kafka
- 1.2.2.RELEASE
-
-
- com.fasterxml.jackson.core
- jackson-databind
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
- io.projectreactor
- reactor-test
- test
-
-
-
-
\ No newline at end of file
diff --git a/spring-webflux-threads/src/main/resources/logback.xml b/spring-webflux-threads/src/main/resources/logback.xml
deleted file mode 100644
index 7d900d8ea8..0000000000
--- a/spring-webflux-threads/src/main/resources/logback.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
- %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
-
-
-
-
-
-
-
\ No newline at end of file