День открытых дверей по курсу «Разработчик на Spring Framework» 19.02.2020 в 20:00 | OTUS >
🔥 Учись выгодно в Отус!
-10% на все курсы июня до 6.07 ! →
Выбрать курс
+7 499 938-92-02
Проходил 19 февраля 2020 года в 20:00

День открытых дверей
Всё о курсе «Разработчик на Spring Framework»

День открытых дверей онлайн

День Открытых Дверей — отличная возможность узнать подробнее о программе курса, особенностях онлайн-формата, навыках, компетенциях и перспективах, которые ждут выпускников после обучения. Также преподаватель расскажет о своём профессиональном опыте и ответит на вопросы участников. Поэтому если есть вопрос, запишитесь на онлайн-трансляцию и задайте его в прямом эфире!
Преподаватель
Юрий Дворжецкий

Запись

О курсе

Разработчик на Spring Framework
144 000 ₽ 129 600 ₽
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 - автоконфигурации.
Знакомство с курсом
познакомиться со структурой курса;
обсудить часто встречающиеся вопросы
30 июля, 20:00 — 21:30
Лектор: Александр Оруджев
Введение в Spring Framework // ДЗ
ориентироваться в проектах Spring для дальнейшего изучения;
применять принцип IoC при написании классов и тестов;
создавать контекст Spring;
определять Spring Beans в контексте;
организовывать правильный DI.
6 августа, 20:00 — 21:30
Домашние задания: 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 августа, 11:00 — 12:30
Лектор: Александр Оруджев
Конфигурирование Spring-приложений // ДЗ
конфигурировать Spring-приложения в современном Java-based стиле (как сейчас и все пишут);
ориентироваться в многослойной архитектуре;
пользоваться Spring Expression Language (SpEL);
задавать параметры приложения c помощью .properties файлов.
13 августа, 20:00 — 21: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
16 августа, 11:00 — 12: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) бинов;
использовать возможность жизненного цикла бинов.
23 августа, 11:00 — 12:30
Лектор: Александр Оруджев
Продвинутая конфигурация (часть 2) - Conditionals, Events, тестирование // ДЗ
использовать Best Practiсes для конфигурирования Spring Boot-приложений;
использовать события (Events) для передачи управления;
эффективно тестировать Spring Boot-приложения.
писать приложения с использованием Spring Shell.
27 августа, 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 БД для написания тестов и при разработке простых приложений.
30 августа, 11:00 — 12: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.
3 сентября, 20:00 — 21:30
Лектор: Александр Оруджев
JPQL, Spring ORM, DAO на основе Spring ORM + JPA // ДЗ
писать ORM DAO с помощью Spring ORM + JPA + Hibernate (в качестве JPA Vendor-a) в Spring приложениях;
использовать JPQL (аналог HQL) для построения SQL-подобных запросов.
6 сентября, 11:00 — 12: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.
10 сентября, 20:00 — 21:30
Лектор: Владимир Иванов
"Белая магия" Spring Data: Spring Data JPA // ДЗ
использовать абстракции Spring Data для реализации собственных репозиториев в общем виде;
использовать "белую магию" Spring Data JPA для создания репозиториев для JPA сущностей.
13 сентября, 11:00 — 12: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 БД для решения задач.
17 сентября, 20:00 — 21:30
Лектор: Дмитрий Коган
Spring Data для подключения к нереляционным БД // ДЗ
разрабатывать репозитории для хранения данных в NoSQL БД;
использовать другие проекты Spring Data.
20 сентября, 11:00 — 12: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.
24 сентября, 20:00 — 21:30
Лектор: Александр Оруджев
Домашние задания: 1
ДЗ
CRUD приложение с Web UI и хранением данных в БД. -------------------------Описание домашнего задания-------------------------
### Задание:
Преобразовать консольное приложение каталога книг в библиотеке в веб-приложение с сохранением функциональности. Задание выполняется на базе предыдущей работы (Spring Data JPA или Spring Data Mongo DB).




### Требования к реализации:
- Реализовать CRUD операции для сущности книги, а так же отображения авторов, жанров и комментариев. Остальные операции с сущностями - по желанию/необходимости;
- Предусмотреть страницу со списком книг, списком авторов, списком жанров, страницу создания/редактирования книги, страницу просмотра книги со списком комментариев к ней;
- Удаление сущностей можно сделать на отдельной странице подтверждения удаления, странице редактирования или по кнопке из списка;
- Для удаления НЕ должен использоваться HTTP-метод GET;
- Из любого места приложения должна быть возможность вернуться на главную страницу (список книг);
- Выбор авторов и жанров при редактировании должен осуществляться из списков (`<select>`), ручного ввода id быть не должно;
- Использовать View на Thymeleaf и классические контроллеры (@Controller). Использование REST/Ajax данным заданием не предусматривается;
- Протестировать все эндпойнты контроллеров для CRUD операций над книгами с помощью @WebMvcTest и моков сервисов;
- Локализация интерфейса данным заданием не предусматривается, она строго опциональна;
- Без фанатизма)






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


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


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


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


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




### Требования к реализации:
- Для получения данных на страницах приложения использовать JavaScript, fetch api и REST-контроллеры;
- Минимум: переделать CRUD операции над книгами;
- URL эндпойнтов должны соответствовать ресурсному стилю REST (см. пример типового api на соответствующем слайде презентации к лекции);
- Действия над сущностями должны быть выражены исключительно через HTTP-методы. Глаголов в URL быть не должно;
- Протестировать все эндпойнты REST-контроллеров с помощью @WebMvcTest и моков сервисов;
- Без фанатизма)






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


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


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


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


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




