Открытый вебинар «Создание систем на основе микросервисной архитектуры Spring Boot» 20.11.2018 в 20:00 | OTUS >
+7 499 938-92-02
Проходил 20 ноября 2018 года в 20:00

Открытый вебинар
Создание систем на основе микросервисной архитектуры Spring Boot

Открытый вебинар онлайн

Юрий Дворжецкий познакомит вас с Spring Boot и расскажет о причинах его крутости. Будем создавать Web-слой с помощью Spring MVC, подключаться к БД с помощью Spring Data, тестировать все слои приложения с помощью Spring Boot и конфигурировать properties необычными способами. Запишитесь, чтобы вовремя получить ссылку на онлайн-трансляцию!
Преподаватель
Юрий Дворжецкий

Запись

О курсе

Разработчик на Spring Framework
144 000 ₽
5 месяцев
Начало 30 мая
  • Умение «выживать» в проектах, где есть Spring;
  • Знание современных возможностей Spring;
  • Понимание, как создавать Web-приложения на микросервисной архитектуре и решать высокоуровневые задачи по разработке;
  • Умение быстро проходить путь от идеи до production-grade;
  • Владение фреймворками Spring и технологиями вспомогательных проектов (Spring MVC, Spring Security, Spring Boot, Spring Reactive Stack, Spring 5).
Уникальная авторская программа

<div …
Программа курса
Модуль 1
Введение
Модуль 2
Работа с базами данных
Модуль 3
Разработка Web-приложений
Модуль 4
Spring Security
Модуль 5
"Около" и "Дзен"
Модуль 6
Проектная работа
Введение
В данном модуле будут рассматриваться понятия и функциональности, на которых базируются все проекты Spring: Inversion of Control (Spring Context), аспектное программирование (Spring AOP), Spring Expression Language (SpEL).

Слушатели смогут правильно и эффективно конфигурировать Spring-приложения различными средствами и способами, а также будет рассмотрена "чёрная магия" Spring Boot - автоконфигурации.
Знакомство с курсом
познакомиться со структурой курса;
обсудить часто встречающиеся вопросы
Введение в Spring Framework // ДЗ
ориентироваться в проектах Spring для дальнейшего изучения;
применять принцип IoC при написании классов и тестов;
создавать контекст Spring;
определять Spring Beans в контексте;
организовывать правильный DI.
Домашние задания: 1
ДЗ
Приложение для проведения тестирования студентов - только вывод вопросов и вариантов ответа. -------------------------Описание домашнего задания-------------------------
### Общая задача для двух первых ДЗ:


Разработать однопользовательское, консольное приложение для проведения тестирования студентов на основе фиксированного списка вопросов. Приложение должно запросить фамилию и имя студента, задать вопросы с вариантами ответа и вывести результат тестирования.





Разработкаприложения делится на два этапа, которые выполняются, в первом и, соответственно, во втором ДЗ.




### Текущее задание:

Приложение должно загрузить и вывести на экран вопросы с вариантами ответа. Задание выполняется на базе заготовки, содержащей каркас приложения (с прицелом на его развитие). Необходимо дописать классы и служебные файлы заготовки, ориентируясь на оставленные в ней подсказки так, чтобы выполнялись условия задания. Также решение должно удовлетворять нижеуказанным требованиям.




### Требования к использованию заготовки:
- То, что уже было в заготовке должно остаться неизменным (количество, имена и текущее содержимое классов и файлов, сигнатуры методов и т.д.)
- Можно добавлять код/текст в существующие методы классов и файлы, писать свои приватные методы, а также создавать новые классы
- Вышеуказанные требования не относятся к комментариям, их после реализации нужно удалить




### Требования к реализации:
- Весь ввод-вывод осуществляется на английском языке, в т.ч. вопросы и варианты ответов
- Список вопросов с вариантами ответа хранится в ресурсах приложения, в формате csv
- Файл с вопросами читается именно как ресурс, а не как файл (см. подсказки в коде заготовки)
- Все зависимости должны быть настроены в IoC контейнере
- Контекст описывается XML-файлом
- Контекст содержит только компоненты приложения и не содержит стандартных классов и доменных объектов (см. соответствующие слайды с занятия)
- Имя ресурса с вопросами (csv-файла) необходимо захардкодить строчкой в XML-файле с контекстом
- В приложении должна присутствовать объектная модель (отдаём предпочтение объектам и классам, а не строчкам и массивам/спискам строчек)
- Все классы в приложении должны решать строго определённую задачу (см. п. 18-19 "Правила оформления кода.pdf", прикреплённые к материалам занятия)
- Необходимо написать юнит-тест сервиса тестирования
- Проверка checkstyle должна проходить успешно
- Без фанатизма)





