В прошлом месяце Trisha Gee (JetBrains) представила на SpringOne демонстрацию создания приложения, отображающего стоимость акций в реальном времени, с использованием Spring Boot, Kotlin и JavaFX. Демонстрация в режиме реального времени была записана и доступна в виде 70-минутного видео.
18 декабря Trisha завершила публикацию на сайте dzone.com туториала про реактивный Spring Boot на основе указанного видео, в виде серии более коротких видеороликов с сопровождающим сообщением в блоге, объясняющих каждый из шагов более медленно и более подробно.
У меня появилась мысль перевести этот туториал на русский язык. Однако на мой запрос об этом Trisha ответила вежливым отказом:
Поэтому я решил ограничиться обзором этого туториала, включающего следующую серию уроков:
Туториал представляет собой серию уроков, в которых будет создано полноценное приложение Spring Boot с внутренним интерфейсом Kotlin, клиентом Java и пользовательским интерфейсом на JavaFX.
Первая часть туториала описывает создание Spring Boot приложения на Kotlin, которое служит в качестве серверной части приложения. Будет создан реактивный REST сервис, к которому можно будет подключиться в следующих частях руководства.
Эта запись блога содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
Эта часть туториала включает следующие шаги:
После выполнения указанных шагов в 1 части туториала будет создано простое приложение Kotlin Spring Boot, которое использует Reactive Streams для выдачи раз в секунду случайно сгенерированной цены акций.
Полный код 1 части туториала доступен на GitHub.
Во 2 части туториала показано, как создается реактивный Java-клиент на Spring, который подключается к REST-сервису, транслирующему цены на акции раз в секунду. Этот клиент будет использоваться в последующих разделах руководства. При разработке будет использоваться процесс, основанный на TDD, для создания клиента и его тестирования.
Эта запись блога содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
Эта часть туториала включает следующие шаги:
Тестирование реактивных приложений является непростым навыком, и безусловно есть гораздо лучшие способы сделать это, чем показано в этом простом примере. Тем не менее, был успешно использован интеграционный тест для определения API и функциональности клиента по ценам на акции.
Этот клиент подключается к конечной точке, которая генерирует отправленные сервером события и возвращает поток объектов StockPrice, которые могут использоваться другой службой. Как это сделать будет показано в следующих видеороликах этой серии.
Полный код 2 части доступен на GitHub.
Третья демонстрация показывает, как создать приложение JavaFX, которое запускается и управляется через Spring Boot с целью использования функций Spring, таких как инверсия управления (Inversion of Control) и внедрение зависимости (Dependency Injection), в нашем приложении JavaFX.
Эта запись блога также содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
Эта часть туториала включает следующие шаги:
После выполнения уканных шагов 3 части туториала будет создано главное окно JavaFX приложения (Stage — см. часть 2 Учебника по JavaFX), позволяющее настроить пользовательский интерфейс. Далее можно запустить наше приложение StockUIA и увидеть, что оно успешно запускается как приложение Spring Boot. Он также запускает процесс Java, который отображал бы пользовательский интерфейс, если бы мы его создали. На данный момент успешно создано JavaFX приложение, которое запускается и управляется с помощью Spring и позволяет использовать удобные функции любого приложения Spring.
Полный код 3 части туториала доступен на GitHub.
На этом шаге туториала мы увидим, как создать приложение на JavaFX, которое показывает линейную диаграмму. Это приложение использует Spring для важных функций, таких как инверсия управления.
Эта запись блога содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
Эта часть туториала включает следующие шаги:
После выполнения указанных шагов 4 части туториала будет создано JavaFX приложение. Запустив приложение, мы должны увидеть контур линейного графика, показанного в нашем окне, с числами для цены по оси Y и временем по оси X.
Было создано приложение JavaFX, интегрированное в Spring Boot, которое использует FXML для объявления того, что должно отображаться в представлении.
Полный код этой части туториала доступен на GitHub.
В 5 уроке рассматривается, как использовать бины Spring из одного модуля в другом модуле с помощью автоконфигурации.
Эта запись блога также содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
На последнем уроке было создано приложение JavaFX Spring Boot, которое показывало пустую линейную диаграмму. В этом видео мы увидим, как настроить автоконфигурацию для Spring Beans, чтобы мы могли использовать bean-компоненты, определенные в модуле stock-client, в модуле stock-ui.
Эта часть туториала включает следующие шаги:
Это довольно маленькая часть туториала, но она позволяет нам создать модули, которые могут быть повторно использованы различными приложениями Spring Boot. Теперь мы можем использовать клиент в ChartController для подключения к сервису цен и начать отображать цены в реальном времени на линейном графике.
Полный код этой части доступен на GitHub.
В этом уроке рассматривается подключение JavaFX диаграммы к нашему сервису Kotlin Spring Boot для отображения цен в реальном времени. Эта запись блога содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
В четвертой части было создано приложение JavaFX Spring Boot, которое показывает пустую линейную диаграмму. В последнем выпуске (пятая часть) использован WebClientStockClient для подключения к службе цен. В этой части был получен линейный график, показывающий цены, поступающие от нашего сервиса Kotlin Spring Boot, в режиме реального времени.
Эта часть туториала включает следующие шаги:
Немногими строками кода в этой части туториала было создано приложение JavaFX, которое использует SpringClient для подключения к сервису Spring Boot, подписывается на реактивный поток цен и рисует цены на линейном графике в режиме реального времени.
Полный код этой части доступен на GitHub.
В предыдущей части была реализована подписка линейной диаграммы JavaFX на цены из нашего сервиса Reactive Spring Boot и их отображение в режиме реального времени.
В этом уроке будет доработан график обновления в режиме реального времени, чтобы показать цены для более чем одной акции, что требует реализацию подписки более чем одного потребителя на наш реактивный поток цен.
В блоге вы найдете видео, показывающее пошаговый процесс и текстовое описание (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
Эта часть туториала включает следующие шаги:
В конце этой части туториала будет создано приложение JavaFX, которое подписывается на более чем одну цену из нашего сервиса Spring Boot и отображает каждый набор данных о ценах в режиме реального времени несколькими сериями на линейном графике.
Полный код этой части доступен на GitHub.
В этом уроке будет добавлен новый внутренний сервис на Kotlin, который отправляет цены через RSocket, протокол для реактивных потоков. Эта запись блога содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
К этому этапу серии уроков было успешно создано комплексное приложение, которое публикует цены из службы Kotlin Spring Boot и отображает их на линейном графике JavaFX. Оно использует протокол HTTP для отправки событий сервером. Однако, поскольку это реактивное приложение, мы можем выбрать протокол, который лучше подходит для потоковой передачи данных.
В этой части туториала будет создан сервис, который производит данные о ценах по протоколу RSocket.
Эта часть туториала включает следующие шаги:
В конце этой части туториала на порту 7000 будет запущен сервис выдачи цен, готовый к подключению клиента для получения цен на акции через RSocket.
Полный исходный код этой части доступен на GitHub.
В этом уроке мы добавим клиент RSocket, который может общаться с сервером RSocket, который мы создали в последнем уроке.
Эта запись блога содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
К настоящему времени у нас есть приложение, которое работает от начала до конца с помощью Spring's WebClient. В последнем уроке мы представили новый сервер RSocket, который в данный момент работает, и на этом уроке мы увидим, как создать клиент для подключения к нему.
Эта часть туториала включает следующие шаги:
В конце этой части туториала у нас будет сервер RSocket, который генерирует цены на акции, и клиент RSocket, который может подключиться к нему и посмотреть эти цены. На следующем уроке мы увидим, как перейти от использования WebClientStockClient к нашему новому RSocketStockClient.
Полный исходный код этой части доступен на GitHub.
В заключительной части туториала используется настройка Spring Profiles, чтобы приложение могло определить, какой из двух наших клиентов (события, отправленные сервером через WebClient или RSocket) использовать для подключения к нашей службе цен Kotlin Spring Boot.
Как обычно, эта запись блога содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
К этому этапу серии уроков у нас есть клиент RSocket, который позволяет нам подключаться к нашему серверу RSocket, мы хотим использовать эти возможности из нашего приложения JavaFX.
Эта часть туториала включает следующие шаги:
В конце этой части туториала у нас будет готово полное комплексное JavaFX приложение с линейным графиком, которое подписывается на реактивный поток цен из приложения Kotlin Spring Boot. Кроме того, приложение может быть настроено на получение этих цен либо через отправленные сервером события, либо через новый протокол RSocket.
Полный код доступен на GitHub:
Клиентский проект (stock-client и stock-ui-модули).
Серверный проект (приложение Kotlin Spring Boot)
Fully Reactive: Spring, Kotlin, and JavaFX Playing Together [Links]
Kotlin Microservice With Spring Boot Tutorial
Spring Reactive Programming in Java
18 декабря Trisha завершила публикацию на сайте dzone.com туториала про реактивный Spring Boot на основе указанного видео, в виде серии более коротких видеороликов с сопровождающим сообщением в блоге, объясняющих каждый из шагов более медленно и более подробно.
У меня появилась мысль перевести этот туториал на русский язык. Однако на мой запрос об этом Trisha ответила вежливым отказом:
«Let me check with my organisation. I would love to have it translated but we might have a prefered way to get things translated.»
Поэтому я решил ограничиться обзором этого туториала, включающего следующую серию уроков:
- Building a Kotlin REST Service
- A REST Client for Reactive Streams
- A JavaFX Spring Boot Application
- A JavaFX Line Chart
- Auto-Configuration for Shared Beans
- Displaying Reactive Data
- Subscribing Multiple Subscribers
- Kotlin RSocket Server
- Java RSocket Client
- Spring Profiles to Switch Clients
Туториал представляет собой серию уроков, в которых будет создано полноценное приложение Spring Boot с внутренним интерфейсом Kotlin, клиентом Java и пользовательским интерфейсом на JavaFX.
Часть 1. Создание REST-сервиса на Kotlin
Первая часть туториала описывает создание Spring Boot приложения на Kotlin, которое служит в качестве серверной части приложения. Будет создан реактивный REST сервис, к которому можно будет подключиться в следующих частях руководства.
Эта запись блога содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
Эта часть туториала включает следующие шаги:
- Создание проекта Spring Boot сервиса
- Структура Spring Boot проекта
- Создание REST-контроллера
- Создание класса данных для стоимости акций
- Генерирование и возвращение цены
- Запуск приложения
После выполнения указанных шагов в 1 части туториала будет создано простое приложение Kotlin Spring Boot, которое использует Reactive Streams для выдачи раз в секунду случайно сгенерированной цены акций.
Полный код 1 части туториала доступен на GitHub.
Часть 2. REST-клиент для реактивных потоков
Во 2 части туториала показано, как создается реактивный Java-клиент на Spring, который подключается к REST-сервису, транслирующему цены на акции раз в секунду. Этот клиент будет использоваться в последующих разделах руководства. При разработке будет использоваться процесс, основанный на TDD, для создания клиента и его тестирования.
Эта запись блога содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
Эта часть туториала включает следующие шаги:
- Создание проекта для клиента
- Создание класса клиента
- Создание теста клиента
- Создание метода базовых цен на клиенте
- Создание класса для хранения цен на акции
- Добавление в тест Assertions
- Подключите клиента к REST сервису
- Запуск интеграционного теста
- Более тщательные Assertions в интеграционном тесте
Тестирование реактивных приложений является непростым навыком, и безусловно есть гораздо лучшие способы сделать это, чем показано в этом простом примере. Тем не менее, был успешно использован интеграционный тест для определения API и функциональности клиента по ценам на акции.
Этот клиент подключается к конечной точке, которая генерирует отправленные сервером события и возвращает поток объектов StockPrice, которые могут использоваться другой службой. Как это сделать будет показано в следующих видеороликах этой серии.
Полный код 2 части доступен на GitHub.
Часть 3. Приложение JavaFX Spring Boot
Третья демонстрация показывает, как создать приложение JavaFX, которое запускается и управляется через Spring Boot с целью использования функций Spring, таких как инверсия управления (Inversion of Control) и внедрение зависимости (Dependency Injection), в нашем приложении JavaFX.
Эта запись блога также содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
Эта часть туториала включает следующие шаги:
- Настройка модуля
- Изменение класса Spring Boot Application
- Редактирование настроек Spring Boot
- Создание класса JavaFX приложения
- Настройка класса Spring Boot Application
- Публикация событий через контекст приложения
- Создание контекста приложения
- Закрытие контекста приложения
- Прослушивание событий приложения
После выполнения уканных шагов 3 части туториала будет создано главное окно JavaFX приложения (Stage — см. часть 2 Учебника по JavaFX), позволяющее настроить пользовательский интерфейс. Далее можно запустить наше приложение StockUIA и увидеть, что оно успешно запускается как приложение Spring Boot. Он также запускает процесс Java, который отображал бы пользовательский интерфейс, если бы мы его создали. На данный момент успешно создано JavaFX приложение, которое запускается и управляется с помощью Spring и позволяет использовать удобные функции любого приложения Spring.
Полный код 3 части туториала доступен на GitHub.
Часть 4. Линейная диаграмма на JavaFX
На этом шаге туториала мы увидим, как создать приложение на JavaFX, которое показывает линейную диаграмму. Это приложение использует Spring для важных функций, таких как инверсия управления.
Эта запись блога содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
Эта часть туториала включает следующие шаги:
- Создание сцены (Scene — см. часть 2 Учебника по JavaFX)
- Использование FXML
- Создание файла FXML
- Установка заголовка приложения
- Установка заголовка приложения из application.properties
- Получение из Spring контроллеров JavaFX
- Создание линейной диаграммы
После выполнения указанных шагов 4 части туториала будет создано JavaFX приложение. Запустив приложение, мы должны увидеть контур линейного графика, показанного в нашем окне, с числами для цены по оси Y и временем по оси X.
Было создано приложение JavaFX, интегрированное в Spring Boot, которое использует FXML для объявления того, что должно отображаться в представлении.
Полный код этой части туториала доступен на GitHub.
Часть 5. Автоконфигурация для общих бинов
В 5 уроке рассматривается, как использовать бины Spring из одного модуля в другом модуле с помощью автоконфигурации.
Эта запись блога также содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
На последнем уроке было создано приложение JavaFX Spring Boot, которое показывало пустую линейную диаграмму. В этом видео мы увидим, как настроить автоконфигурацию для Spring Beans, чтобы мы могли использовать bean-компоненты, определенные в модуле stock-client, в модуле stock-ui.
Эта часть туториала включает следующие шаги:
- Добавление зависимости от другого модуля
- Создание bean-компонента WebClientStockClient
- Включение автоконфигурации
Это довольно маленькая часть туториала, но она позволяет нам создать модули, которые могут быть повторно использованы различными приложениями Spring Boot. Теперь мы можем использовать клиент в ChartController для подключения к сервису цен и начать отображать цены в реальном времени на линейном графике.
Полный код этой части доступен на GitHub.
Часть 6. Отображение реактивных данных
В этом уроке рассматривается подключение JavaFX диаграммы к нашему сервису Kotlin Spring Boot для отображения цен в реальном времени. Эта запись блога содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
В четвертой части было создано приложение JavaFX Spring Boot, которое показывает пустую линейную диаграмму. В последнем выпуске (пятая часть) использован WebClientStockClient для подключения к службе цен. В этой части был получен линейный график, показывающий цены, поступающие от нашего сервиса Kotlin Spring Boot, в режиме реального времени.
Эта часть туториала включает следующие шаги:
- Настройка данных диаграммы
- Подписка на данные о ценах
- Отображение данных о ценах
- Запуск приложения
- Отображение имени символа
- Очистка кода
Немногими строками кода в этой части туториала было создано приложение JavaFX, которое использует SpringClient для подключения к сервису Spring Boot, подписывается на реактивный поток цен и рисует цены на линейном графике в режиме реального времени.
Полный код этой части доступен на GitHub.
Часть 7. Подписка нескольких подписчиков
В предыдущей части была реализована подписка линейной диаграммы JavaFX на цены из нашего сервиса Reactive Spring Boot и их отображение в режиме реального времени.
В этом уроке будет доработан график обновления в режиме реального времени, чтобы показать цены для более чем одной акции, что требует реализацию подписки более чем одного потребителя на наш реактивный поток цен.
В блоге вы найдете видео, показывающее пошаговый процесс и текстовое описание (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
Эта часть туториала включает следующие шаги:
- Реализуем подписчика цены
- Перенос обязанностей на подписчика цены
- Добавление второго подписчика
- Очистка кода
- Бонус Рефакторинг (нет в видео!)
В конце этой части туториала будет создано приложение JavaFX, которое подписывается на более чем одну цену из нашего сервиса Spring Boot и отображает каждый набор данных о ценах в режиме реального времени несколькими сериями на линейном графике.
Полный код этой части доступен на GitHub.
Часть 8. Kotlin RSocket Server
В этом уроке будет добавлен новый внутренний сервис на Kotlin, который отправляет цены через RSocket, протокол для реактивных потоков. Эта запись блога содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
К этому этапу серии уроков было успешно создано комплексное приложение, которое публикует цены из службы Kotlin Spring Boot и отображает их на линейном графике JavaFX. Оно использует протокол HTTP для отправки событий сервером. Однако, поскольку это реактивное приложение, мы можем выбрать протокол, который лучше подходит для потоковой передачи данных.
В этой части туториала будет создан сервис, который производит данные о ценах по протоколу RSocket.
Эта часть туториала включает следующие шаги:
- Создание контроллера RSocket
- Реализуем сервис цен
- Перенос общего кода в PriceService
- Сокращение дублирования кода
- Рефакторинг для уменьшения Boilerplate
- Настройка отображения сообщений
- Настройка сервера RSocket
В конце этой части туториала на порту 7000 будет запущен сервис выдачи цен, готовый к подключению клиента для получения цен на акции через RSocket.
Полный исходный код этой части доступен на GitHub.
Часть 9. Java RSocket клиент
В этом уроке мы добавим клиент RSocket, который может общаться с сервером RSocket, который мы создали в последнем уроке.
Эта запись блога содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
К настоящему времени у нас есть приложение, которое работает от начала до конца с помощью Spring's WebClient. В последнем уроке мы представили новый сервер RSocket, который в данный момент работает, и на этом уроке мы увидим, как создать клиент для подключения к нему.
Эта часть туториала включает следующие шаги:
- Создание интеграционного теста
- Создание RSocket Stock Client
- Представляем интерфейс StockClient
- Реализация RSocket Connection
- Создание RSocketRequester
- Проходной интеграционный тест
- Тестирование с помощью StepVerifier
- Добавление стратегий отката и обработки ошибок
В конце этой части туториала у нас будет сервер RSocket, который генерирует цены на акции, и клиент RSocket, который может подключиться к нему и посмотреть эти цены. На следующем уроке мы увидим, как перейти от использования WebClientStockClient к нашему новому RSocketStockClient.
Полный исходный код этой части доступен на GitHub.
Часть 10. Spring профили для переключения клиентов
В заключительной части туториала используется настройка Spring Profiles, чтобы приложение могло определить, какой из двух наших клиентов (события, отправленные сервером через WebClient или RSocket) использовать для подключения к нашей службе цен Kotlin Spring Boot.
Как обычно, эта запись блога содержит видео, показывающее пошаговый процесс и текстовое руководство (адаптированное из стенограммы видео) для тех, кто предпочитает письменный формат.
К этому этапу серии уроков у нас есть клиент RSocket, который позволяет нам подключаться к нашему серверу RSocket, мы хотим использовать эти возможности из нашего приложения JavaFX.
Эта часть туториала включает следующие шаги:
- Создание бина RSocketStockClient
- Выбор используемого бина
- Выбор активного профиля
- Ведение журнала (Logging) для отладки
- Получение цен через RSocket
В конце этой части туториала у нас будет готово полное комплексное JavaFX приложение с линейным графиком, которое подписывается на реактивный поток цен из приложения Kotlin Spring Boot. Кроме того, приложение может быть настроено на получение этих цен либо через отправленные сервером события, либо через новый протокол RSocket.
Полный код доступен на GitHub:
Клиентский проект (stock-client и stock-ui-модули).
Серверный проект (приложение Kotlin Spring Boot)
Дополнительное чтение
Fully Reactive: Spring, Kotlin, and JavaFX Playing Together [Links]
Kotlin Microservice With Spring Boot Tutorial
Spring Reactive Programming in Java