### Требования к реализации:

- Переписать REST эндпойнты на WebFlux. Опционально: вместо контроллеров использовать Functional Endpoints;
- Использовать Spring Data Reactive MongoDb;
- Опциональное усложнение: Использовать Spring Data R2DBC и H2. Проблема N+1 должна быть решена (например, через кастомные репозитории и R2dbcEntityOperations)
- Использование block() и subscribe() условно допустимо только в миграциях и тестах;
- Протестировать все эндпойнты с помощью @WebFluxTest и моков сервисов;
- Без фанатизма)






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


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


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


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


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


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

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

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

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

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


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


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


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

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


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

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

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

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


Данное задание НЕ засчитывает предыдущие!
"Около" и "Дзен"
В данном модуле рассматриваются продвинутые проекты Spring, решающие специфичные задачи, связанные с авторизацией и аутентификацией, размещением сервисов в облаках и работой с БД, а также облегчающие создание больших монолитов и систем на микросервисной архитектуре.
Spring Batch // ДЗ
использовать Spring Batch для организации пакетной обработки данных в приложении;
применять Spring Batch не только в больших проектах.
29 октября, 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 при разработке монолитов.
1 ноября, 11:00 — 12:30
Лектор: Дмитрий Коган
Spring Integration: Messages и Channels
использовать различное многообразие сообщение для работы со Spring Integration;
использовать различные семантики каналов там, где необходима нужная семантика интеграции;
пользоваться встроенный DSL для настройки связей в Spring Integration;
различать базовые Endpoints и Flow Components.
12 ноября, 20:00 — 21:30
Лектор: Владимир Иванов
Spring Integration: Endpoints и Flow Components // ДЗ
использовать Endpoints и Flow Components для разработки сложных Enterprise-приложений c почти любой интеграцией.
15 ноября, 11:00 — 12: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-сервисов.
19 ноября, 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.
22 ноября, 11:00 — 12:30
Лектор: Владимир Иванов
Docker, оркестрация // ДЗ
использовать Docker для запуска приложений в повседневной жизни, собирать собственные образы Docker c помощью Dockerfile для запуска собственных приложений, использовать docker-compose для запуска сложных систем.
26 ноября, 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-разработчику.
29 ноября, 11:00 — 12:30
Лектор: Сергей Петрелевич
Spring Cloud. Конфигурация и взаимодействие
организовать взаимодействие микросервисов c Config Server с помощью Spring Cloud;
изучить возможности обновления данных микросервисов "на лету" с помощью Spring Cloud Bus;
научиться строить огромные системы на Cloud Service Discovery с использованием Eureka, Ribbon и Feign.
3 декабря, 20:00 — 21:30
Лектор: Сергей Петрелевич
Spring Cloud. Отказоустойчивость и мониторинг // ДЗ
строить огромные системы с помощью Zuul, Hystrix, Sleuth, Zipkin.
6 декабря, 11:00 — 12:30
Лектор: Сергей Петрелевич
Домашние задания: 1
ДЗ
Обернуть внешние вызовы в Hystrix.
1. Обернуть все внешние вызовы в Hystrix, Hystrix Javanica.

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

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

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


Данное задание НЕ засчитывает предыдущие!
Применение RabbitMQ
получить ответы на вопросы по проекту, ДЗ и по курсу
10 декабря, 20:00 — 21:30
Лектор: Владимир Иванов
Применение Kafka
познакомиться с платформой Kafka и возможностями применения в приложениях на java.
13 декабря, 11:00 — 12:30
Лектор: Павел Стрекалов
Комплексный пример использования WebFlux и Kafka
ориентироваться в реактивных фреймоврках в стеке Spring;
использовать Reactive-версию Spring Data репозиториев.
17 декабря, 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.

Примеры тем:
- Онлайн-библиотека
- Блог с админкой/регистрацией пользователей
Выбор темы и организация проектной работы
выбрать и обсудить тему проектной работы,
спланировать работу над проектом,
ознакомиться с регламентом работы над проектом
20 декабря, 11:00 — 12: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
защитить проект и получить рекомендации экспертов
21 января, 20:00 — 21:30
Лектор: Александр Оруджев
Защита проектных работ №2
защитить проект и получить рекомендации экспертов.
24 января, 11:00 — 12:30
Лектор: Александр Оруджев

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

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

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

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

F.A.Q.: Наиболее часто задаваемые вопросы:

Нужно ли оплачивать обучение до Дня открытых дверей, если я хочу гарантированно попасть в группу?
Да, мы рекомендуем заранее оплатить обучение, чтобы гарантированно попасть в группу. В период проведения Дня открытых дверей резко возрастает количество желающих обучаться, поэтому может случиться так, что к окончанию Дня открытых дверей мест в группе не останется
Кто будет проводить День открытых дверей?
Проводить День открытых дверей будет преподаватель курса.
Как принять участие в Дне открытых дверей?
Для того, чтобы принять участие в Дне открытых дверей, оставьте свой e-mail в поле регистрации на мероприятие. Перед началом Дня открытых дверей мы пришлем вам ссылку, пройдя по которой, вы сможете присоединиться к вебинару.
Какие вопросы будем обсуждать на Дне открытых дверей?
На дне открытых дверей мы поговорим о проекте OTUS (о программе курса, почему мы не принимаем в группы новичков, почему учиться у нас интересно, но сложно), карьерных перспективах выпускников (почему вероятность карьерного роста у лучших студентов стремится к 100%), учебном процессе (оплатах, оценке знаний, сертификатах и прочих аспектах). Также ведущий мероприятия с радостью ответит на все ваши вопросы.