Заготовка для выполнения работы: [https://github.com/OtusTeam/Spring/tree/master/templates/hw01-xml-config](https://github.com/OtusTeam/Spring/tree/master/templates/hw01-xml-config)


Задание сдаётся в виде ссылки на pull-request в чат с преподавателем в личном кабинете ОТУС, а не в Telegram


В pull-request должно присутствовать только то что касается текущей работы. Временные файлы и файлы IDE не должны попадать в PR.


Инструкция по работе с pull-request-ами находится в документе "Настройка окружения.pdf" в материалах занятия.


Вопросы можно задавать в чате ДЗ, но для оперативности рекомендуем делать это в группе Telegram.


Код, написанный в данном ДЗ будет использоваться в дальнейших домашних заданиях первого блока курса
ЛикБез - Основы архитектуры ПО
Разбираться в базовых архитектурных принципах, а так же когда и как их можно применять
9 июня, 20:00 — 21:30
Лектор: Александр Оруджев
Конфигурирование Spring-приложений // ДЗ
конфигурировать Spring-приложения в современном Java-based стиле (как сейчас и все пишут);
ориентироваться в многослойной архитектуре;
пользоваться Spring Expression Language (SpEL);
задавать параметры приложения c помощью .properties файлов.
14 июня, 11:00 — 12:30
Лектор: Александр Оруджев
Домашние задания: 1
ДЗ
Приложение по проведению тестирования студентов (с самим тестированием). -------------------------Описание домашнего задания-------------------------
### Общая задача:


Разработать однопользовательское, консольное приложение для проведения тестирования студентов на базе фиксированного списка вопросов. Приложение должно запросить фамилию и имя студента, задать вопросы с вариантами ответа и вывести результат тестирования.





Разработка делится на два этапа = два ДЗ, это второй этап.




### Текущее задание:

Приложение должно запросить фамилию и имя студента, задать вопросы с вариантами ответа и вывести результат тестирования. Задание выполняется на базе заготовки, содержащей каркас приложения. Необходимо дописать классы и служебные файлы заготовки, ориентируясь на оставленные в ней подсказки так, чтобы выполнялись условия задания. Также, решение должно удовлетворять нижеуказанным требованиям.




### Требования к использованию заготовки:
- То что уже было в заготовке должно остаться неизменным (количество, имена и текущее содержимое классов и файлов, сигнатуры методов и т.д.)
- Можно добавлять код/текст в существующие методы классов и файлы, писать свои приватные методы, а также создавать новые классы
- Вышеуказанные требования не относятся к комментариям, их после реализации нужно удалить
- Можно адаптировать/перенести актуальный код/файлы первого ДЗ, но с учетом того, что некоторые классы в новой заготовке были изменены




### Требования к реализации:
- Учесть актуальные требования прошлой работы
- Контекст описывается с помощью Java + Annotation-based конфигурации
- Имя ресурса с вопросами (csv-файла), а также количество правильных ответов для прохождения теста должны конфигурироваться через файл настроек и использоваться через соответствующие классы заготовки
- Необходимо адаптировать/перенести юнит-тест сервиса тестирования, а также написать интеграционный тест дао, читающего вопросы. Под интеграционностью тут понимается интеграция с файловой системой. В остальном, это должен быть юнит-тест (без контекста и с моками зависимостей)
- Тесты из заготовки должны проходить





Заготовка для выполнения работы: [https://github.com/OtusTeam/Spring/tree/master/templates/hw02-annotation-config](https://github.com/OtusTeam/Spring/tree/master/templates/hw02-annotation-config)


Задание сдаётся только после приема предыдущей работы


Задание сдаётся в виде ссылки на pull-request в чат с преподавателем в личном кабинете ОТУС, а не в Telegram


В pull-request должно присутствовать только то что касается текущей работы. Временные файлы и файлы IDE не должны попадать в PR.


Инструкция по работе с pull-request-ами находится в документе "Настройка окружения.pdf" в материалах занятия.


Вопросы можно задавать в чате ДЗ, но для оперативности рекомендуем делать это в группе Telegram.


Код, написанный в данном ДЗ будет использоваться в дальнейших домашних заданиях первого блока курса
AOP, Spring AOP
использовать аспектно-ориентированное программирование (там где нужно),
видеть в коде ключевую функциональность Spring - Spring AOP,
реализовывать в приложениях crosscutting-функциональность с помощью Spring AOP
17 июня, 20:00 — 21:30
Лектор: Владимир Иванов
"Чёрная магия" Spring Boot // ДЗ
ориентироваться в возможностях Spring Boot для различных функциональностей и технологий;
максимально быстро создавать production-grade standalone Spring-приложения с помощью Spring Boot Starters;
писать автоконфигурации и использовать существующие;
писать property в YAML-формате.
20 июня, 20:00 — 21:30
Лектор: Александр Оруджев
Домашние задания: 1
ДЗ
Перенести приложение для тестирования студентов на Spring Boot. -------------------------Описание домашнего задания-------------------------
### Задание:

Перенести приложение для тестирования студентов на Spring Boot и локализовать выводимые сообщения и вопросы с вариантами ответов. Задание выполняется на базе заготовки, содержащей каркас приложения. Необходимо дописать классы и служебные файлы заготовки, ориентируясь на оставленные в ней подсказки так, чтобы выполнялись условия задания. Также, решение должно удовлетворять нижеуказанным требованиям.




### Требования к использованию заготовки:
- То, что уже было в заготовке, должно остаться неизменным (количество, имена и текущее содержимое классов и файлов, сигнатуры методов и т.д.)
- Можно добавлять код/текст в существующие методы классов и файлы, писать свои приватные методы, а также создавать новые классы
- Вышеуказанные требования не относятся к комментариям, их после реализации нужно удалить
- Можно адаптировать/перенести актуальный код/файлы предыдущего ДЗ, но с учетом того, что некоторые классы в новой заготовке были изменены




### Требования к реализации:
- Учесть актуальные требования прошлой работы
- Перенести все свойства в application.yml
- MesageSource должен быть сконфигурирован Spring Boot автоматически, на основе настроек из application.yml
- Локализовать выводимые сообщения и вопросы с вариантами ответов
- Сделать собственный баннер для приложения
- Перенести и адаптировать тесты
- Вместо отдельных зависимостей в файле сборки, для тестирования использовать spring-boot-starter-test
- В остальном, требования к тестам не меняются




### Опционально:
- Использовать ANSI-цвета для баннера





Заготовка для выполнения работы: [https://github.com/OtusTeam/Spring/tree/master/templates/hw03-spring-boot](https://github.com/OtusTeam/Spring/tree/master/templates/hw03-spring-boot)


Задание сдаётся только после приема предыдущей работы


Задание сдаётся в виде ссылки на pull-request в чат с преподавателем в личном кабинете ОТУС, не в Telegram


В pull-request должно присутствовать только то что касается текущей работы. Временные файлы и файлы IDE не должны попадать в PR.


Инструкция по работе с pull-request-ами находится в документе "Настройка окружения.pdf" в материалах занятия.


Вопросы можно задавать в чате ДЗ, но для оперативности рекомендуем делать это в группе Telegram.


Код, написанный в данном ДЗ будет использоваться в дальнейших домашних заданиях первого блока курса
Продвинутая конфигурация (часть 1) - Scopes, Lifecycle
разбираться в областях видимости (Scopes) бинов;
использовать возможность жизненного цикла бинов.
27 июня, 20:00 — 21:30
Лектор: Владимир Иванов
Продвинутая конфигурация (часть 2) - Conditionals, Events, тестирование // ДЗ
использовать Best Practiсes для конфигурирования Spring Boot-приложений;
использовать события (Events) для передачи управления;
эффективно тестировать Spring Boot-приложения.
писать приложения с использованием Spring Shell.
1 июля, 20:00 — 21:30
Лектор: Владимир Иванов
Домашние задания: 1
ДЗ
Переписать интерфейс приложения для тестирования студентов с использованием Spring Shell. -------------------------Описание домашнего задания-------------------------
### Задание:

Переписать интерфейс приложения для тестирования студентов с использованием Spring Shell. Решение должно удовлетворять нижеуказанным требованиям.




### Требования к реализации:
- Учесть актуальные требования прошлой работы
- Подключить Spring Shell, используя стартер
- Написать команду/набор команд, позволяющий проводить тестирование (можно сделать одну команду, запускающую тестирование)
- Учесть, что классы с командами Spring Shell не являются сервисами, они по сути на следующем слое (в т.ч. это касается имен классов, пакетов и аннотаций над классами)
- Перенести тесты на @SpringBootTest. Компоненты и моки взять из тестового контекста, в остальном, за исключением интеграции с файловой системой в тесте дао, это должны быть юнит-тесты
- Учесть, что Spring Shell в тестах нужно отключить
- Локализовывать команды Spring Shell **не нужно**, а сообщения которые они выводят, нужно
- Данная работа **не подразумевает** использования Spring Application Events. Особенно это касается написания на них бизнес логики



Задание сдаётся только после приема предыдущей работы


Задание сдаётся в виде ссылки на pull-request в чат с преподавателем в личном кабинете ОТУС, не в Telegram


В pull-request должно присутствовать только то что касается текущей работы. Временные файлы и файлы IDE не должны попадать в PR.


Инструкция по работе с pull-request-ами находится в документе "Настройка окружения.pdf" в материалах занятия.


Вопросы можно задавать в чате ДЗ, но для оперативности рекомендуем делать это в группе Telegram.


Код, написанный в данном ДЗ больше использоваться не будет
Работа с базами данных
В данном модуле будет рассмотрены проекты Spring для работы как с реляционными базами данных, так и с NoSQL базами данных.

Spring JDBC, Spring ORM, Spring Data Repositories и, разумеется, работа с транзакциями.

Помимо проектов Spring, участники смогут разбираться в особенностях различных баз данных, а также использовать специальные embedded-базы даных.
DAO на Spring JDBC // ДЗ
эффективно использовать JDBC вместе со Spring JDBC для разработки приложений с мощью чистого SQL;
правильно применять паттерн DAO для подключения к БД;
пользоваться embedded БД для написания тестов и при разработке простых приложений.
4 июля, 20:00 — 21:30
Лектор: Владимир Иванов
Домашние задания: 1
ДЗ
Приложение, позволяющее вести каталог книг в библиотеке. -------------------------Описание домашнего задания-------------------------
### Задание:

Разработать однопользовательское, консольное приложение позволяющее вести каталог книг в библиотеке. Каждая книга имеет автора и как минимум один жанр (в зависимости от выбранной сложности работы). Задание выполняется на базе заготовки, содержащей каркас приложения. Необходимо "дописать" классы и служебные файлы заготовки, ориентируясь на оставленные в ней подсказки так, чтобы выполнялись условия задания. Также решение должно удовлетворять нижеуказанным требованиям.




### Требования к использованию заготовки:
- То, что уже было в заготовке, должно остаться неизменным (количество, имена и текущее содержимое классов и файлов, сигнатуры методов и т.д.)
- Можно добавлять код/текст в существующие методы классов и файлы, писать свои приватные методы, а также создавать новые классы
- Вышеуказанные требования не относятся к комментариям, их после реализации нужно удалить




### Требования к реализации:
- Использовать Spring JDBC и реляционную базу H2
- Для параметризованных запросов использовать NamedParametersJdbcTemplate
- Каждая сущность должна храниться в своей таблице
- Отношение между книгой и автором - многие-к-одному (у книги один автор, но у автора может быть несколько книг)
- Отношение между книгой и жанром зависит от выбранной сложности работы. Многие-к-одному (у книги один жанр, но у жанра может быть несколько книг) или многие-ко-многим (у книги много жанров, и у жанра может быть несколько книг)
- Интерфейс выполняется на Spring Shell. Для сущности книги, предусмотреть операции создания, обновления, удаления, вывода всех книг, а также вывода книги по id
- Предусмотреть операции вывода полного списка сущностей авторов и жанров
- Создание и инициализация схемы БД должно происходить через schema.sql + data.sql
- Не делать абстрактных или обобщенных сущностей
- Не делать абстрактных или обобщенных Dao
- Не делать двунаправленных связей (в книге автор, в авторе книги)
- Проблема N+1 должна быть решена
- С помощью @JdbcTest сделать интеграционные тесты всех методов дао жанров (со встроенной БД)
- Без фанатизма)




### Опционально:
- Создание и инициализация схемы БД сделать через систему миграций (Liquibase/Flyway)
- Отношение книга-жанр, многие-ко-многим (должен использоваться соответствующий вариант заготовки)





Заготовка для выполнения работы:
- Базовый вариант: [https://github.com/OtusTeam/Spring/tree/master/templates/hw05-jdbc-simple](https://github.com/OtusTeam/Spring/tree/master/templates/hw05-jdbc-simple)
- Вариант с опциональным усложнением: [https://github.com/OtusTeam/Spring/tree/master/templates/hw05-jdbc-hard](https://github.com/OtusTeam/Spring/tree/master/templates/hw05-jdbc-hard)



Задание сдаётся в виде ссылки на pull-request в чат с преподавателем в личном кабинете ОТУС, а не в Telegram


В pull-request должно присутствовать только то что касается текущей работы. Временные файлы и файлы IDE не должны попадать в PR.


Инструкция по работе с pull-request-ами находится в документе "Настройка окружения.pdf" в материалах занятия.


Вопросы можно задавать в чате ДЗ, но для оперативности рекомендуем делать это в группе Telegram.


Код, написанный в данном ДЗ будет использоваться в дальнейших домашних заданиях всех оставшихся блоков курса
Основы ORM, JPA, Hibernate как провайдер JPA
применять JPA для описания маппинга классов-entities на таблицы реляционной БД;
использовать Hibernate в качестве JPA Vendor.
8 июля, 20:00 — 21:30
Лектор: Александр Оруджев
JPQL, Spring ORM, DAO на основе Spring ORM + JPA // ДЗ
писать ORM DAO с помощью Spring ORM + JPA + Hibernate (в качестве JPA Vendor-a) в Spring приложениях;
использовать JPQL (аналог HQL) для построения SQL-подобных запросов.
11 июля, 20:00 — 21:30
Лектор: Александр Оруджев
Домашние задания: 1
ДЗ
Использовать ORM в качестве способа доступа к данным в приложении для хранения книг в библиотеке. -------------------------Описание домашнего задания-------------------------
### Задание:

Перевести приложение каталог книг в библиотеке на репозитории, использующие в качестве технологии доступа к данным, Spring ORM, JPA и Hibernate. Дополнить доменную модель сущностью комментария к книге. Задание выполняется на базе предыдущей работы, но также имеет заготовку содержащую тесты, проверяющие некоторые из требований к заданию. Решение должно удовлетворять нижеуказанным требованиям.




### Требования к использованию заготовки:
- Тесты из заготовки должны остаться неизменными (за исключением, возможно, имени пакета)




### Требования к реализации:
- Использовать Spring ORM, JPA и Hibernate (EntityManager) в качестве технологии доступа к данным
- Spring Data пока использовать нельзя
- Добавить сущность "комментария к книге" (много комментариев к одной книге)
- Реализовать CRUD операции для новой сущности. Получение всех комментариев делать не нужно. Только конкретного комментария по id и всех комментариев по конкретной книге по ее id
- Загрузка связей сущностей не должна приводить к большому количеству запросов к БД или избыточному по объему набору данных (проблема N+1 и проблема произведения таблиц)
- DDL через Hibernate должно быть отключено
- LAZY-связи не должны присутствовать в equals/hashCode/toString. В т.ч. за счет @Data
- Проблема N+1 должна быть решена теми же способами, что и в прошлой работе, но уже через инструменты, предоставляемыми ORM
- Аннотация @Transactional должна присутствовать только на методах сервиса
- Покрыть все репозитории тестами, используя H2 базу данных и @DataJpaTest
- В тестах репозиториев, для проверки или подготовки данных использовать TestEntityManager (только методы не требующие написания запросов). Сами репозитории для этого использовать нельзя
- Написать интеграционные тесты сервисов книг и комментариев, где проверить, что доступ к связям, которые используются снаружи серивсов не вызывают LazyInitialzationException
- Не забыть учесть в тестах, что тестовый контекст кэшируется, т.е. должны проходить как все тесты разом, так и по отдельности
- Для приема работы тесты из заготовки должны проходить
- Без фанатизма)





Заготовка для выполнения работы: [https://github.com/OtusTeam/Spring/tree/master/templates/hw06-jpa](https://github.com/OtusTeam/Spring/tree/master/templates/hw06-jpa)



Задание сдаётся в виде ссылки на pull-request в чат с преподавателем в личном кабинете ОТУС, а не в Telegram


В pull-request должно присутствовать только то что касается текущей работы. Временные файлы и файлы IDE не должны попадать в PR.


Инструкция по работе с pull-request-ами находится в документе "Настройка окружения.pdf" в материалах занятия.


Вопросы можно задавать в чате ДЗ, но для оперативности рекомендуем делать это в группе Telegram.


Код, написанный в данном ДЗ будет использоваться в дальнейших домашних заданиях всех оставшихся блоков курса
Транзакции, Spring Tx
применять особенности транзакции в реляционных БД для правильной разработки слоя DAO;
использовать декларативное и императивное управление транзакциями в Spring-приложениях с помощью Spring Tx.
15 июля, 20:00 — 21:30
Лектор: Владимир Иванов
"Белая магия" Spring Data: Spring Data JPA // ДЗ
использовать абстракции Spring Data для реализации собственных репозиториев в общем виде;
использовать "белую магию" Spring Data JPA для создания репозиториев для JPA сущностей.
18 июля, 20:00 — 21:30
Лектор: Дмитрий Коган
Домашние задания: 1
ДЗ
Использовать Spring Data JPA в качестве способа доступа к данным в приложении для хранения книг в библиотеке. -------------------------Описание домашнего задания-------------------------
### Задание:

Перевести приложение каталог книг в библиотеке на использование Spring Data JPA репозиториев в качестве технологии доступа к данным. Задание выполняется на базе предыдущей работы. Решение должно удовлетворять нижеуказанным требованиям.




### Требования к реализации:
- Подключить spring-boot-starter-data-jpa
- Переписать все репозитории на Spring Data JPA репозитории
- Все тесты с прошлой работы должны проходить
- Все требования к прошлой работе, касающиеся работы со связями и транзакциями, должны быть также соблюдены (N+1, Lazy поля + equals/hashCode/toString и т.д.)
- Без фанатизма :)






Задание сдаётся в виде ссылки на pull-request в чат с преподавателем в личном кабинете ОТУС, а не в Telegram


В pull-request должно присутствовать только то что касается текущей работы. Временные файлы и файлы IDE не должны попадать в PR.


Инструкция по работе с pull-request-ами находится в документе "Настройка окружения.pdf" в материалах занятия.


Вопросы можно задавать в чате ДЗ, но для оперативности рекомендуем делать это в группе Telegram.


Код, написанный в данном ДЗ будет использоваться в дальнейших домашних заданиях всех оставшихся блоков курса
SQL и NoSQL базы данных
использовать особенности нереляционных (NoSQL) БД;
выбирать NoSQL БД для решения задач.
22 июля, 20:00 — 21:30
Лектор: Дмитрий Коган
Spring Data для подключения к нереляционным БД // ДЗ
разрабатывать репозитории для хранения данных в NoSQL БД;
использовать другие проекты Spring Data.
25 июля, 20:00 — 21:30
Лектор: Дмитрий Коган
Домашние задания: 1
ДЗ
В приложении для хранения книг в библиотеке, использовать MongoDB как источник хранения данных и Spring Data MongoDB в качестве способа доступа к ним . -------------------------Описание домашнего задания-------------------------
### Задание:

Перевести приложение каталог книг в библиотеке на использование Spring Data MongoDB репозиториев в качестве технологии доступа к данным и MongoDB для их хранения. Задание выполняется на базе предыдущей работы. Решение должно удовлетворять нижеуказанным требованиям.




### Требования к реализации:
- Подключить spring-boot-starter-data-mongodb
- Переписать все репозитории на Spring Data MongoDB репозитории
- Можно реализовать Flapdoodle Embedded MongoDB
- Покрыть интеграционными тестами (со встроенной БД) все сервисы, остальные тесты можно убрать
- В решении не должно остаться никаких следов других технологий доступа к данным (Jdbc/Jpa)
- Работа приложения не должна приводить к наличию данных, находящихся в неконсистентном виде
- Учесть отсутствие каскадных операций (в т.ч. при использовании @DBRef) и то, что MongoEventListener-ы по разному работают для разных методов, а в некоторых случаях и вовсе не сработают
- Без крайней необходимости из БД не должны тянуться лишние данные (пример - загрузка всех книг автора при его удалении или изменении). При необходимости, можно применить подход с расшриением Spring Data репозиториев кастомным функционалом использующим MongoOperations
- Без фанатизма)






Задание сдаётся в виде ссылки на pull-request в чат с преподавателем в личном кабинете ОТУС, а не в Telegram


В pull-request должно присутствовать только то что касается текущей работы. Временные файлы и файлы IDE не должны попадать в PR.


Инструкция по работе с pull-request-ами находится в документе "Настройка окружения.pdf" в материалах занятия.


Вопросы можно задавать в чате ДЗ, но для оперативности рекомендуем делать это в группе Telegram.


Код, написанный в данном ДЗ будет использоваться в дальнейших домашних заданиях всех оставшихся блоков курса
Разработка Web-приложений
В данном модуле будут рассматриваться возможности Spring для разработки Web-приложений: Spring MVC и современный Reactive-ориентированный Spring WebFlux.

Разумеется, будут рассмотрены популярные технологии View и разработка современных SPA-приложений.

И, конечно, различные "плюшки" Spring Boot, максимально ускоряющие разработку Web-приложений.
Введение в Spring MVC, Spring MVC View на Spring Boot // ДЗ
различать архитектуры MVC и Spring MVC;
создавать простые классические Web-приложения на основе Spring MVC и Spring Boot;
создавать REST-сервисы на основе Spring MVC и Spring Boot.
29 июля, 20:00 — 21:30
Лектор: Александр Оруджев
Домашние задания: 1
ДЗ
CRUD приложение с Web UI и хранением данных в БД.
Необходимо:

1. Создать приложение с хранением сущностей в БД (можно взять библиотеку и DAO/репозитории из прошлых занятий);

2. Использовать классический View на Thymeleaf, classic Controllers;

3. Для книг (главной сущности) на UI должны быть доступные все CRUD операции. CRUD остальных сущностей - по желанию/необходимости;

4. Протестировать контроллер(ы) для CRUD операций над книгами с помощью @WebMvcTest и моков сервисов;

5. Локализацию делать НЕ нужно - она строго опциональна;

6. Без фанатизма)


Данное задание НЕ засчитывает предыдущие!


Это домашнее задание частично будет использоваться в дальнейшем
Современные приложения на Spring MVC // ДЗ
понимать особенности и ограничения архитектурного стиля REST
создавать сложные классические приложения с использованием RestController;
понимать современные приложения, как основанные на AJAX архитектуре и jQuery, так и SPA-приложения (React).
1 августа, 20:00 — 21:30
Лектор: Александр Оруджев
Домашние задания: 1
ДЗ
Переписать приложение с использованием AJAX и REST-контроллеров.
Домашнее задание выполняется на основе предыдущего.


1. Переписать приложение с классических View на AJAX архитектуру и REST-контроллеры;

2. Минимум: получение одной сущности и отображение её на странице с помощью XmlHttpRequest, fetch api или jQuery;

3. Опционально максимум: полноценное SPA приложение на React/Vue/Angular, только REST-контроллеры;

4. Протестировать все эндпойнты REST-контроллеров с моками зависимостей;

5. Без фанатизма)


