diff --git a/2022-02/spring-15-mvc/pom.xml b/2022-02/spring-17-mvc/pom.xml
similarity index 100%
rename from 2022-02/spring-15-mvc/pom.xml
rename to 2022-02/spring-17-mvc/pom.xml
diff --git a/2022-02/spring-15-mvc/spring-mvc-demo/pom.xml b/2022-02/spring-17-mvc/spring-mvc-demo/pom.xml
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-demo/pom.xml
rename to 2022-02/spring-17-mvc/spring-mvc-demo/pom.xml
diff --git a/2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/Main.java
rename to 2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/Main.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/config/WebConfig.java b/2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/config/WebConfig.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/config/WebConfig.java
rename to 2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/config/WebConfig.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/domain/Person.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/domain/Person.java
rename to 2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/domain/Person.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/domain/SystemInfo.java b/2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/domain/SystemInfo.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/domain/SystemInfo.java
rename to 2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/domain/SystemInfo.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java
rename to 2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/PersonController.java b/2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/PersonController.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/PersonController.java
rename to 2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/PersonController.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/SystemInfoController.java b/2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/SystemInfoController.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/SystemInfoController.java
rename to 2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/SystemInfoController.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/dto/PersonDto.java b/2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
rename to 2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java b/2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java
rename to 2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/resolvers/SystemInfoMethodArgumentResolver.java b/2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/resolvers/SystemInfoMethodArgumentResolver.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/resolvers/SystemInfoMethodArgumentResolver.java
rename to 2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/rest/resolvers/SystemInfoMethodArgumentResolver.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/service/SystemInfoService.java b/2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/service/SystemInfoService.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/service/SystemInfoService.java
rename to 2022-02/spring-17-mvc/spring-mvc-demo/src/main/java/ru/otus/spring/service/SystemInfoService.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-demo/src/test/java/ru/otus/spring/rest/PersonControllerTest.java b/2022-02/spring-17-mvc/spring-mvc-demo/src/test/java/ru/otus/spring/rest/PersonControllerTest.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-demo/src/test/java/ru/otus/spring/rest/PersonControllerTest.java
rename to 2022-02/spring-17-mvc/spring-mvc-demo/src/test/java/ru/otus/spring/rest/PersonControllerTest.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-demo/src/test/java/ru/otus/spring/rest/SystemInfoControllerTest.java b/2022-02/spring-17-mvc/spring-mvc-demo/src/test/java/ru/otus/spring/rest/SystemInfoControllerTest.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-demo/src/test/java/ru/otus/spring/rest/SystemInfoControllerTest.java
rename to 2022-02/spring-17-mvc/spring-mvc-demo/src/test/java/ru/otus/spring/rest/SystemInfoControllerTest.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-exercise/pom.xml b/2022-02/spring-17-mvc/spring-mvc-exercise/pom.xml
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-exercise/pom.xml
rename to 2022-02/spring-17-mvc/spring-mvc-exercise/pom.xml
diff --git a/2022-02/spring-15-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-17-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/Main.java
rename to 2022-02/spring-17-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/Main.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-17-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/domain/Person.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/domain/Person.java
rename to 2022-02/spring-17-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/domain/Person.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2022-02/spring-17-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/repostory/PersonRepository.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/repostory/PersonRepository.java
rename to 2022-02/spring-17-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/repostory/PersonRepository.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/rest/PersonController.java b/2022-02/spring-17-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/rest/PersonController.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/rest/PersonController.java
rename to 2022-02/spring-17-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/rest/PersonController.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/rest/dto/PersonDto.java b/2022-02/spring-17-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
rename to 2022-02/spring-17-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/rest/exeptions/NotFoundException.java b/2022-02/spring-17-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/rest/exeptions/NotFoundException.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/rest/exeptions/NotFoundException.java
rename to 2022-02/spring-17-mvc/spring-mvc-exercise/src/main/java/ru/otus/spring/rest/exeptions/NotFoundException.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-exercise/src/test/java/ru/otus/spring/rest/PersonControllerTest.java b/2022-02/spring-17-mvc/spring-mvc-exercise/src/test/java/ru/otus/spring/rest/PersonControllerTest.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-exercise/src/test/java/ru/otus/spring/rest/PersonControllerTest.java
rename to 2022-02/spring-17-mvc/spring-mvc-exercise/src/test/java/ru/otus/spring/rest/PersonControllerTest.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-1/pom.xml b/2022-02/spring-17-mvc/spring-mvc-solution-1/pom.xml
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-1/pom.xml
rename to 2022-02/spring-17-mvc/spring-mvc-solution-1/pom.xml
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-17-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/Main.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/Main.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-17-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/domain/Person.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/domain/Person.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/domain/Person.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2022-02/spring-17-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/repostory/PersonRepository.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/repostory/PersonRepository.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/repostory/PersonRepository.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/rest/PersonController.java b/2022-02/spring-17-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/rest/PersonController.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/rest/PersonController.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/rest/PersonController.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/rest/dto/PersonDto.java b/2022-02/spring-17-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java b/2022-02/spring-17-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-1/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-1/src/test/java/ru/otus/spring/rest/PersonControllerTest.java b/2022-02/spring-17-mvc/spring-mvc-solution-1/src/test/java/ru/otus/spring/rest/PersonControllerTest.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-1/src/test/java/ru/otus/spring/rest/PersonControllerTest.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-1/src/test/java/ru/otus/spring/rest/PersonControllerTest.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-2/pom.xml b/2022-02/spring-17-mvc/spring-mvc-solution-2/pom.xml
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-2/pom.xml
rename to 2022-02/spring-17-mvc/spring-mvc-solution-2/pom.xml
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-17-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/Main.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/Main.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-17-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/domain/Person.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/domain/Person.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/domain/Person.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2022-02/spring-17-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/repostory/PersonRepository.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/repostory/PersonRepository.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/repostory/PersonRepository.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/rest/PersonController.java b/2022-02/spring-17-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/rest/PersonController.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/rest/PersonController.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/rest/PersonController.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/rest/dto/PersonDto.java b/2022-02/spring-17-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java b/2022-02/spring-17-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-2/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-2/src/test/java/ru/otus/spring/rest/PersonControllerTest.java b/2022-02/spring-17-mvc/spring-mvc-solution-2/src/test/java/ru/otus/spring/rest/PersonControllerTest.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-2/src/test/java/ru/otus/spring/rest/PersonControllerTest.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-2/src/test/java/ru/otus/spring/rest/PersonControllerTest.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-3/pom.xml b/2022-02/spring-17-mvc/spring-mvc-solution-3/pom.xml
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-3/pom.xml
rename to 2022-02/spring-17-mvc/spring-mvc-solution-3/pom.xml
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-3/requests.http b/2022-02/spring-17-mvc/spring-mvc-solution-3/requests.http
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-3/requests.http
rename to 2022-02/spring-17-mvc/spring-mvc-solution-3/requests.http
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-17-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/Main.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/Main.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-17-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/domain/Person.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/domain/Person.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/domain/Person.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2022-02/spring-17-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/repostory/PersonRepository.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/repostory/PersonRepository.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/repostory/PersonRepository.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/rest/PersonController.java b/2022-02/spring-17-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/rest/PersonController.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/rest/PersonController.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/rest/PersonController.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/rest/dto/PersonDto.java b/2022-02/spring-17-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java b/2022-02/spring-17-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-3/src/main/java/ru/otus/spring/rest/exceptions/NotFoundException.java
diff --git a/2022-02/spring-15-mvc/spring-mvc-solution-3/src/test/java/ru/otus/spring/rest/PersonControllerTest.java b/2022-02/spring-17-mvc/spring-mvc-solution-3/src/test/java/ru/otus/spring/rest/PersonControllerTest.java
similarity index 100%
rename from 2022-02/spring-15-mvc/spring-mvc-solution-3/src/test/java/ru/otus/spring/rest/PersonControllerTest.java
rename to 2022-02/spring-17-mvc/spring-mvc-solution-3/src/test/java/ru/otus/spring/rest/PersonControllerTest.java
diff --git a/2022-02/spring-16-view/.gitignore b/2022-02/spring-18-view/.gitignore
similarity index 100%
rename from 2022-02/spring-16-view/.gitignore
rename to 2022-02/spring-18-view/.gitignore
diff --git a/2022-02/spring-16-view/pom.xml b/2022-02/spring-18-view/pom.xml
similarity index 100%
rename from 2022-02/spring-16-view/pom.xml
rename to 2022-02/spring-18-view/pom.xml
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/.gitignore b/2022-02/spring-18-view/spring-mvc-view-demo/.gitignore
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/.gitignore
rename to 2022-02/spring-18-view/spring-mvc-view-demo/.gitignore
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/pom.xml b/2022-02/spring-18-view/spring-mvc-view-demo/pom.xml
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/pom.xml
rename to 2022-02/spring-18-view/spring-mvc-view-demo/pom.xml
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-18-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/Main.java
rename to 2022-02/spring-18-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/Main.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/config/LocalizationConfig.java b/2022-02/spring-18-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/config/LocalizationConfig.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/config/LocalizationConfig.java
rename to 2022-02/spring-18-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/config/LocalizationConfig.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/controller/NotFoundException.java b/2022-02/spring-18-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/controller/NotFoundException.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/controller/NotFoundException.java
rename to 2022-02/spring-18-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/controller/NotFoundException.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/controller/PersonController.java b/2022-02/spring-18-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/controller/PersonController.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/controller/PersonController.java
rename to 2022-02/spring-18-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/controller/PersonController.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-18-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/domain/Person.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/domain/Person.java
rename to 2022-02/spring-18-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/domain/Person.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/dto/PersonDto.java b/2022-02/spring-18-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/dto/PersonDto.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/dto/PersonDto.java
rename to 2022-02/spring-18-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/dto/PersonDto.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2022-02/spring-18-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java
rename to 2022-02/spring-18-view/spring-mvc-view-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/src/main/resources/application.yml b/2022-02/spring-18-view/spring-mvc-view-demo/src/main/resources/application.yml
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/src/main/resources/application.yml
rename to 2022-02/spring-18-view/spring-mvc-view-demo/src/main/resources/application.yml
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/src/main/resources/messages.properties b/2022-02/spring-18-view/spring-mvc-view-demo/src/main/resources/messages.properties
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/src/main/resources/messages.properties
rename to 2022-02/spring-18-view/spring-mvc-view-demo/src/main/resources/messages.properties
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/src/main/resources/messages_en.properties b/2022-02/spring-18-view/spring-mvc-view-demo/src/main/resources/messages_en.properties
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/src/main/resources/messages_en.properties
rename to 2022-02/spring-18-view/spring-mvc-view-demo/src/main/resources/messages_en.properties
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/src/main/resources/messages_ru.properties b/2022-02/spring-18-view/spring-mvc-view-demo/src/main/resources/messages_ru.properties
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/src/main/resources/messages_ru.properties
rename to 2022-02/spring-18-view/spring-mvc-view-demo/src/main/resources/messages_ru.properties
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/src/main/resources/static/listmark.png b/2022-02/spring-18-view/spring-mvc-view-demo/src/main/resources/static/listmark.png
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/src/main/resources/static/listmark.png
rename to 2022-02/spring-18-view/spring-mvc-view-demo/src/main/resources/static/listmark.png
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/src/main/resources/templates/edit.html b/2022-02/spring-18-view/spring-mvc-view-demo/src/main/resources/templates/edit.html
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/src/main/resources/templates/edit.html
rename to 2022-02/spring-18-view/spring-mvc-view-demo/src/main/resources/templates/edit.html
diff --git a/2022-02/spring-16-view/spring-mvc-view-demo/src/main/resources/templates/list.html b/2022-02/spring-18-view/spring-mvc-view-demo/src/main/resources/templates/list.html
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-demo/src/main/resources/templates/list.html
rename to 2022-02/spring-18-view/spring-mvc-view-demo/src/main/resources/templates/list.html
diff --git a/2022-02/spring-16-view/spring-mvc-view-exercise/.gitignore b/2022-02/spring-18-view/spring-mvc-view-exercise/.gitignore
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-exercise/.gitignore
rename to 2022-02/spring-18-view/spring-mvc-view-exercise/.gitignore
diff --git a/2022-02/spring-16-view/spring-mvc-view-exercise/pom.xml b/2022-02/spring-18-view/spring-mvc-view-exercise/pom.xml
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-exercise/pom.xml
rename to 2022-02/spring-18-view/spring-mvc-view-exercise/pom.xml
diff --git a/2022-02/spring-16-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-18-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/Main.java
rename to 2022-02/spring-18-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/Main.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/controller/NotFoundException.java b/2022-02/spring-18-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/controller/NotFoundException.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/controller/NotFoundException.java
rename to 2022-02/spring-18-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/controller/NotFoundException.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/controller/PersonController.java b/2022-02/spring-18-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/controller/PersonController.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/controller/PersonController.java
rename to 2022-02/spring-18-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/controller/PersonController.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-18-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/domain/Person.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/domain/Person.java
rename to 2022-02/spring-18-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/domain/Person.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2022-02/spring-18-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/repostory/PersonRepository.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/repostory/PersonRepository.java
rename to 2022-02/spring-18-view/spring-mvc-view-exercise/src/main/java/ru/otus/spring/repostory/PersonRepository.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-exercise/src/main/resources/templates/edit.html b/2022-02/spring-18-view/spring-mvc-view-exercise/src/main/resources/templates/edit.html
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-exercise/src/main/resources/templates/edit.html
rename to 2022-02/spring-18-view/spring-mvc-view-exercise/src/main/resources/templates/edit.html
diff --git a/2022-02/spring-16-view/spring-mvc-view-exercise/src/main/resources/templates/list.html b/2022-02/spring-18-view/spring-mvc-view-exercise/src/main/resources/templates/list.html
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-exercise/src/main/resources/templates/list.html
rename to 2022-02/spring-18-view/spring-mvc-view-exercise/src/main/resources/templates/list.html
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution1/.gitignore b/2022-02/spring-18-view/spring-mvc-view-solution1/.gitignore
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution1/.gitignore
rename to 2022-02/spring-18-view/spring-mvc-view-solution1/.gitignore
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution1/pom.xml b/2022-02/spring-18-view/spring-mvc-view-solution1/pom.xml
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution1/pom.xml
rename to 2022-02/spring-18-view/spring-mvc-view-solution1/pom.xml
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-18-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/Main.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/Main.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/controller/NotFoundException.java b/2022-02/spring-18-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/controller/NotFoundException.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/controller/NotFoundException.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/controller/NotFoundException.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/controller/PersonController.java b/2022-02/spring-18-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/controller/PersonController.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/controller/PersonController.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/controller/PersonController.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-18-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/domain/Person.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/domain/Person.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/domain/Person.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2022-02/spring-18-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/repostory/PersonRepository.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/repostory/PersonRepository.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution1/src/main/java/ru/otus/spring/repostory/PersonRepository.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution1/src/main/resources/templates/edit.html b/2022-02/spring-18-view/spring-mvc-view-solution1/src/main/resources/templates/edit.html
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution1/src/main/resources/templates/edit.html
rename to 2022-02/spring-18-view/spring-mvc-view-solution1/src/main/resources/templates/edit.html
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution1/src/main/resources/templates/list.html b/2022-02/spring-18-view/spring-mvc-view-solution1/src/main/resources/templates/list.html
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution1/src/main/resources/templates/list.html
rename to 2022-02/spring-18-view/spring-mvc-view-solution1/src/main/resources/templates/list.html
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution2/.gitignore b/2022-02/spring-18-view/spring-mvc-view-solution2/.gitignore
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution2/.gitignore
rename to 2022-02/spring-18-view/spring-mvc-view-solution2/.gitignore
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution2/pom.xml b/2022-02/spring-18-view/spring-mvc-view-solution2/pom.xml
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution2/pom.xml
rename to 2022-02/spring-18-view/spring-mvc-view-solution2/pom.xml
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-18-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/Main.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/Main.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/controller/NotFoundException.java b/2022-02/spring-18-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/controller/NotFoundException.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/controller/NotFoundException.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/controller/NotFoundException.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/controller/PersonController.java b/2022-02/spring-18-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/controller/PersonController.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/controller/PersonController.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/controller/PersonController.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-18-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/domain/Person.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/domain/Person.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/domain/Person.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2022-02/spring-18-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/repostory/PersonRepository.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/repostory/PersonRepository.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution2/src/main/java/ru/otus/spring/repostory/PersonRepository.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution2/src/main/resources/templates/edit.html b/2022-02/spring-18-view/spring-mvc-view-solution2/src/main/resources/templates/edit.html
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution2/src/main/resources/templates/edit.html
rename to 2022-02/spring-18-view/spring-mvc-view-solution2/src/main/resources/templates/edit.html
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution2/src/main/resources/templates/list.html b/2022-02/spring-18-view/spring-mvc-view-solution2/src/main/resources/templates/list.html
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution2/src/main/resources/templates/list.html
rename to 2022-02/spring-18-view/spring-mvc-view-solution2/src/main/resources/templates/list.html
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution3/.gitignore b/2022-02/spring-18-view/spring-mvc-view-solution3/.gitignore
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution3/.gitignore
rename to 2022-02/spring-18-view/spring-mvc-view-solution3/.gitignore
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution3/pom.xml b/2022-02/spring-18-view/spring-mvc-view-solution3/pom.xml
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution3/pom.xml
rename to 2022-02/spring-18-view/spring-mvc-view-solution3/pom.xml
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-18-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/Main.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/Main.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/controller/NotFoundException.java b/2022-02/spring-18-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/controller/NotFoundException.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/controller/NotFoundException.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/controller/NotFoundException.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/controller/PersonController.java b/2022-02/spring-18-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/controller/PersonController.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/controller/PersonController.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/controller/PersonController.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-18-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/domain/Person.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/domain/Person.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/domain/Person.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2022-02/spring-18-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/repostory/PersonRepository.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/repostory/PersonRepository.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution3/src/main/java/ru/otus/spring/repostory/PersonRepository.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution3/src/main/resources/static/listmark.png b/2022-02/spring-18-view/spring-mvc-view-solution3/src/main/resources/static/listmark.png
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution3/src/main/resources/static/listmark.png
rename to 2022-02/spring-18-view/spring-mvc-view-solution3/src/main/resources/static/listmark.png
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution3/src/main/resources/templates/edit.html b/2022-02/spring-18-view/spring-mvc-view-solution3/src/main/resources/templates/edit.html
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution3/src/main/resources/templates/edit.html
rename to 2022-02/spring-18-view/spring-mvc-view-solution3/src/main/resources/templates/edit.html
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution3/src/main/resources/templates/list.html b/2022-02/spring-18-view/spring-mvc-view-solution3/src/main/resources/templates/list.html
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution3/src/main/resources/templates/list.html
rename to 2022-02/spring-18-view/spring-mvc-view-solution3/src/main/resources/templates/list.html
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution4/.gitignore b/2022-02/spring-18-view/spring-mvc-view-solution4/.gitignore
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution4/.gitignore
rename to 2022-02/spring-18-view/spring-mvc-view-solution4/.gitignore
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution4/pom.xml b/2022-02/spring-18-view/spring-mvc-view-solution4/pom.xml
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution4/pom.xml
rename to 2022-02/spring-18-view/spring-mvc-view-solution4/pom.xml
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-18-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/Main.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/Main.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/controller/NotFoundException.java b/2022-02/spring-18-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/controller/NotFoundException.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/controller/NotFoundException.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/controller/NotFoundException.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/controller/PersonController.java b/2022-02/spring-18-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/controller/PersonController.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/controller/PersonController.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/controller/PersonController.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-18-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/domain/Person.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/domain/Person.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/domain/Person.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2022-02/spring-18-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/repostory/PersonRepository.java
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/repostory/PersonRepository.java
rename to 2022-02/spring-18-view/spring-mvc-view-solution4/src/main/java/ru/otus/spring/repostory/PersonRepository.java
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution4/src/main/resources/templates/edit.html b/2022-02/spring-18-view/spring-mvc-view-solution4/src/main/resources/templates/edit.html
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution4/src/main/resources/templates/edit.html
rename to 2022-02/spring-18-view/spring-mvc-view-solution4/src/main/resources/templates/edit.html
diff --git a/2022-02/spring-16-view/spring-mvc-view-solution4/src/main/resources/templates/list.html b/2022-02/spring-18-view/spring-mvc-view-solution4/src/main/resources/templates/list.html
similarity index 100%
rename from 2022-02/spring-16-view/spring-mvc-view-solution4/src/main/resources/templates/list.html
rename to 2022-02/spring-18-view/spring-mvc-view-solution4/src/main/resources/templates/list.html
diff --git a/2022-02/spring-17-ajax/ajax-demo.html b/2022-02/spring-19-ajax/ajax-demo.html
similarity index 100%
rename from 2022-02/spring-17-ajax/ajax-demo.html
rename to 2022-02/spring-19-ajax/ajax-demo.html
diff --git a/2022-02/spring-17-ajax/pom.xml b/2022-02/spring-19-ajax/pom.xml
similarity index 100%
rename from 2022-02/spring-17-ajax/pom.xml
rename to 2022-02/spring-19-ajax/pom.xml
diff --git a/2022-02/spring-17-ajax/spring-ajax-demo/pom.xml b/2022-02/spring-19-ajax/spring-ajax-demo/pom.xml
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-ajax-demo/pom.xml
rename to 2022-02/spring-19-ajax/spring-ajax-demo/pom.xml
diff --git a/2022-02/spring-17-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-19-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/Main.java
rename to 2022-02/spring-19-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/Main.java
diff --git a/2022-02/spring-17-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-19-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/domain/Person.java
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/domain/Person.java
rename to 2022-02/spring-19-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/domain/Person.java
diff --git a/2022-02/spring-17-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/page/PersonPagesController.java b/2022-02/spring-19-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/page/PersonPagesController.java
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/page/PersonPagesController.java
rename to 2022-02/spring-19-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/page/PersonPagesController.java
diff --git a/2022-02/spring-17-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2022-02/spring-19-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java
rename to 2022-02/spring-19-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java
diff --git a/2022-02/spring-17-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/rest/PersonController.java b/2022-02/spring-19-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/rest/PersonController.java
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/rest/PersonController.java
rename to 2022-02/spring-19-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/rest/PersonController.java
diff --git a/2022-02/spring-17-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/rest/dto/PersonDto.java b/2022-02/spring-19-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
rename to 2022-02/spring-19-ajax/spring-ajax-demo/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
diff --git a/2022-02/spring-17-ajax/spring-ajax-demo/src/main/resources/application.yml b/2022-02/spring-19-ajax/spring-ajax-demo/src/main/resources/application.yml
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-ajax-demo/src/main/resources/application.yml
rename to 2022-02/spring-19-ajax/spring-ajax-demo/src/main/resources/application.yml
diff --git a/2022-02/spring-17-ajax/spring-ajax-demo/src/main/resources/data.sql b/2022-02/spring-19-ajax/spring-ajax-demo/src/main/resources/data.sql
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-ajax-demo/src/main/resources/data.sql
rename to 2022-02/spring-19-ajax/spring-ajax-demo/src/main/resources/data.sql
diff --git a/2022-02/spring-17-ajax/spring-ajax-demo/src/main/resources/schema.sql b/2022-02/spring-19-ajax/spring-ajax-demo/src/main/resources/schema.sql
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-ajax-demo/src/main/resources/schema.sql
rename to 2022-02/spring-19-ajax/spring-ajax-demo/src/main/resources/schema.sql
diff --git a/2022-02/spring-17-ajax/spring-ajax-demo/src/main/resources/templates/list.html b/2022-02/spring-19-ajax/spring-ajax-demo/src/main/resources/templates/list.html
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-ajax-demo/src/main/resources/templates/list.html
rename to 2022-02/spring-19-ajax/spring-ajax-demo/src/main/resources/templates/list.html
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/.gitignore b/2022-02/spring-19-ajax/spring-boot-and-react-demo/.gitignore
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/.gitignore
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/.gitignore
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/package.json b/2022-02/spring-19-ajax/spring-boot-and-react-demo/package.json
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/package.json
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/package.json
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/pom.xml b/2022-02/spring-19-ajax/spring-boot-and-react-demo/pom.xml
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/pom.xml
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/pom.xml
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/Main.java
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/Main.java
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/domain/Person.java
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/domain/Person.java
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/domain/Person.java
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/repostory/PersonRepository.java
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/rest/PersonController.java b/2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/rest/PersonController.java
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/rest/PersonController.java
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/rest/PersonController.java
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/rest/dto/PersonDto.java b/2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/java/ru/otus/spring/rest/dto/PersonDto.java
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/resources/application.yml b/2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/resources/application.yml
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/resources/application.yml
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/resources/application.yml
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/resources/data.sql b/2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/resources/data.sql
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/resources/data.sql
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/resources/data.sql
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/resources/schema.sql b/2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/resources/schema.sql
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/src/main/resources/schema.sql
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/src/main/resources/schema.sql
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/src/ui/components/App.js b/2022-02/spring-19-ajax/spring-boot-and-react-demo/src/ui/components/App.js
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/src/ui/components/App.js
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/src/ui/components/App.js
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/src/ui/index.html b/2022-02/spring-19-ajax/spring-boot-and-react-demo/src/ui/index.html
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/src/ui/index.html
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/src/ui/index.html
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/src/ui/index.js b/2022-02/spring-19-ajax/spring-boot-and-react-demo/src/ui/index.js
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/src/ui/index.js
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/src/ui/index.js
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/webpack.config.js b/2022-02/spring-19-ajax/spring-boot-and-react-demo/webpack.config.js
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/webpack.config.js
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/webpack.config.js
diff --git a/2022-02/spring-17-ajax/spring-boot-and-react-demo/webpack.dev.config.js b/2022-02/spring-19-ajax/spring-boot-and-react-demo/webpack.dev.config.js
similarity index 100%
rename from 2022-02/spring-17-ajax/spring-boot-and-react-demo/webpack.dev.config.js
rename to 2022-02/spring-19-ajax/spring-boot-and-react-demo/webpack.dev.config.js
diff --git a/2022-02/spring-18/.gitignore b/2022-02/spring-20/.gitignore
similarity index 100%
rename from 2022-02/spring-18/.gitignore
rename to 2022-02/spring-20/.gitignore
diff --git a/2022-02/spring-18/pom.xml b/2022-02/spring-20/pom.xml
similarity index 100%
rename from 2022-02/spring-18/pom.xml
rename to 2022-02/spring-20/pom.xml
diff --git a/2022-02/spring-18/src/main/java/ru/otus/CreateExamples.java b/2022-02/spring-20/src/main/java/ru/otus/CreateExamples.java
similarity index 100%
rename from 2022-02/spring-18/src/main/java/ru/otus/CreateExamples.java
rename to 2022-02/spring-20/src/main/java/ru/otus/CreateExamples.java
diff --git a/2022-02/spring-18/src/main/java/ru/otus/LiveLikeExample.java b/2022-02/spring-20/src/main/java/ru/otus/LiveLikeExample.java
similarity index 100%
rename from 2022-02/spring-18/src/main/java/ru/otus/LiveLikeExample.java
rename to 2022-02/spring-20/src/main/java/ru/otus/LiveLikeExample.java
diff --git a/2022-02/spring-18/src/main/java/ru/otus/OperatorsExample.java b/2022-02/spring-20/src/main/java/ru/otus/OperatorsExample.java
similarity index 100%
rename from 2022-02/spring-18/src/main/java/ru/otus/OperatorsExample.java
rename to 2022-02/spring-20/src/main/java/ru/otus/OperatorsExample.java
diff --git a/2022-02/spring-18/src/main/java/ru/otus/Person.java b/2022-02/spring-20/src/main/java/ru/otus/Person.java
similarity index 100%
rename from 2022-02/spring-18/src/main/java/ru/otus/Person.java
rename to 2022-02/spring-20/src/main/java/ru/otus/Person.java
diff --git a/2022-02/spring-18/src/main/java/ru/otus/comparison/AsyncComparison.java b/2022-02/spring-20/src/main/java/ru/otus/comparison/AsyncComparison.java
similarity index 100%
rename from 2022-02/spring-18/src/main/java/ru/otus/comparison/AsyncComparison.java
rename to 2022-02/spring-20/src/main/java/ru/otus/comparison/AsyncComparison.java
diff --git a/2022-02/spring-18/src/main/java/ru/otus/comparison/SyncComparison.java b/2022-02/spring-20/src/main/java/ru/otus/comparison/SyncComparison.java
similarity index 100%
rename from 2022-02/spring-18/src/main/java/ru/otus/comparison/SyncComparison.java
rename to 2022-02/spring-20/src/main/java/ru/otus/comparison/SyncComparison.java
diff --git a/2022-02/spring-21/.gitignore b/2022-02/spring-21/.gitignore
new file mode 100644
index 00000000..4ea52072
--- /dev/null
+++ b/2022-02/spring-21/.gitignore
@@ -0,0 +1,24 @@
+target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/build/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
diff --git a/2022-02/spring-21/pom.xml b/2022-02/spring-21/pom.xml
new file mode 100644
index 00000000..ad4f8eda
--- /dev/null
+++ b/2022-02/spring-21/pom.xml
@@ -0,0 +1,18 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-21
+ 1.0
+
+ pom
+
+
+ spring-21-web-flux
+ spring-21-reactor
+ spring-21-reactive-spring-data
+
+
diff --git a/2022-02/spring-21/spring-21-reactive-spring-data/pom.xml b/2022-02/spring-21/spring-21-reactive-spring-data/pom.xml
new file mode 100644
index 00000000..0b9b89b1
--- /dev/null
+++ b/2022-02/spring-21/spring-21-reactive-spring-data/pom.xml
@@ -0,0 +1,50 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-21-reactive-spring-data
+ 1.0
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.5.6
+
+
+
+
+ 11
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-mongodb-reactive
+
+
+ org.mongodb
+ mongodb-driver-reactivestreams
+
+
+ de.flapdoodle.embed
+ de.flapdoodle.embed.mongo
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
diff --git a/2022-02/spring-21/spring-21-reactive-spring-data/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-21/spring-21-reactive-spring-data/src/main/java/ru/otus/spring/Main.java
new file mode 100644
index 00000000..e68a7f08
--- /dev/null
+++ b/2022-02/spring-21/spring-21-reactive-spring-data/src/main/java/ru/otus/spring/Main.java
@@ -0,0 +1,42 @@
+package ru.otus.spring;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.ApplicationContext;
+import reactor.core.publisher.Flux;
+import ru.otus.spring.domain.Person;
+import ru.otus.spring.repostory.AccountRepository;
+import ru.otus.spring.repostory.PersonRepository;
+
+import java.util.List;
+
+@SpringBootApplication
+public class Main {
+
+ public static void main(String[] args) throws InterruptedException {
+ ApplicationContext context = SpringApplication.run(Main.class);
+
+ PersonRepository repository = context.getBean(PersonRepository.class);
+ AccountRepository accountRepository = context.getBean(AccountRepository.class);
+
+ var persons = List.of(
+ new Person("Pushkin"),
+ new Person("Lermontov"));
+
+ // subscribe блокирует текущий поток и дожидается Flux
+ repository.saveAll(persons)
+ .subscribe();
+
+ // а вот это уже неблокирующий subscribe
+ repository.findAll()
+ .map(Person::getName)
+ .subscribe(System.out::println);
+
+ // Пример объединения двух Flux
+ Flux.merge(repository.findAll(), repository.findAll())
+ .map(Person::getName)
+ .subscribe(System.out::println);
+
+ Thread.sleep(20000);
+ }
+}
diff --git a/2022-02/spring-21/spring-21-reactive-spring-data/src/main/java/ru/otus/spring/domain/Account.java b/2022-02/spring-21/spring-21-reactive-spring-data/src/main/java/ru/otus/spring/domain/Account.java
new file mode 100644
index 00000000..0f34a772
--- /dev/null
+++ b/2022-02/spring-21/spring-21-reactive-spring-data/src/main/java/ru/otus/spring/domain/Account.java
@@ -0,0 +1,37 @@
+package ru.otus.spring.domain;
+
+public class Account {
+ private String id;
+ private String personId;
+ private Long amount;
+
+ public Account(String id, String personId, Long amount) {
+ this.id = id;
+ this.personId = personId;
+ this.amount = amount;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getPersonId() {
+ return personId;
+ }
+
+ public void setPersonId(String personId) {
+ this.personId = personId;
+ }
+
+ public Long getAmount() {
+ return amount;
+ }
+
+ public void setAmount(Long amount) {
+ this.amount = amount;
+ }
+}
diff --git a/2022-02/spring-21/spring-21-reactive-spring-data/src/main/java/ru/otus/spring/domain/Person.java b/2022-02/spring-21/spring-21-reactive-spring-data/src/main/java/ru/otus/spring/domain/Person.java
new file mode 100644
index 00000000..2bdc3894
--- /dev/null
+++ b/2022-02/spring-21/spring-21-reactive-spring-data/src/main/java/ru/otus/spring/domain/Person.java
@@ -0,0 +1,27 @@
+package ru.otus.spring.domain;
+
+public class Person {
+
+ private String id;
+ private String name;
+
+ public Person(String name) {
+ this.name = name;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/2022-02/spring-21/spring-21-reactive-spring-data/src/main/java/ru/otus/spring/repostory/AccountRepository.java b/2022-02/spring-21/spring-21-reactive-spring-data/src/main/java/ru/otus/spring/repostory/AccountRepository.java
new file mode 100644
index 00000000..a06fcdb3
--- /dev/null
+++ b/2022-02/spring-21/spring-21-reactive-spring-data/src/main/java/ru/otus/spring/repostory/AccountRepository.java
@@ -0,0 +1,7 @@
+package ru.otus.spring.repostory;
+
+import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
+import ru.otus.spring.domain.Account;
+
+public interface AccountRepository extends ReactiveMongoRepository {
+}
diff --git a/2022-02/spring-21/spring-21-reactive-spring-data/src/main/java/ru/otus/spring/repostory/PersonRepository.java b/2022-02/spring-21/spring-21-reactive-spring-data/src/main/java/ru/otus/spring/repostory/PersonRepository.java
new file mode 100644
index 00000000..26b562e2
--- /dev/null
+++ b/2022-02/spring-21/spring-21-reactive-spring-data/src/main/java/ru/otus/spring/repostory/PersonRepository.java
@@ -0,0 +1,15 @@
+package ru.otus.spring.repostory;
+
+import org.springframework.data.mongodb.repository.Query;
+import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import ru.otus.spring.domain.Person;
+
+public interface PersonRepository extends ReactiveMongoRepository {
+
+ Flux findByName(String name);
+
+ @Query("{ 'name': ?0 }")
+ Mono findFirstByName(String name);
+}
diff --git a/2022-02/spring-21/spring-21-reactive-spring-data/src/main/resources/application.yml b/2022-02/spring-21/spring-21-reactive-spring-data/src/main/resources/application.yml
new file mode 100644
index 00000000..e69de29b
diff --git a/2022-02/spring-21/spring-21-reactor/pom.xml b/2022-02/spring-21/spring-21-reactor/pom.xml
new file mode 100644
index 00000000..b583fdc7
--- /dev/null
+++ b/2022-02/spring-21/spring-21-reactor/pom.xml
@@ -0,0 +1,41 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-21-reactor
+ 1.0
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.6.3
+
+
+
+
+ 11
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ io.projectreactor
+ reactor-core
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
diff --git a/2022-02/spring-21/spring-21-reactor/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-21/spring-21-reactor/src/main/java/ru/otus/spring/Main.java
new file mode 100644
index 00000000..ff27392b
--- /dev/null
+++ b/2022-02/spring-21/spring-21-reactor/src/main/java/ru/otus/spring/Main.java
@@ -0,0 +1,20 @@
+package ru.otus.spring;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.ConfigurableApplicationContext;
+import ru.otus.spring.reactor.ReactiveProcessingService;
+
+@SpringBootApplication
+public class Main {
+
+ public static void main(String[] args) {
+ ConfigurableApplicationContext context = SpringApplication.run(Main.class);
+
+ ReactiveProcessingService service = context.getBean(ReactiveProcessingService.class);
+
+ service.printHello("Ivan");
+ }
+}
+
+
diff --git a/2022-02/spring-21/spring-21-reactor/src/main/java/ru/otus/spring/reactor/Message.java b/2022-02/spring-21/spring-21-reactor/src/main/java/ru/otus/spring/reactor/Message.java
new file mode 100644
index 00000000..ac58a62c
--- /dev/null
+++ b/2022-02/spring-21/spring-21-reactor/src/main/java/ru/otus/spring/reactor/Message.java
@@ -0,0 +1,14 @@
+package ru.otus.spring.reactor;
+
+public class Message {
+
+ private final String value;
+
+ public Message(String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+}
diff --git a/2022-02/spring-21/spring-21-reactor/src/main/java/ru/otus/spring/reactor/ReactiveProcessingService.java b/2022-02/spring-21/spring-21-reactor/src/main/java/ru/otus/spring/reactor/ReactiveProcessingService.java
new file mode 100644
index 00000000..99836fe0
--- /dev/null
+++ b/2022-02/spring-21/spring-21-reactor/src/main/java/ru/otus/spring/reactor/ReactiveProcessingService.java
@@ -0,0 +1,58 @@
+package ru.otus.spring.reactor;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import reactor.core.Disposable;
+import reactor.core.publisher.Sinks;
+import ru.otus.spring.service.NonFluxService;
+
+import javax.annotation.PreDestroy;
+
+@Service
+public class ReactiveProcessingService {
+
+ private final Logger logger = LoggerFactory.getLogger(ReactiveProcessingService.class);
+
+ private final Sinks.Many sink;
+ private final Disposable flow;
+
+ public ReactiveProcessingService(NonFluxService nonFluxService) {
+ // Создаём sink (ранее - процессор)
+ // Это reactor-овская реализация reactive-stream интерфейса
+ // Обрабатывает данные как простой последовательный вызов методов :)
+ sink = Sinks.many().multicast().directBestEffort();
+ // Здесь мы настраиваем flow
+ flow = sink.asFlux()
+ .map(nonFluxService::nonFluxSayHello)
+ .subscribe(this::printMessage);
+ // в идеале в коде выше должен быть doOnNext
+ // в map не предполагаются задержки
+ }
+
+ /**
+ * Этот метод будет инициировать асинхронную обрабтку сообщения
+ *
+ * @param name это имя будет приходить из не-reactor окружения
+ */
+ public void printHello(String name) {
+ sink.tryEmitNext(new Message(name));
+ }
+
+ /**
+ * А это терминальный шаг для сообщения
+ *
+ * @param message а это финальный шаг для сообщения, отсюда можно вернуть рзультат в не-реактив окружение
+ */
+ private void printMessage(Message message) {
+ logger.info("Message received: {}", message.getValue());
+ }
+
+ /**
+ * Просто пример, как остановить процесс
+ */
+ @PreDestroy
+ public void dispose() {
+ this.flow.dispose();
+ }
+}
diff --git a/2022-02/spring-21/spring-21-reactor/src/main/java/ru/otus/spring/service/NonFluxService.java b/2022-02/spring-21/spring-21-reactor/src/main/java/ru/otus/spring/service/NonFluxService.java
new file mode 100644
index 00000000..848971ed
--- /dev/null
+++ b/2022-02/spring-21/spring-21-reactor/src/main/java/ru/otus/spring/service/NonFluxService.java
@@ -0,0 +1,25 @@
+package ru.otus.spring.service;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import ru.otus.spring.reactor.Message;
+
+@Service
+public class NonFluxService {
+
+ private final Logger logger = LoggerFactory.getLogger(NonFluxService.class);
+
+ public Message nonFluxSayHello(Message message) {
+ logger.info("Message received in non-flux service: {}", message.getValue());
+
+ String name = message.getValue();
+ String withHello = "Hello, " + name + "!";
+ try {
+ Thread.sleep(1000);
+ return new Message(withHello);
+ } catch (InterruptedException ex) {
+ return new Message(withHello);
+ }
+ }
+}
diff --git a/2022-02/spring-21/spring-21-web-flux/pom.xml b/2022-02/spring-21/spring-21-web-flux/pom.xml
new file mode 100644
index 00000000..f359099b
--- /dev/null
+++ b/2022-02/spring-21/spring-21-web-flux/pom.xml
@@ -0,0 +1,45 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-21-web-flux
+ 1.0
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.6.3
+
+
+
+
+ 11
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+
+
+
+
+ io.reactivex.rxjava2
+ rxjava
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
diff --git a/2022-02/spring-21/spring-21-web-flux/src/main/java/ru/otus/spring/Main.java b/2022-02/spring-21/spring-21-web-flux/src/main/java/ru/otus/spring/Main.java
new file mode 100644
index 00000000..cad1ae76
--- /dev/null
+++ b/2022-02/spring-21/spring-21-web-flux/src/main/java/ru/otus/spring/Main.java
@@ -0,0 +1,14 @@
+package ru.otus.spring;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Main {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Main.class);
+ }
+}
+
+
diff --git a/2022-02/spring-21/spring-21-web-flux/src/main/java/ru/otus/spring/ReactorController.java b/2022-02/spring-21/spring-21-web-flux/src/main/java/ru/otus/spring/ReactorController.java
new file mode 100644
index 00000000..537ead63
--- /dev/null
+++ b/2022-02/spring-21/spring-21-web-flux/src/main/java/ru/otus/spring/ReactorController.java
@@ -0,0 +1,33 @@
+package ru.otus.spring;
+
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.time.Duration;
+
+@RestController
+public class ReactorController {
+
+ @GetMapping("/flux/one")
+ public Mono one() {
+ return Mono.just("one");
+ }
+
+ @GetMapping("/flux/ten")
+ public Flux list() {
+ return Flux.range(1, 10);
+ }
+
+ @GetMapping(path = "/flux/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
+ public Flux stream() {
+ return Flux.generate(() -> 0, (state, emitter) -> {
+ emitter.next(state);
+ return state + 1;
+ })
+ .delayElements(Duration.ofSeconds(1L))
+ .map(Object::toString);
+ }
+}
diff --git a/2022-02/spring-21/spring-21-web-flux/src/main/java/ru/otus/spring/RxJava2Controller.java b/2022-02/spring-21/spring-21-web-flux/src/main/java/ru/otus/spring/RxJava2Controller.java
new file mode 100644
index 00000000..edf0035f
--- /dev/null
+++ b/2022-02/spring-21/spring-21-web-flux/src/main/java/ru/otus/spring/RxJava2Controller.java
@@ -0,0 +1,20 @@
+package ru.otus.spring;
+
+import io.reactivex.Flowable;
+import io.reactivex.Single;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class RxJava2Controller {
+
+ @GetMapping("/rx/one")
+ public Single single() {
+ return Single.just("one");
+ }
+
+ @GetMapping("/rx/ten")
+ public Flowable list() {
+ return Flowable.range(1, 10);
+ }
+}