День открытых дверей по курсу «Разработчик на Spring Framework» 19.02.2020 в 20:00 | OTUS
Запланируйте обучение с выгодой в Otus!
-15% на все курсы до 20.11 Забрать скидку! →
Выбрать курс
Проходил 19 февраля 2020 года в 20:00

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

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

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

Запись

О курсе

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

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

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

В ресурсах хранятся вопросы и различные ответы к ним в виде CSV файла (5 вопросов).
Вопросы могут быть с выбором из нескольких вариантов или со свободным ответом - на Ваше желание и усмотрение.
Приложение должна просто вывести вопросы теста из CSV-файла с возможными вариантами ответа (если имеются).




**Требования:**
0. В приложении должна присутствовать объектная модель (отдаём предпочтение объектам и классам, а не строчкам и массивам/спискам строчек).
1. Все классы в приложении должны решать строго определённую задачу (см. п. 18-19 "Правила оформления кода.pdf", прикреплённые к материалам занятия).
2. Контекст описывается XML-файлом.
3. Все зависимости должны быть настроены в IoC контейнере.
4. Имя ресурса с вопросами (CSV-файла) необходимо захардкодить строчкой в XML-файле с контекстом.
5. CSV с вопросами читается именно как ресурс, а не как файл.
6. Scanner, PrintStream и другие стандартные типы в контекст класть не нужно!
7. Весь ввод-вывод осуществляется на английском языке.
8. Крайне желательно написать юнит-тест какого-нибудь сервиса (оцениваться будет только попытка написать тест).
9. Помним - "без фанатизма".




**Опционально (задание со "звёздочкой"):**

Приложение должно корректно запускаться с помощью "java -jar"


Заготовка для выполнения работы: [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-ами находится в документе "Настройка окружения.pdf" в материалах занятия.


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


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


В ресурсах хранятся вопросы и различные ответы к ним в виде CSV файла (5 вопросов).

Вопросы могут быть с выбором из нескольких вариантов или со свободным ответом - на Ваше желание и усмотрение.


Новый функционал:


Программа должна спросить у пользователя фамилию и имя, спросить 5 вопросов из CSV-файла и вывести результат тестирования.


Выполняется на основе предыдущего домашнего задания + , собственно, сам функционал тестирования.


Требования:

0. В приложении должна присутствовать объектная модель (отдаём предпочтение объектам и классам, а не строчкам и массивам/спискам строчек).

1. Все классы в приложении должны решать строго определённую задачу (см. п. 18-19 "Правила оформления кода.pdf", прикреплённые к материалам занятия).

2. Переписать конфигурацию в виде Java + Annotation-based конфигурации. Все зависимости должны быть настроены в IoC контейнере.

3. Добавить функционал тестирования студента.

4. Добавьте файл настроек для приложения тестирования студентов.

5. В конфигурационный файл можно поместить путь до CSV-файла, количество правильных ответов для зачёта - на Ваше усмотрение.

6. Помним, CSV с вопросами читается именно как ресурс, а не как файл.

7. Нужно написать интеграционный тест класса, читающего вопросы и юнит-тест сервиса с моком зависимости. Под интеграционностью тут понимается интеграция с файловой системой. В остальном, это должен быть юнит-тест

8. Файл настроек и файл с вопросами, для тестов д.б. свои.

9. Scanner, PrintStream и другие стандартные типы в контекст класть не нужно! См. соответствующие слайды с занятия.

10. Весь ввод-вывод осуществляется на английском языке.

11. Помним, "без фанатизма" :)


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


Задание сдаётся в виде ссылки на pull-request в чат с преподавателем.

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

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


Код, написанный в данном ДЗ будет использоваться дальше в домашних заданиях №3 (Занятие №4), №4 (Занятие №5)

Данное задание засчитывает ДЗ №1 (Занятие №1).

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