В случае разработки SPA - рекомендуется вынести репозиторий с front-end. Используйте proxy при разработке (настройки CORS не должно быть).


Данное задание, выполненное в виде SPA засчитывает пердыдущее ДЗ

Если Вы хотите засчитать, то обязательно пришлите ссылку в чат соответствующего предыдущего занятия.


Данное ДЗ будет использоваться в дальнейшем
Reactor. Введение в реактивное программирование
применять принципы, на которых построено Reactive программирование;
пользоваться библиотекой RxJava для построения реактивных приложений;
применять различные Rx-операторы для необходимых ситуаций.
8 августа, 20:00 — 21:30
Лектор: Сергей Петрелевич
Spring WebFlux // ДЗ
создавать с помощью Spring WebFlux современные реактивные Web-приложения.
12 августа, 20:00 — 21:30
Лектор: Сергей Петрелевич
Домашние задания: 1
ДЗ
Использовать WebFlux.
1. За основу для выполнения работы можно взять ДЗ с Ajax + REST (классическое веб-приложение для этого луче не использовать).

2. Но можно выбрать другую доменную модель (не библиотеку).

3. Необходимо использовать Reactive Spring Data Repositories.

4. В качестве БД лучше использовать MongoDB или Redis. Использовать PostgreSQL и экспериментальную R2DBC не рекомендуется.

