Уголок сельского джависта
Open in Telegram
Пишу на Java и Kotlin, иногда полную ерунду, люто топлю за Spring и чистую архитектуру. Консультирую. Чат: https://t.me/shurik_codes_group
Show more2 044
Subscribers
No data24 hours
+37 days
+1930 days
Posts Archive
01. Разработка веб-приложений со Spring - Разработка проектов со Spring
В первом ролике цикла я демонстрирую разработку классического веб-приложения со Spring WebMVC, Thymeleaf и Jakarta Bean Validation. В ролике демонстрируется несколько способов создания нового проекта на основе Spring Boot, вкратце описывается многоуровневая архитектура и шаблон проектирования MVC, создание базовых компонентов приложения, валидация данных и интернационализация. Кроме этого продемонстрировано несколько способов запуска приложения на основе Spring Boot.
В цикле роликов "Разработка проектов со Spring" я рассказываю на простых примерах о процессе разработки веб-приложений и REST-сервисов на языке программирования Java с использованием экосистемы Spring. Данный цикл охватывает разработку классических и реактивных проектов, вопросы их сопровождения, такие как документация и мониториг, адаптацию их к облачной инфраструктуре и процесс их развёртывания в Docker и Kubernetes.
Уже завтра!)
SC24EP22 Helm
- Введение в Helm
- Написание шаблонов для сервисов
- Развёртывание сервисов
- Использование готовых шаблонов для инфраструктуры
Изначально в планах была запись 25 роликов, но два ролика я объединил в один (№19 Docker) и ещё два просто вычеркнул из цикла, так как они в целом не связаны с основной темой. Вполне возможно, что ещё два ролика (№20 Запуск сервисов в Kubernetes и №21 Kubernetes без Spring Cloud) тоже будут объединены, всё зависит от их продолжительности. Будет ещё один ролик - вводный, и, возможно, ролик про "послевкусие". Начать публиковать ролики я планирую уже в следующий понедельник - 4 марта, если ничто не помешает.
И теперь я могу рассказать о составе цикла! Выглядит он следующим образом:
Эпизоды 01-05: Веб-приложения на основе Spring WebMVC
SC24EP01 Разработка веб-приложения со Spring WebMVC
- Введение в Spring Boot и Spring Framework
- Разработка простого веб-приложения с Spring WebMVC и Thymeleaf
- Валидация данных с Jakarta Bean Validation
- Интернационализация
SС24EP02 Разработка REST-сервисов со Spring WebMVC
- Разработка REST-сервиса
- Использование RestClient
SC24EP03 Работа с реляционными базами данных
- Введение в JPA, Hibernate и Spring Data
- Описание схемы БД в Flyway
- Написание запросов к БД в Spring Data JPA
SC24EP04 Аутентификация и авторизация в веб-приложениях
- Введение в Spring Security
- Форма входа и настройка источника данных о пользователях
- Применение OAuth 2.0 и OIDC
SC24EP05 Тестирование веб-приложений
- Модульные тесты с JUnit 5 и Mockito
- Интеграционные тесты с MockMvc, Testcontainers и WireMock
Эпизоды 06-10: Реактивные веб-приложения на основе Spring Webflux
SC24EP06 Разработка реактивного веб-приложения со Spring Webflux
- Введение в реактивное програмиирование, Spring Webflux и Project Reactor
- Разработка реактивного веб-приложения со Spring Webflux и Thymeleaf
- Валидация данных с Jakarta Bean Validation
- Интернационализация
SС24EP07 Разработка реактивных REST-сервисов со Spring Webflux
- Разработка REST-сервисов
- Использование WebClient
SC24EP08 Работа с реактивными базами данных
- Введение в MongoDB и Spring Data
- Написание запросов к БД в Spring Data MongoDB
SC24EP09 Аутентификация и авторизация в реактивных веб-приложениях
- Введение в Spring Security Reactive
- Применение OAuth 2.0 и OIDC
SC24EP10 Тестирование реактивных веб-приложений
- Модульные тесты с JUnit 5, Mockito и Project Reactor
- Интеграционные тесты с WebTestClient, Testcontainers и WireMock
SC24EP11 Документирование REST-сервисов
- Применение Spring RestDocs
- Применение Springdoc
- Введение в OpenAPI и Swagger
Эпизоды 12-15: Мониторинг и администрирование приложений
SC24EP12 Spring Boot Admin
- Создание и настройка сервиса Spring Boot Admin
- Настройка клиентов Spring Boot Admin
SC24EP13 Сбор метрик с Actuator, Micrometer и VictoriaMetrics
- Настройка экспорта метрик с Actuator и Mictometer
- Сборка метрик с VictoriaMetrics
- Визуализация метрик в Grafana
SC24EP14 Сбор логов с Logback и Grafana Loki
- Настройка сборки логов в Grafana Loki
- Визуализация логов в Grafana
SC24EP15 Сбор трассировок в Grafana Tempo
- Введение в трассировки
- Настройка сборки трассировок в Micrometer Metrics Tracing и Grafana Tempo
- Анализ трассировок в Grafana
Эпизоды 16-18: Spring Cloud
SC24EP16 Реестр сервисов с Spring Cloud Netflix Eureka
- Создание сервиса Spring Cloud Netflix Eureka
- Регистрация сервисов в Spring Cloud Netflix Eureka
- Использование балансировки нагрузки на стороне клиента
- Использование поиска сервисов в Spring Boot Admin
SC24EP17 Централизованное хранение конфигураций со Spring Cloud Config
- Создание сервиса Spring Cloud Config
- Хранение конфигов в git
- Настройка приложения для использования Spring Cloud Config
SC24EP18 Единая точка входа со Spring Cloud Gateway
- Создание сервиса Spring Cloud Gateway
- Настройка маршрутов
- Введенеи в nip.io
SC24EP19 Запуск сервисов в Docker и Docker Compose
- Написание универсального Dockerfile для модулей проекта
- Разврёртывание сервисов в Docker
- Описание и развёртывание стека в Docker Compose
SC24EP20 Запуск сервисов в Kubernetes
- Введение в Kubernetes
- Развёртывание сервисов в Kubernetes
SC24EP21 Kubernetes без Spring Cloud
- Ingress вместо Spring Cloud Gateway
- ConfigMap вместо Spring Cloud Config
- Service вместо Spring Cloud Netflix Eureka
SC24EP22 Helm
- Введение в Helm
- Написание шаблонов для сервисов
- Развёртывание сервисов
- Использование г
Всем привет! 👋
У меня для вас хорошие новости! Запись цикла роликов о разработке проектов со Spring подходит к концу - на данный момент записано 19 и смонтировано 8 роликов из 22. Не всё идёт по плану, да и качество материала мне не всегда нравится, но для перового захода, надеюсь, будет неплохо.
⌨️ Всем привет! Ну вот у меня и получилось записать очередной ролик, январь получился достаточно загруженным, поэтому получилось только в феврале, да и ролик мне не давался. Работа над большим циклом материалов про Spring тоже идёт - там уже записано 5 роликов из 23 запланированных, и пока что я вписываюсь в свои планы, так что в уже марте, скорее всего, я начну его публиковать.
Client, Resource Server, Login - Spring Security OAuth 2.0
В одном из предыдущих роликов я рассказал теорию об OAuth 2.0 и OIDC, а на этот раз предлагаю перейти к практике. Spring Security реализует практически полноценную поддержку протокола авторизации OAuth 2.0 и его расширения аутентификации OpenID Connect (OIDC), и с минимальными изменениями в своём проекте вы можете внедрить поддержку этих протоколов. В этом ролике я рассматриваю возможность применения Spring Security OAuth 2.0 для реализации сервера ресурсов, клиента и логина в веб-приложениях на основе Spring WebMVC и Spring Webflux. Так же в качестве сервера авторизации снова будет рассмотрен Keycloak, а так же процесс его настройки.
Репозиторий проекта: https://github.com/alex-kosarev/spring-security-oauth
▶️ Смотреть в VK
▶️ Смотреть в Boosty
▶️ Смотреть в Дзене
▶️ Смотреть на Rutube
▶️ Смотреть на YouTube
#java #spring #security #oauth #oidc #reactive #webflux #webmvc
🌐 Сайт 🌐 Паблик в VK 🌐 Канал в Telegram
💰 Стать доном 💵 Донаты в Boosty 💸 Донаты в Tinkoff
❗️Всех с прошедшими праздниками!
Хочу поделиться творческими планами на ближайшее время.
Ещё в конце прошлого года у меня появилось запланировать написание цикла материалов о разработке проектов с экосистемой Spring, но в отличие от серии "Spring по верхам", с которой я начинал своё творчество, есть желание копнуть и вглубь, и вширь. Сейчас я как раз занимаюсь проработкой кода, который будет демонстрироваться в роликах и статьях, коих в цикле будет не меньше 20, а охват тем будет начинаться с создания проекта и заканчиваться развёртыванием проекта в Kubernetes!
Но эти ролики я начну публиковать только после записи и монтажа всего цикла, так как хочу быть уверенным в том, что у меня всё получится. По планам я хочу начать публиковать ролики в начале марта (но это не точно).
Да, такие амбициозные планы немного вносят коррективы в процесс написания самостоятельных материалов, поэтому на прошлой неделе ролика не было. Будет ли какой-нибудь ролик на этой неделе я тоже не знаю, но хочу что-нибудь рассказать.
Actuator, Micrometer, Victoria Metrics, Grafana - Мониторинг Spring Boot
Мониторинг состояния сервисов является важной составляющей процесса сопровождения программного обеспечения. В этом ролике я демонстрирую, как при помощи Spring Boot Actuator и Micrometer можно экспортировать метрики в VictoriaMetrics, а затем визуализировать их в Grafana. Кроме этого я рассматриваю несколько простых примеров написания собственных метрик.
▶️ Смотреть в VK
▶️ Смотреть в Boosty
▶️ Смотреть в Дзене
▶️ Смотреть на Rutube
▶️ Смотреть на YouTube
#java #spring #springboot #micrometer #grafana #prometheus #victoriametrics
🌐 Сайт 🌐 Паблик в VK 🌐 Канал в Telegram
💰 Стать доном 💵 Донаты в Boosty 💸 Донаты в Tinkoff
Основы OAuth 2.0 и OpenID Connect
При необходимости передачи данных пользователя сторонним приложениям надо как-то решать вопрос доступа - как предоставлять доступ к данным, не передавая стороннему приложения учётные данные пользователя - логин, пароль и т.д. И основным способом решения этого вопроса является фреймворк авторизации OAuth, который добавляет в эту схему сервер авторизации, а так же описывает сценарии взаимодействия между участниками для безопасного предоставления доступа сторонним приложениям к пользовательским данным.
OpenID Connect - это слой идентификации и аутентификации, разработанный на основе OAuth и совместимый с ним. OIDC вводит идентификационный токен (ID Token), специфичные области применения (scope) ключей доступа, JWT и дополнительные эндпоинты. Спецификация OAuth довольно абстрактна, а OIDC - более конкретна, поэтому я в данном ролике рассматриваю OAuth именно на примере OIDC.
В этом ролике я рассказываю об основах OAuth и OIDC: ролях, ключах доступа, клиентах, областях применения ключей доступа и способах предоставления доступа к защищённым ресурсам.
▶️ Смотреть в VK
▶️ Смотреть в Boosty
▶️ Смотреть в Дзене
▶️ Смотреть на Rutube
▶️ Смотреть на YouTube
#oauth #oidc #openidconnect
🌐 Сайт 🌐 Паблик в VK 🌐 Канал в Telegram
💰 Стать доном 💵 Донаты в Boosty 💸 Донаты в Tinkoff
Всем привет! На этой неделе ролика не будет, ибо много работы. Но, тем не менее, для следующего ролика я активно готовлю материал. А будет он, как я и обещал, про OAuth 2.0 и OIDC. А пока можете посмотреть ролик про меня любимого, который сняли коллеги из PR-отдела, за что им большое спасибо!
Мой год видеоблоггинга - ожидания, результаты, планы #влог #блог
Всем привет! Сегодня 8 декабря, прошёл ровно год с момента публикации первого ролика из серии "Spring по верхам", с которого я начал целенаправленно и систематически записывать и публиковать ролики. И по этому поводу я решил подвести итоги творческого года, среди которых более 100 000 просмотров, почти 4 000 подписчиков и очень тёплый приём публикой. Всем зрителям большое спасибо за внимание!
▶️ Смотреть в VK
▶️ Смотреть в Boosty
▶️ Смотреть в Дзене
▶️ Смотреть на Rutube
▶️ Смотреть на YouTube
🌐 Сайт 🌐 Паблик в VK 🌐 Канал в Telegram
💰 Стать доном 💵 Донаты в Boosty 💸 Донаты в Tinkoff
Гексагональная архитектура и микросервисы
Проектирование и разработка архитектуры программного обеспечения является неотъемлемой и крайне важной составляющей процесса разработки. Гибкая и хорошо проработанная архитектура значительно упрощает процесс разработки как монолитных проектов, так и проектов с микросервисным подходом. А в идеальных условиях архитектура должна позволять получить из одной кодовой базы как модульный монолит, так и набор микросервисов.
На мой взгляд хорошей отправной точкой может стать гексагональная архитектура, которая является частной реализацией идей чистой архитектуры. В этом ролике я рассматриваю основные элементы гексагональной архитектуры, а так же демонстрирую её применение в процессе разработки простого сервиса, модульного монолита и набора микросервисов.
Репозиторий проекта: https://github.com/alex-kosarev/selmag-parent
▶️ Смотреть в VK
▶️ Смотреть в Boosty
▶️ Смотреть в Дзене
▶️ Смотреть на Rutube
▶️ Смотреть на YouTube
▶️ Смотреть на Nuum
#java #hexagonal #softwarearchitecture #microservices #monolith #modularmonolith
🌐 Сайт 🌐 Паблик в VK 🌐 Канал в Telegram
💰 Стать доном 💵 Донаты в Boosty 💸 Донаты в Tinkoff
Access Control List (ACL) - Spring Security в деталях
Основными подходами к реализации авторизации в информационных системах являются RBAC и ABAC, однако их возможностей не всегда достаточно для обеспечения гибкого управления доступом, особенно в крупных корпоративных системах. В этом случае хорошей альтернативой может стать авторизация на основе списка правил доступа (Access Control List; ACL). Spring Security предоставляет собственную реализацию ACL, работа с которой будет продемонстрирована в этом ролике.
Да, Spring Security ACL не отличается хорошей и детальной документацией, и более того, библиотека выглядит заброшенной, а в планах разработчиков - избавиться от неё в Spring Security 7, но я всё же предлагаю ознакомиться с данной библиотекой.
Репозиторий с примерами кода: https://github.com/alex-kosarev/sandbox-spring-security-acl
▶️ Смотреть в VK
▶️ Смотреть в Boosty
▶️ Смотреть в Дзене
▶️ Смотреть на Rutube
▶️ Смотреть на YouTube
#java #spring #springsecurity #acl
🌐 Сайт 🌐 Паблик в VK 🌐 Канал в Telegram
💰 Стать доном 💵 Донаты в Boosty 💸 Донаты в Tinkoff
Хотел записать видео про Spring Security ACL, но данный модуль, вполне возможно, будет удалён из Spring Security 7.0, ставьте палец вверх, если надо писать ролик про ACL
Авторизация - Spring Security в деталях
Представить себе информационную систему, в которой все пользователи имеют одинаковые неограниченные права практически невозможно - в абсолютном большинстве информационных систем пользователи обладают разными правами, в зависимости от выполняемых задач. Авторизация обеспечивает предоставление полномочий пользователям, а так же проверку их наличия у пользователя при необходимости. В этом ролике я постарался рассказать, что такое авторизация, какие основные способы её реализации существуют, а так же рассмотрел применение Spring Security для обеспечения авторизованного доступа к HTTP-эндпоинтам и методам.
▶️ Смотреть в VK
▶️ Смотреть в Boosty
▶️ Смотреть в Дзене
▶️ Смотреть в Rutube
▶️ Смотреть в YouTube
#java #spring #springsecurity #abac #rbac #authorization #авторизация
🌐 Сайт 🌐 Паблик в VK 🌐 Канал в Telegram
💰 Стать доном 💵 Донаты в Boosty 💸 Донаты в Tinkoff
Java нативно - GraalVM Native Image
Ещё с самого начала моей карьеры разработчика программного обеспечения на платформе Java меня волновал вопрос: "А можно ли компилировать Java-код в нативные исполняемые файлы?", и я был далеко не один такой. И инструменты для компиляции Java-кода в нативные исполняемые файлы и библиотеки существовали, например тот же GNU C compiler for Java (gcj), хоть и с некоторыми нюансами.
Но меня этот вопрос как-то не сильно волновал, так что дальше чтения теории я не ушёл, да и как-то забыл про это.
Однако в 2019 году корпорация Oracle явила общественности новый проект - GraalVM, являющийся по сути JDK с компилятором Graal вместо HotSpot C1/C2 и набором дополнительных инструментов, одним из которых является native-image - инструмент для компиляции нативных исполняемых файлов и библиотек из Java-байткода.
В этом ролике я рассмотрю три сценария использование native-image для компиляции Java-байткода в исполняемые файлы:
- Компиляция одного класса
- Компиляция простого проекта в Maven и Gradle
- Компиляция проекта на основе Spring Boot в Maven и Gradle
Кроме этого в ролике рассматривается компиляция со статическим связыванием (musl + GCC 10 и zlib 1.3) и запуск приложений в Docker.
▶️ Смотреть в VK
▶️ Смотреть в Boosty
▶️ Смотреть в Дзене
▶️ Смотреть на Rutube
▶️ Смотреть на YouTube
#java #graal #graalvm #nativeimage #springboot #docker #maven #gradle
🌐 Сайт 🌐 Паблик в VK 🌐 Канал в Telegram
💰 Стать доном 💵 Донаты в Boosty 💸 Донаты в Tinkoff
Spring Boot в контейнерах
Разработку и развёртывание современного серверного программного обеспечения сложно представить себе без использования инструментов контейнеризации, ну, а Docker и вовсе, наверняка, на слуху у подавляющего большинства разработчиков.
Упаковка в контейнеры проектов на платформе Java в целом задача не сложная, но имеет свои нюансы. В этой статье я рассмотрю следующие сценарии упаковки приложения на основе Spring Boot в OCI-образ:
- Локальная сборка проекта с последующей упаковкой в Docker-образ
- Полный цикл сборки проекта в Docker с помощью Dockerfile
- Сборка образа при помощи Spring Boot Plugin и Paketo Buildpacks
Все сценарии будут продемонстрированы с использованием Maven.
📖 Читать на сайте
📖 Читать в VK
📖 Читать в Telegraph
#java #spring #springboot #docker #maven
🌐 Сайт 🌐 Паблик в VK 🌐 Канал в Telegram
💰 Стать доном 💵 Донаты в Boosty 💸 Донаты в Tinkoff
Вдогонку к предыдущему посту заготовка статьи про то, как собирать Docker-образы приложений на основе Spring Boot с использованием Gradle: https://github.com/alex-kosarev/spring-boot-docker-with-gradle
Обе статьи опубликую на этой неделе, но не думаю, что они будут кардинально отличаться от заготовок.
Когда будет следующий ролик сказать не могу - много работы и осенний простудифилис не дают готовить и записывать.
#java #docker #springboot #gradle
По многочисленным заявкам трудящихся и учащихся выкладываю репу: https://github.com/alex-kosarev/spring-boot-docker-with-maven там же заготовка статьи, можете читать, информации даже больше, чем в ролике.
Spring Boot в контейнерах
Разработку и развёртывание современного серверного программного обеспечения сложно представить себе без использования инструментов контейнеризации, ну, а Docker и вовсе, наверняка, на слуху у подавляющего большинства разработчиков.
Упаковка в контейнеры проектов на платформе Java в целом задача не сложная, но имеет свои нюансы. В этом ролике я рассмотрю следующие сценарии упаковки приложения на основе Spring Boot в OCI-образ:
- Локальная сборка проекта с последующей упаковкой в Docker-образ
- Полный цикл сборки проекта в Docker с помощью Dockerfile
- Сборка образа при помощи Spring Boot Plugin и Paketo Buildpacks
Все сценарии будут продемонстрированы с использованием Maven и Gradle.
▶️ Смотреть в VK
▶️ Смотреть в Boosty
▶️ Смотреть в Дзене
▶️ Смотреть на Rutube
▶️ Смотреть на YouTube
#java #spring #springboot #docker #gradle #maven
🌐 Сайт 🌐 Паблик в VK 🌐 Канал в Telegram
💰 Стать доном 💵 Донаты в Boosty 💸 Донаты в Tinkoff