1. Создать проект, используя Spring Boot Initializr (https://start.spring.io)

2. Перенести приложение проведения опросов из прошлого домашнего задания.

3. Перенести все свойства в application.yml

4. Локализовать выводимые сообщения и вопросы (в CSV-файле). MesageSource должен быть из автоконфигурации Spring Boot.

5. Сделать собственный баннер для приложения.

6. Вместо отдельных зависимостей в файле сборки, для тестирования использовать 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.


Написанное приложение будет использоваться в ДЗ №4 (к занятию №5).

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


Необходимо:


1. Подключить Spring Shell, используя spring-starter.

2. Написать набор команд, позволяющий проводить опрос.

3. Перенести тесты на @SpringBootTest. Компоненты и моки взять из тестового контекста, в остальном это должны быть юнит-теста. Учесть, что Spring Shell в тестах нужно отключить


Набор команд зависит только от Вашего желания. Вы можете сделать одну команду, запускающую тестирование, а можете построить полноценный интерфейс на Spring Shell.


Локализовывать команды Spring Shell **не нужно** (хотя можно, но это долго и непросто).
Данная работа **не подразумевает** использования Spring Application Events. Особенно это касается написания на них бизнес логики



Задание сдаётся в виде ссылки на pull-request в чат с преподавателем.

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


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


Это домашнее задание больше нигде не будет использоваться. Но интерфейс Spring Shell мы будет использовать в дальнейшем.
Разбор домашних заданий, QnA
писать код с учётом Best Practices;
не допускать частых ошибок;
получить ответы на вопросы.
27 декабря, 20:00 — 21:30
Лектор: Александр Оруджев
Работа с базами данных
В данном модуле будет рассмотрены проекты Spring для работы как с реляционными базами данных, так и с NoSQL базами данных.

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

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

1. Использовать Spring JDBC и реляционную базу H2
2. Предусмотреть сущности авторов, книг и жанров. Каждая должна храниться в своей таблице
3. Предполагаются отношения многие-к-одному (у книги один автор, но у автора может быть несколько книг, то же касается книг и жанров)
4. Интерфейс выполняется на Spring Shell (CRUD книги плюс, как минимум, операции вывода всех авторов и жанров)
5. Создание и инициализация схемы БД должно происходить через schema.sql + data.sql или через систему миграций (Liquibase/Flyway)
6. С помощью @JdbcTest сделать интеграционные тесты всех методов дао книг (со встроенной БД)


Дополнительные требования к выполнению работы:
1. Проблема N+1 должна быть решена
2. Использовать NamedParametersJdbcTemplate
3. Не делать абстрактных или обобщенных Dao
4. Не делать абстрактных или обобщенных сущностей
5. Не делать двунаправленных связей (в книге автор, в авторе книги)
6. Без фанатизма)


**Опциональное** усложнение - отношения многие-ко-многим **для одной сущности**


Это домашнее задание является основой для следующих.


Ссылки на заготовки:

- Базовый вариант: [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)
Основы ORM, JPA, Hibernate как провайдер JPA
применять JPA для описания маппинга классов-entities на таблицы реляционной БД;
использовать Hibernate в качестве JPA Vendor.
14 января, 20:00 — 21:30
Лектор: Александр Оруджев
JPQL, Spring ORM, DAO на основе Spring ORM + JPA // ДЗ
писать ORM DAO с помощью Spring ORM + JPA + Hibernate (в качестве JPA Vendor-a) в Spring приложениях;
использовать JPQL (аналог HQL) для построения SQL-подобных запросов.
17 января, 20:00 — 21:30
Лектор: Александр Оруджев
Домашние задания: 1
ДЗ
Переписать приложение для хранения книг на ORM.
Домашнее задание выполняется переписыванием предыдущего на JPA.


Требования:

1. Использовать JPA, Hibernate только в качестве JPA-провайдера

2. Spring Data пока использовать нельзя

3. Загрузка связей сущностей не должна приводить к большому количеству запросов к БД или избыточному по объему набору данных (проблема N+1 и проблема произведения таблиц)