5. RxJava vs Project Reactor - на Ваш вкус.

6. Вместо классического Spring MVC и embedded Web-сервера использовать WebFlux.

7. Опционально: реализовать на Functional Endpoints


Данное задание НЕ засчитывает предыдущие!


Рекомендации:

Старайтесь избавиться от лишних архитектурных слоёв. Самый простой вариант - весь flow в контроллере.
Spring Security
В данном модуле подробно разбираются механизмы обеспечения безопасности в приложениях на Spring. Рассматриваются архитектура Spring Security, методы аутентификации и авторизации, включая работу с ACL (Access Control Lists). Студенты научатся применять различные подходы для защиты ресурсов и настраивать доступ на уровне бизнес-логики.
Spring Security: Архитектура
различать аутентификацию и авторизацию;
различать задачи безопасности в Enterprise приложениях;
разбираться в архитектуре Spring Security.
19 августа, 20:00 — 21:30
Лектор: Владимир Магеров
Spring Security: Механизмы аутентификации // ДЗ
различать различные механизмы аутентификации;
внедрять HTTP Basic аутентификацию для защиты Web-приложения;
внедрять Form-based аутентификацию для защиты Web-приложения;
использовать вторичные виды аутентификации (такие как Remember Me и Anonymous).
22 августа, 20:00 — 21:30
Лектор: Владимир Магеров
Домашние задания: 1
ДЗ
В CRUD Web-приложение добавить механизм аутентификации.
Внимание! Задание выполняется на основе нереактивного приложения Spring MVC!


1. Добавить в приложение новую сущность - пользователь. Не обязательно реализовывать методы по созданию пользователей - допустимо добавить пользователей только через БД-скрипты.

2. В существующее CRUD-приложение добавить механизм Form-based аутентификации.

3. UserDetailsService реализовать самостоятельно.

4. Авторизация на всех страницах - для всех аутентифицированных. Форма логина - доступна для всех.

5. Написать тесты контроллеров, которые проверяют, что все необходимые ресурсы действительно защищены.


Данное задание НЕ засчитывает предыдущие!


Данное ДЗ будет использоваться в дальнейшем.
Spring Security: Авторизация
внедрять в приложение различные механизмы авторизации - на основе URL и методов сервисов, для глубокой защиты приложений.
26 августа, 20:00 — 21:30
Лектор: Владимир Магеров
Spring Security: ACL // ДЗ
внедрять в приложение безопасность на основе доменных сущностей - ACLs.
29 августа, 20:00 — 21:30
Лектор: Владимир Магеров
Домашние задания: 1
ДЗ
Ввести авторизацию на основе URL и/или доменных сущностей.
Внимание! Задание выполняется на основе нереактивного приложения Sping MVC!


1. Минимум: настроить в приложении авторизацию на уровне URL.

2. Максимум: настроить в приложении авторизацию на основе доменных сущностей и методов сервиса.