4. Добавить сущность "комментария к книге", реализовать CRUD для новой сущности. Получение всех комментариев делать не нужно. Только конкретного комментария по id и всех комментариев по конкретной книге по ее id

5. DDL через Hibernate должно быть отключено

6. LAZY-связи не должны присутствовать в equals/hashCode/toString. В т.ч. за счет @Data

7. Аннотация @Transactional должна присутствовать только на методах сервиса

8. Покрыть репозитории тестами, используя H2 базу данных и @DataJpaTest

9. Написать интеграционные тесты сервисов книг и комментариев, которые будут проверять работу с БД. Транзакционность в этих тестах должна быть отклкючена, чтобы не влияла на транзакции в сервисах. Проверить, что доступ к связям, которые используются снаружи серивсов не вызывают LazyInitialzationException. Не забыть учесть кэширование контекста в тестах

9. Добавить в решение тесты из заготовки. Для приема работы тесты должны проходить


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


Это домашнее задание будет использоваться в качестве основы для других ДЗ

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


Требования:

1. Переписать все репозитории по работе с книгами на Spring Data JPA репозитории.

2. Используйте spring-boot-starter-data-jpa.

3. Кастомные методы репозиториев (или с хитрым @Query) покрыть тестами, используя H2.

4. @Transactional рекомендуется ставить на методы сервисов, а не репозиториев.


Это домашнее задание будет использоваться в качестве основы для других ДЗ

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


Требования:

1. Использовать Spring Data MongoDB репозитории, а если не хватает функциональности, то и *Operations

2. Тесты можно реализовать с помощью Flapdoodle Embedded MongoDB

3. Hibernate, равно, как и JPA, и spring-boot-starter-data-jpa не должно остаться в зависимостях, если ДЗ выполняется на основе предыдущего.

4. Как хранить книги, авторов, жанры и комментарии решать Вам. Но перенесённая с реляционной базы структура не всегда будет подходить для MongoDB.


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


Это задание может использоваться в дальнейшем, а может не использоваться - на Ваше дальнейшее усмотрение
Разбор домашних заданий, QnA
писать код с учётом Best Practices;
не допускать частых ошибок;
получить ответы на вопросы.
4 февраля, 20:00 — 21:30
Лектор: Александр Оруджев
Разработка 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.
7 февраля, 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).
11 февраля, 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-операторы для необходимых ситуаций.
14 февраля, 20:00 — 21:30
Лектор: Сергей Петрелевич
Spring WebFlux // ДЗ
создавать с помощью Spring WebFlux современные реактивные Web-приложения.
18 февраля, 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, решающие специфичные задачи, связанные с авторизацией и аутентификацией, размещением сервисов в облаках и работой с БД, а также облегчающие создание больших монолитов и систем на микросервисной архитектуре.
Вебинар-собеседование
проверить полученные на курсе знания;
выявить сильные и слабые места;
ознакомиться с форматом собеседования.
21 февраля, 20:00 — 21:30
Лектор: Александр Оруджев
Spring Security: Архитектура
различать аутентификацию и авторизацию;
различать задачи безопасности в Enterprise приложениях;
разбираться в архитектуре Spring Security.
25 февраля, 20:00 — 21:30
Лектор: Владимир Магеров
Spring Security: Механизмы аутентификации // ДЗ
различать различные механизмы аутентификации;
внедрять HTTP Basic аутентификацию для защиты Web-приложения;
внедрять Form-based аутентификацию для защиты Web-приложения;
использовать вторичные виды аутентификации (такие как Remember Me и Anonymous).
28 февраля, 20:00 — 21:30
Лектор: Владимир Магеров
Домашние задания: 1
ДЗ
В CRUD Web-приложение добавить механизм аутентификации.
Внимание! Задание выполняется на основе нереактивного приложения Spring MVC!


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

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

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

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

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


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


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


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

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


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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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