Рекомендации по выполнению:

1. Не рекомендуется выделять пользователей с разными правами в разные классы - т.е. просто один класс пользователя.

2. В случае авторизации на основе доменных сущностей и PostgreSQL не используйте GUID для сущностей.

3. Написать тесты контроллеров, которые проверяют, что все необходимые ресурсы действительно защищены


Данное задание НЕ засчитывает предыдущие!
"Около" и "Дзен"
В данном модуле рассматриваются продвинутые проекты Spring, решающие специфичные задачи, связанные с авторизацией и аутентификацией, размещением сервисов в облаках и работой с БД, а также облегчающие создание больших монолитов и систем на микросервисной архитектуре.
Spring Batch // ДЗ
использовать Spring Batch для организации пакетной обработки данных в приложении;
применять Spring Batch не только в больших проектах.
2 сентября, 20:00 — 21:30
Лектор: Александр Оруджев
Домашние задания: 1
ДЗ
На основе Spring Batch разработать процедуру миграции данных из реляционного хранилища в NoSQL или наоборот.
1. Задание может быть выполнено в отдельном приложении, с сущностями из ДЗ JPA и MongoDB.

2. Вы можете выбрать другую доменную модель

3. Не обязательно добавлять процесс миграции в веб-приложение. Приложение может быть оформлено в виде отдельной утилиты.

4. Используя Spring Batch, следите, чтобы связи сущностей сохранились.

5. Опционально: Сделать restart задачи с помощью Spring Shell.


Данное задание НЕ засчитывает предыдущие!
Монолиты vs. Microservices Round 1, Messaging, Enterprise Integration Patterns (EIP)
различать два похода к разработке Enterprise-приложений - монолиты и микросервисы;
видеть проблемы, возникающие при создании монолитов;
использовать Best Practices при разработке монолитов.
5 сентября, 20:00 — 21:30
Лектор: Дмитрий Коган
Spring Integration: Messages и Channels
использовать различное многообразие сообщение для работы со Spring Integration;
использовать различные семантики каналов там, где необходима нужная семантика интеграции;
пользоваться встроенный DSL для настройки связей в Spring Integration;
различать базовые Endpoints и Flow Components.
9 сентября, 20:00 — 21:30
Лектор: Владимир Иванов
Spring Integration: Endpoints и Flow Components // ДЗ
использовать Endpoints и Flow Components для разработки сложных Enterprise-приложений c почти любой интеграцией.
12 сентября, 20:00 — 21:30
Лектор: Владимир Иванов
Домашние задания: 1
ДЗ
Реализовать обработку доменной сущности через каналы Spring Integration.
1. Выберите другую доменную область и сущности. Пример: превращение гусеницы в бабочку.

2. Опишите/сконфигурируйте процесс (IntegrationFlow) с помощью инструментария предоставляемого Spring Integration.

3. Желательно использование MessagingGateway и subfolw (при необходимости).


Задание выполняется в другом репозитории/в другой папке.


Данное задание НЕ засчитывает предыдущие!
Монолиты vs. Microservices (Round 2), Spring Boot Actuator - must have в микросервисах // ДЗ
использовать Best Practices для разработки приложений на микросервисной архитектуре;
использовать изобилие возможностей Spring Boot Actuator для создания production-grade приложений и микросервисов;
применять HATEOAS подход для разработки REST-сервисов.
16 сентября, 20:00 — 21:30
Лектор: Дмитрий Коган
Домашние задания: 1
ДЗ
Использовать метрики, healthchecks и logfile.
Данное задание выполняется на основе одного из реализованных Web-приложений



1. Подключить Spring Boot Actuator в приложение.

2. Включить метрики, healthchecks и logfile.

3. Реализовать свой собственный HealthCheck индикатор

4. UI для данных от Spring Boot Actuator реализовывать не нужно.

5. Опционально: переписать приложение на HATEOAS принципах с помощью Spring Data REST Repository


Данное задание НЕ засчитывает предыдущие!
REST-клиенты, SOAP, Spring WebServices и клиенты к ним
писать REST-клиенты с различными дополнениями для построения полноценных микросервисных систем;
писать на Spring WebServices SOAP-сервисы и клиенты к ним для разработки систем на SOA и SOAP.
19 сентября, 20:00 — 21:30
Лектор: Владимир Иванов
Docker, оркестрация // ДЗ
использовать Docker для запуска приложений в повседневной жизни, собирать собственные образы Docker c помощью Dockerfile для запуска собственных приложений, использовать docker-compose для запуска сложных систем.
30 сентября, 20:00 — 21:30
Лектор: Павел Стрекалов
Домашние задания: 1
ДЗ
Обернуть приложение в docker-контейнер.
Внимание! Задание выполняется на основе любого сделанного Web-приложения


1. Обернуть приложение в docker-контейнер. Dockerfile принято располагать в корне репозитория. В image должна попадать JAR-приложения. Сборка в контейнере рекомендуется, но не обязательна.

2. БД в собственный контейнер оборачивать не нужно (если только Вы не используете кастомные плагины)

3. Настроить связь между контейнерами, с помощью docker-compose

4. Опционально: сделать это в локальном кубе.

5. Приложение желательно реализовать с помощью всех Best Practices Docker (логгирование в stdout и т.д.)


Данное задание НЕ засчитывает предыдущие!
Знакомство с Kubernetes
узнать, что такое Kubernetes и чем он полезен java-разработчику.
2 октября, 20:00 — 21:30
Лектор: Сергей Петрелевич
Spring Cloud. Конфигурация и взаимодействие
организовать взаимодействие микросервисов c Config Server с помощью Spring Cloud;
изучить возможности обновления данных микросервисов "на лету" с помощью Spring Cloud Bus;
научиться строить огромные системы на Cloud Service Discovery с использованием Eureka, Ribbon и Feign.
7 октября, 20:00 — 21:30
Лектор: Сергей Петрелевич
Spring Cloud. Отказоустойчивость и мониторинг
строить огромные системы с помощью Zuul, Hystrix, Sleuth, Zipkin.
9 октября, 20:00 — 21:30
Лектор: Сергей Петрелевич
Домашние задания: 1
ДЗ
Обернуть внешние вызовы в Hystrix.
1. Обернуть все внешние вызовы в Hystrix, Hystrix Javanica.

2. Возможно использование Resilent4j

3. Возможно использование Feign Client

Опционально: Поднять Turbine Dashboard для мониторинга.


Данное задание НЕ засчитывает предыдущие!
Применение RabbitMQ
получить ответы на вопросы по проекту, ДЗ и по курсу
14 октября, 20:00 — 21:30
Лектор: Владимир Иванов
Применение Kafka
познакомиться с платформой Kafka и возможностями применения в приложениях на java.
17 октября, 20:00 — 21:30
Лектор: Павел Стрекалов
Комплексный пример использования WebFlux и Kafka
ориентироваться в реактивных фреймоврках в стеке Spring;
использовать Reactive-версию Spring Data репозиториев.
21 октября, 20:00 — 21:30
Лектор: Сергей Петрелевич
Проектная работа
Заключительный месяц курса посвящен проектной работе. Свой проект - это то, что интересно писать студенту. То, что можно создать на основе знаний, полученных на курсе.
При этом не обязательно закончить его за месяц. В процессе написания по проекту можно получить консультации преподавателей.

Проект должен стать примером кода, который можно показывать потенциальным работодателям.

Проект должен быть сделан на основе Spring Boot, включать работу с DB с ипользованием Spring Data репозиториев и/или Spring JDBC.
Проект должен иметь UI построенный на современных принципах разработки Web-приложений (AJAX и/или SPA).
Приложение должно содержать механизмы аутентификации и авторизации с использованием Spring Security
Асинхронные части могут быть реализованы с помощью Spring Integration.
Пектные обработки, утилиты поддержки должны быть реализованы с помощью Spring Batch + Spring Shell.
Проект должен быть cloud-ready.

Примеры тем:
- Онлайн-библиотека
- Блог с админкой/регистрацией пользователей
Выбор темы и организация проектной работы
выбрать и обсудить тему проектной работы,
спланировать работу над проектом,
ознакомиться с регламентом работы над проектом
24 октября, 20:00 — 21:30
Лектор: Александр Оруджев
Домашние задания: 1
ДЗ
Проектная работа. Требования к проекту и его технологическому стеку

0. Объем, как 3-4 ДЗ (за меру можно взять ДЗ по веб-библиотеке)
1. Spring Core
2. Spring Security (желательно через JWT, желательно вынести в отдельный сервис)
3. Spring MVC/WebFlux
4. Bean Validation
5. Spring Data Jdbc/Jpa/MongoDB/...
6. Коммуникация между микросервисами по REST/очередям (если есть микросервисы)
7. Соблюдение всех практик и рекомендаций, которые давались на курсе. В том числе должна быть работа с исключениями
8. Юнит и интеграционные тесты приветствуются
9. Использование паттернов отказоустойчивости приветствуется (CircuitBreaker/Retry/Cache/ServiceRegistry/ConfigServer/ApiGateway/...)
10. Docker приветствуется



Для допуска к выполнению проектной работы, нужно чтобы были сданы ДЗ к следующим лекциям:
1. Чёрная магия" Spring Boot
2. DAO на Spring JDBC
3. JPQL, Spring ORM, DAO на основе Spring ORM + JPA и/или "Белая магия" Spring Data: Spring Data JPA
4. Spring MVC View и/или Современные приложения на Spring MVC
5. Spring Security: ACL
Защита проектных работ №1
защитить проект и получить рекомендации экспертов
25 ноября, 20:00 — 21:30
Лектор: Александр Оруджев
Защита проектных работ №2
защитить проект и получить рекомендации экспертов.
28 ноября, 20:00 — 21:30
Лектор: Александр Оруджев

Преподаватель

Юрий Дворжецкий
Ведущий full-stack разработчик, кандидат физико-математических наук.
Программирует с начальных классов, преподаёт со студенчества.

Разрабатывает на разных платформах: большие и маленькие проекты, высоконагруженные и очень красивые, многим известные и совсем специфические.

Влюблён в ОТУС, как в платформу с неограниченными возможностями как для учащихся, так и для преподавателей.