home.social

#spring_boot — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #spring_boot, aggregated by home.social.

  1. Открытое ТЗ для пет-проекта: сервис поиска пропавших людей

    Долго думал, в каком формате это написать, в итоге решил по-простому - рассказать, что есть, и кому это может пригодиться. Мы с коллегой делали выпускной проект для курсов CloudJava и CloudJava K8S. Это техзадание на бэкенд распределенной системы - четыре микросервиса, Gateway, обвязка. Изначально оно было доступно только участникам курсов, теперь решили открыть бесплатно, без регистрации или “оставьте email”. Просто страница с текстом и тремя OpenAPI-спеками. Ссылки сразу, чтобы не листать: Описание проекта: javaops.ru/view/cloudjava3 Само ТЗ: javaops.ru/view/cloudjava3/res

    habr.com/ru/articles/1034426/

    #java #spring_boot #kafka #postgresql #пет_проект

  2. Открытое ТЗ для пет-проекта: сервис поиска пропавших людей

    Долго думал, в каком формате это написать, в итоге решил по-простому - рассказать, что есть, и кому это может пригодиться. Мы с коллегой делали выпускной проект для курсов CloudJava и CloudJava K8S. Это техзадание на бэкенд распределенной системы - четыре микросервиса, Gateway, обвязка. Изначально оно было доступно только участникам курсов, теперь решили открыть бесплатно, без регистрации или “оставьте email”. Просто страница с текстом и тремя OpenAPI-спеками. Ссылки сразу, чтобы не листать: Описание проекта: javaops.ru/view/cloudjava3 Само ТЗ: javaops.ru/view/cloudjava3/res

    habr.com/ru/articles/1034426/

    #java #spring_boot #kafka #postgresql #пет_проект

  3. Открытое ТЗ для пет-проекта: сервис поиска пропавших людей

    Долго думал, в каком формате это написать, в итоге решил по-простому - рассказать, что есть, и кому это может пригодиться. Мы с коллегой делали выпускной проект для курсов CloudJava и CloudJava K8S. Это техзадание на бэкенд распределенной системы - четыре микросервиса, Gateway, обвязка. Изначально оно было доступно только участникам курсов, теперь решили открыть бесплатно, без регистрации или “оставьте email”. Просто страница с текстом и тремя OpenAPI-спеками. Ссылки сразу, чтобы не листать: Описание проекта: javaops.ru/view/cloudjava3 Само ТЗ: javaops.ru/view/cloudjava3/res

    habr.com/ru/articles/1034426/

    #java #spring_boot #kafka #postgresql #пет_проект

  4. Открытое ТЗ для пет-проекта: сервис поиска пропавших людей

    Долго думал, в каком формате это написать, в итоге решил по-простому - рассказать, что есть, и кому это может пригодиться. Мы с коллегой делали выпускной проект для курсов CloudJava и CloudJava K8S. Это техзадание на бэкенд распределенной системы - четыре микросервиса, Gateway, обвязка. Изначально оно было доступно только участникам курсов, теперь решили открыть бесплатно, без регистрации или “оставьте email”. Просто страница с текстом и тремя OpenAPI-спеками. Ссылки сразу, чтобы не листать: Описание проекта: javaops.ru/view/cloudjava3 Само ТЗ: javaops.ru/view/cloudjava3/res

    habr.com/ru/articles/1034426/

    #java #spring_boot #kafka #postgresql #пет_проект

  5. [Перевод] Команда Spring о Spring Framework 7 и Spring Boot 4

    В новом переводе от команды Spring АйО рассмотрим выход Spring Boot 4 и Spring Framework 7. InfoQ взяли интервью у core команды Spring с целью узнать, куда движется самая популярная в Java экосистема. Spring Boot 4 модуляризировал автоконфигурацию. Теперь при запуске проверяется меньше классов в classpath, а uber-jar будет более компактным: будут подключаться только нужные модули. Параллельно Spring Boot 4 переходит на Jackson 3, но добавлен модуль совместимости с Jackson 2, потому что экосистема ещё догоняет. Spring Framework 7 тащит core resilience в ядро: RetryTemplate , @Retryable и @ConcurrencyLimit доступны без отдельной зависимости. @Retryable работает и с реактивными типами (через Retry из Project Reactor); для обычных вызовов используется RetryTemplate с политикой retry/backoff. @ConcurrencyLimit помогает ограничивать доступ к ресурсу, что особенно полезно с Virtual Threads.

    habr.com/ru/companies/spring_a

    #java #kotlin #spring #spring_boot #spring_framework #springboot #spring_data #ai #agents

  6. Оптимизируем JDBC connection pool HikariCP. Прод, ресурсы и типовые ошибки

    Продолжаем разбирать HikariCP: как выбирать размер пула, что учитывать в Kubernetes и при нескольких сервисах, почему большой maximumPoolSize не всегда помогает, какие настройки стоит пересмотреть перед продом и какие ошибки чаще всего приводят к проблемам с базой.

    habr.com/ru/articles/1031770/

    #HikariCP #JDBC #connection_pool #PostgreSQL #Spring_Boot #JVM #Java #Scala #Kubernetes #пул_соединений

  7. Оптимизируем JDBC connection pool HikariCP. Прод, ресурсы и типовые ошибки

    Продолжаем разбирать HikariCP: как выбирать размер пула, что учитывать в Kubernetes и при нескольких сервисах, почему большой maximumPoolSize не всегда помогает, какие настройки стоит пересмотреть перед продом и какие ошибки чаще всего приводят к проблемам с базой.

    habr.com/ru/articles/1031770/

    #HikariCP #JDBC #connection_pool #PostgreSQL #Spring_Boot #JVM #Java #Scala #Kubernetes #пул_соединений

  8. Оптимизируем JDBC connection pool HikariCP. Прод, ресурсы и типовые ошибки

    Продолжаем разбирать HikariCP: как выбирать размер пула, что учитывать в Kubernetes и при нескольких сервисах, почему большой maximumPoolSize не всегда помогает, какие настройки стоит пересмотреть перед продом и какие ошибки чаще всего приводят к проблемам с базой.

    habr.com/ru/articles/1031770/

    #HikariCP #JDBC #connection_pool #PostgreSQL #Spring_Boot #JVM #Java #Scala #Kubernetes #пул_соединений

  9. Ollama Cloud Client: когда модели слишком тяжелы для локального запуска

    Привет. Меня зовут Николай Пискунов, я руководитель направления Big Data и эксперт курса Cloud DevSecOps по безопасной разработке от Академии вАЙТИ

    habr.com/ru/companies/beeline_

    #ollama #llm #spring_boot #java #react #typescript #sse #server_sent_events #streaming #ai_api

  10. Ollama Cloud Client: когда модели слишком тяжелы для локального запуска

    Привет. Меня зовут Николай Пискунов, я руководитель направления Big Data и эксперт курса Cloud DevSecOps по безопасной разработке от Академии вАЙТИ

    habr.com/ru/companies/beeline_

    #ollama #llm #spring_boot #java #react #typescript #sse #server_sent_events #streaming #ai_api

  11. Ollama Cloud Client: когда модели слишком тяжелы для локального запуска

    Привет. Меня зовут Николай Пискунов, я руководитель направления Big Data и эксперт курса Cloud DevSecOps по безопасной разработке от Академии вАЙТИ

    habr.com/ru/companies/beeline_

    #ollama #llm #spring_boot #java #react #typescript #sse #server_sent_events #streaming #ai_api

  12. Ollama Cloud Client: когда модели слишком тяжелы для локального запуска

    Привет. Меня зовут Николай Пискунов, я руководитель направления Big Data и эксперт курса Cloud DevSecOps по безопасной разработке от Академии вАЙТИ

    habr.com/ru/companies/beeline_

    #ollama #llm #spring_boot #java #react #typescript #sse #server_sent_events #streaming #ai_api

  13. Оптимизируем JDBC connection pool: гайд по HikariCP 2026

    HikariCP давно стал де-факто стандартом JDBC connection pooling в JVM-проектах. Но подключить его мало: важно правильно выбрать размер пула, таймауты, maxLifetime, keepaliveTime, leak detection и метрики. Разбираем, как настроить HikariCP для Java, Kotlin, Scala и Spring Boot, какие ошибки чаще всего встречаются в проде и почему maximumPoolSize нельзя просто копировать из соседнего сервиса.

    habr.com/ru/articles/1030880/

    #HikariCP #JDBC #connection_pool #PostgreSQL #Spring_Boot #Java #Kotlin #Scala #пул_соединений #настройка_базы_данных

  14. Неизменяемая архитектура. Практическая проверка кодом. Проверка работы с бизнес-процессом

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

    habr.com/ru/articles/1031078/

    #неизменяемая_архиектура #spring_boot #h2 #бизнеспроцессы

  15. Неизменяемая архитектура. Практическая проверка кодом. Проверка работы с бизнес-процессом

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

    habr.com/ru/articles/1031078/

    #неизменяемая_архиектура #spring_boot #h2 #бизнеспроцессы

  16. Неизменяемая архитектура. Практическая проверка кодом. Проверка работы с бизнес-процессом

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

    habr.com/ru/articles/1031078/

    #неизменяемая_архиектура #spring_boot #h2 #бизнеспроцессы

  17. Неизменяемая архитектура. Практическая проверка кодом. Проверка работы с бизнес-процессом

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

    habr.com/ru/articles/1031078/

    #неизменяемая_архиектура #spring_boot #h2 #бизнеспроцессы

  18. Как я написал E2EE-мессенджер на Spring Boot и WebCrypto — и почему сервер не видит сообщения

    Привет, Хабр. Я Java-разработчик и в основном работаю с backend: Spring Boot, базы данных, интеграции, авторизация, WebSocket — всё то, что обычно находится за интерфейсом. В какой-то момент я поймал себя на мысли: я каждый день пользуюсь мессенджерами, но плохо понимаю, как они устроены внутри. Окей, JWT, WebSocket, PostgreSQL, Redis — это понятно. Но что технически означает фраза “end-to-end encryption”? Как сервер доставляет сообщения, если он не должен их читать? Где живут ключи? Что хранится в базе? Что происходит, если у пользователя два устройства? Решил разобраться через практику. Написал мессенджер с нуля. Назвал Chaos Messenger. Сразу честно: криптографическую часть я изучал вместе с Claude и ChatGPT — читал спецификации X3DH и Double Ratchet, разбирал примеры, задавал вопросы, пока не сложилась цельная картина. Frontend тоже делался с активной помощью ChatGPT: я backend-разработчик, React для меня не основная среда. Но архитектура, backend, интеграция WebCrypto, модель конвертов, хранение сообщений и принципиальные решения — мои. Для меня AI здесь был не заменой понимания, а инструментом — примерно как документация, Stack Overflow и ревью коллег. Без понимания threat model и архитектуры такой проект всё равно не собрать. В статье расскажу, как работает E2EE изнутри: как устанавливается сессия через X3DH, как каждое сообщение получает отдельный ключ через Symmetric Ratchet, почему сервер хранит только зашифрованные конверты, и какие ошибки я допустил по дороге. Стек: Spring Boot 3, React 18, WebCrypto API, PostgreSQL, Redis, WebSocket/STOMP, Prometheus, Grafana.

    habr.com/ru/articles/1030854/

    #E2EE #мессенджер #Spring_Boot #X3DH #криптография #WebSocket #Java #шифрование #Signal_Protocol #WebCrypto

  19. SDD на масштабе FullStack-приложения: 17 спринтов, две конституции, три чата

    В первой статье я писал про SDD на примере одного вечера. После чего прошёл 17 спринтов SDD на FullStack-приложении: B2C-трекер привычек и целей, два репозитория, 251 тест на бэке и 77 на фронте, релиз в продакшен. Здесь — что не дало мне потерять контроль на этом масштабе.

    habr.com/ru/articles/1027886/

    #specdriven_development #spec_kit #claude_code #aiassisted_development #fullstack #java #spring_boot #react #методология #architecture

  20. От регулярок к ANTLR4: три архитектурных решения на парсере бизнес-формул

    Три года назад я писал свой первый коммерческий парсер на ANTLR4 — для бизнес-формул аналитической системы. Несколько лет спустя я бы сделал его иначе в трёх центральных местах. Разбираю каждое: левая рекурсия для приоритета операторов, Listener vs Visitor, и почему getText() для повторного парсинга — антипаттерн.

    habr.com/ru/articles/1027742/

    #antlr #antlr4 #парсер #parser #грамматика #dsl #java #spring_boot #compiler #code_generation

  21. Telegram-бот за вечер через Spec Kit: что AI-ассистированная разработка сделала с моим инженерным процессом

    Я Java-разработчик: пишу на Java 5 лет. Последний месяц собираю портфолио через Spec-Driven Development — связку Spec Kit и Claude Code. Первый проект — Telegram-бот для задач. С шести вечера до двух ночи одного вторника я прошёл полный SDD-цикл от конституции до MVP с шестью командами. Восемь часов. Один вечер. Рабочий продукт. Но главное — что-то сдвинулось в моём инженерном процессе.

    habr.com/ru/articles/1027250/

    #specdriven_development #spec_kit #claude_code #ai_coding #aiassisted_development #telegram_bot #spring_boot #java #разработка #методология

  22. Легаси и минус 99% времени: пошаговый разбор оптимизации

    Всем привет! Меня зовут Михаил, я главный эксперт в ОТП Банке. Думаю, многие из вас сталкивались с легаси, которое нужно дорабатывать и оптимизировать. Сегодня хочу поделиться реальным кейсом как мы ускорили отправку данных в смежную систему. Разберем всё по шагам, с замерами производительности. Поехали! Смотрим вместе

    habr.com/ru/articles/1024814/

    #java #kotlin #spring #spring_boot #оптимизация #оптимизация_кода #многопоточность #postgresql #hibernate #legacy

  23. Большая распаковка Java 26. Что этот релиз значит для нас всех?

    Java 26 вышла 18 марта. В релизе 10 JEP-ов: Structured Concurrency получила шестое превью и API наконец стабилизировался, final-поля начинают путь к настоящей иммутабельности, G1 и ZGC получили улучшения производительности, примитивы заработали в паттернах, а HTTP/3 вошёл в стандартный HttpClient финальной фичей. Разбираем каждое из изменений и смотрим, как перевести реальный проект на Java 26.

    habr.com/ru/companies/haulmont

    #Java_26 #JEP #Structured_Concurrency #final_field #рефлексия #G1 #ZGC #примитивы_в_паттернах #Spring_Boot

  24. Большая распаковка Java 26. Что этот релиз значит для нас всех?

    Java 26 вышла 18 марта. В релизе 10 JEP-ов: Structured Concurrency получила шестое превью и API наконец стабилизировался, final-поля начинают путь к настоящей иммутабельности, G1 и ZGC получили улучшения производительности, примитивы заработали в паттернах, а HTTP/3 вошёл в стандартный HttpClient финальной фичей. Разбираем каждое из изменений и смотрим, как перевести реальный проект на Java 26.

    habr.com/ru/companies/haulmont

    #Java_26 #JEP #Structured_Concurrency #final_field #рефлексия #G1 #ZGC #примитивы_в_паттернах #Spring_Boot

  25. Большая распаковка Java 26. Что этот релиз значит для нас всех?

    Java 26 вышла 18 марта. В релизе 10 JEP-ов: Structured Concurrency получила шестое превью и API наконец стабилизировался, final-поля начинают путь к настоящей иммутабельности, G1 и ZGC получили улучшения производительности, примитивы заработали в паттернах, а HTTP/3 вошёл в стандартный HttpClient финальной фичей. Разбираем каждое из изменений и смотрим, как перевести реальный проект на Java 26.

    habr.com/ru/companies/haulmont

    #Java_26 #JEP #Structured_Concurrency #final_field #рефлексия #G1 #ZGC #примитивы_в_паттернах #Spring_Boot

  26. Большая распаковка Java 26. Что этот релиз значит для нас всех?

    Java 26 вышла 18 марта. В релизе 10 JEP-ов: Structured Concurrency получила шестое превью и API наконец стабилизировался, final-поля начинают путь к настоящей иммутабельности, G1 и ZGC получили улучшения производительности, примитивы заработали в паттернах, а HTTP/3 вошёл в стандартный HttpClient финальной фичей. Разбираем каждое из изменений и смотрим, как перевести реальный проект на Java 26.

    habr.com/ru/companies/haulmont

    #Java_26 #JEP #Structured_Concurrency #final_field #рефлексия #G1 #ZGC #примитивы_в_паттернах #Spring_Boot

  27. HttpClient в Spring 7: замена FeignClient или нет?

    Последние годы FeignClient и RestTemplate были де-факто стандартом для вызова внешних API в Spring. Но теперь появился нативный Http Interface Client — и я решил проверить, можно ли им заменить Feign без потери удобства. Переходим на Spring 7 увереннее!

    habr.com/ru/articles/1022466/

    #spring #spring_boot #java #httpclient #feignclient #restclient #webclient #openapi #микросервисы

  28. [Перевод] Самый простой способ устроить утечку памяти в Java

    В новом переводе от команды Spring АйО рассмотрим утечки памяти в Java. Не секрет, что GC освобождает только недостижимые объекты. Утечка в Java начинается там, где объект уже не нужен, но на него все еще есть цепочка ссылок от живого потока. Симптомы обычно одинаковые: куча растет, GC срабатывает чаще, паузы увеличиваются, финал - java.lang.OutOfMemoryError: Java heap space . В целом вывод такой, что нужно смотреть график heap в VisualVM/JVisualVM/JConsole, снимать heap dump (jmap), в Eclipse MAT запускать Leak Suspects и проверять цепочки удерживающих ссылок.

    habr.com/ru/companies/spring_a

    #java #kotlin #performance #spring #jdk #gc #spring_boot #spring_framework #springboot

  29. [Перевод] Самый простой способ устроить утечку памяти в Java

    В новом переводе от команды Spring АйО рассмотрим утечки памяти в Java. Не секрет, что GC освобождает только недостижимые объекты. Утечка в Java начинается там, где объект уже не нужен, но на него все еще есть цепочка ссылок от живого потока. Симптомы обычно одинаковые: куча растет, GC срабатывает чаще, паузы увеличиваются, финал - java.lang.OutOfMemoryError: Java heap space . В целом вывод такой, что нужно смотреть график heap в VisualVM/JVisualVM/JConsole, снимать heap dump (jmap), в Eclipse MAT запускать Leak Suspects и проверять цепочки удерживающих ссылок.

    habr.com/ru/companies/spring_a

    #java #kotlin #performance #spring #jdk #gc #spring_boot #spring_framework #springboot

  30. [Перевод] Самый простой способ устроить утечку памяти в Java

    В новом переводе от команды Spring АйО рассмотрим утечки памяти в Java. Не секрет, что GC освобождает только недостижимые объекты. Утечка в Java начинается там, где объект уже не нужен, но на него все еще есть цепочка ссылок от живого потока. Симптомы обычно одинаковые: куча растет, GC срабатывает чаще, паузы увеличиваются, финал - java.lang.OutOfMemoryError: Java heap space . В целом вывод такой, что нужно смотреть график heap в VisualVM/JVisualVM/JConsole, снимать heap dump (jmap), в Eclipse MAT запускать Leak Suspects и проверять цепочки удерживающих ссылок.

    habr.com/ru/companies/spring_a

    #java #kotlin #performance #spring #jdk #gc #spring_boot #spring_framework #springboot

  31. [Перевод] Самый простой способ устроить утечку памяти в Java

    В новом переводе от команды Spring АйО рассмотрим утечки памяти в Java. Не секрет, что GC освобождает только недостижимые объекты. Утечка в Java начинается там, где объект уже не нужен, но на него все еще есть цепочка ссылок от живого потока. Симптомы обычно одинаковые: куча растет, GC срабатывает чаще, паузы увеличиваются, финал - java.lang.OutOfMemoryError: Java heap space . В целом вывод такой, что нужно смотреть график heap в VisualVM/JVisualVM/JConsole, снимать heap dump (jmap), в Eclipse MAT запускать Leak Suspects и проверять цепочки удерживающих ссылок.

    habr.com/ru/companies/spring_a

    #java #kotlin #performance #spring #jdk #gc #spring_boot #spring_framework #springboot

  32. Как устроена транскрипция в Jitsi Meet: Jigasi, SIP и путь до EMR

    Когда мы проектировали пайплайн автоматического заполнения EMR по итогам видеоконсультаций, исходная гипотеза была простой: Jitsi Meet — open source, документация есть, значит, подключить бота и получить транскрипт — задача на пару дней. На практике именно этот слой занял непропорционально много времени относительно своей "очевидности". В этой статье разберу, как устроена транскрипция в Jitsi Meet под капотом, почему это не "просто включить кнопку", с какими конфигурационными нюансами пришлось столкнуться и как в итоге был выстроен пайплайн от видеозвонка до структурированного текста.

    habr.com/ru/articles/1021992/

    #jitsi_meet #jigasi #sip #xmpp #vosk #transcription #emr #fhir #llm #spring_boot

  33. Как устроена транскрипция в Jitsi Meet: Jigasi, SIP и путь до EMR

    Когда мы проектировали пайплайн автоматического заполнения EMR по итогам видеоконсультаций, исходная гипотеза была простой: Jitsi Meet — open source, документация есть, значит, подключить бота и получить транскрипт — задача на пару дней. На практике именно этот слой занял непропорционально много времени относительно своей "очевидности". В этой статье разберу, как устроена транскрипция в Jitsi Meet под капотом, почему это не "просто включить кнопку", с какими конфигурационными нюансами пришлось столкнуться и как в итоге был выстроен пайплайн от видеозвонка до структурированного текста.

    habr.com/ru/articles/1021992/

    #jitsi_meet #jigasi #sip #xmpp #vosk #transcription #emr #fhir #llm #spring_boot

  34. Как устроена транскрипция в Jitsi Meet: Jigasi, SIP и путь до EMR

    Когда мы проектировали пайплайн автоматического заполнения EMR по итогам видеоконсультаций, исходная гипотеза была простой: Jitsi Meet — open source, документация есть, значит, подключить бота и получить транскрипт — задача на пару дней. На практике именно этот слой занял непропорционально много времени относительно своей "очевидности". В этой статье разберу, как устроена транскрипция в Jitsi Meet под капотом, почему это не "просто включить кнопку", с какими конфигурационными нюансами пришлось столкнуться и как в итоге был выстроен пайплайн от видеозвонка до структурированного текста.

    habr.com/ru/articles/1021992/

    #jitsi_meet #jigasi #sip #xmpp #vosk #transcription #emr #fhir #llm #spring_boot

  35. Как устроена транскрипция в Jitsi Meet: Jigasi, SIP и путь до EMR

    Когда мы проектировали пайплайн автоматического заполнения EMR по итогам видеоконсультаций, исходная гипотеза была простой: Jitsi Meet — open source, документация есть, значит, подключить бота и получить транскрипт — задача на пару дней. На практике именно этот слой занял непропорционально много времени относительно своей "очевидности". В этой статье разберу, как устроена транскрипция в Jitsi Meet под капотом, почему это не "просто включить кнопку", с какими конфигурационными нюансами пришлось столкнуться и как в итоге был выстроен пайплайн от видеозвонка до структурированного текста.

    habr.com/ru/articles/1021992/

    #jitsi_meet #jigasi #sip #xmpp #vosk #transcription #emr #fhir #llm #spring_boot

  36. Архитектура мультиканального Discord/Telegram voice-бота на Spring Boot: архитектура, грабли и production-решения

    Как я собрал мультиканального voice-бота на Spring Boot, который объединяет Discord, Telegram и веб-панель в одной системе. Разбираю архитектуру, работу с голосом (TTS, запись каналов), интеграцию JDA + LavaPlayer и реальные проблемы продакшена — от memory leaks до ограничений Telegram API.

    habr.com/ru/articles/1020928/

    #spring_boot #discord_bot #telegram_bot #java #jda #lavaplayer #voice_bot #tts #архитектура #backend

  37. [Перевод] Раздувание памяти JDK 17 в контейнерах: разбор инцидента

    В новом переводе от команды Spring АйО разберем тему раздувания памяти в JDK 17. Апгрейд микросервисов с JDK 8 на JDK 17 прошел dev и QA спокойно, но в проде через 2-3 часа все начало падать. Утилизация памяти выросла в 4 раза, контейнеры стали ловить OOMKill и перезапускаться, Uptime SLA просел, массовый инцидент. Раньше JVM использовала около 50% памяти контейнера и обслуживала ~400 потоков. После релиза стало 95-100% и 1600+ соответственно. При этом heap выглядел нормально, около Xmx, а раздувалась нативная память: ~800 MB -> 3,4-3,6 GB. Виноваты несколько эффектов, которые в контейнерах усиливаются: JVM начала создавать намного больше потоков, OS стала выделять JVM гораздо больше, а дефолтный GC в JDK 17 добавил накладные расходы. Всё это из-за простого бага в JDK, который при миграции утащил за собой весь production.

    habr.com/ru/companies/spring_a

    #jdk_17 #jdk #java #performance #gc #kot #memory #spring #spring_boot #spring_framework

  38. [Перевод] Раздувание памяти JDK 17 в контейнерах: разбор инцидента

    В новом переводе от команды Spring АйО разберем тему раздувания памяти в JDK 17. Апгрейд микросервисов с JDK 8 на JDK 17 прошел dev и QA спокойно, но в проде через 2-3 часа все начало падать. Утилизация памяти выросла в 4 раза, контейнеры стали ловить OOMKill и перезапускаться, Uptime SLA просел, массовый инцидент. Раньше JVM использовала около 50% памяти контейнера и обслуживала ~400 потоков. После релиза стало 95-100% и 1600+ соответственно. При этом heap выглядел нормально, около Xmx, а раздувалась нативная память: ~800 MB -> 3,4-3,6 GB. Виноваты несколько эффектов, которые в контейнерах усиливаются: JVM начала создавать намного больше потоков, OS стала выделять JVM гораздо больше, а дефолтный GC в JDK 17 добавил накладные расходы. Всё это из-за простого бага в JDK, который при миграции утащил за собой весь production.

    habr.com/ru/companies/spring_a

    #jdk_17 #jdk #java #performance #gc #kot #memory #spring #spring_boot #spring_framework

  39. [Перевод] Раздувание памяти JDK 17 в контейнерах: разбор инцидента

    В новом переводе от команды Spring АйО разберем тему раздувания памяти в JDK 17. Апгрейд микросервисов с JDK 8 на JDK 17 прошел dev и QA спокойно, но в проде через 2-3 часа все начало падать. Утилизация памяти выросла в 4 раза, контейнеры стали ловить OOMKill и перезапускаться, Uptime SLA просел, массовый инцидент. Раньше JVM использовала около 50% памяти контейнера и обслуживала ~400 потоков. После релиза стало 95-100% и 1600+ соответственно. При этом heap выглядел нормально, около Xmx, а раздувалась нативная память: ~800 MB -> 3,4-3,6 GB. Виноваты несколько эффектов, которые в контейнерах усиливаются: JVM начала создавать намного больше потоков, OS стала выделять JVM гораздо больше, а дефолтный GC в JDK 17 добавил накладные расходы. Всё это из-за простого бага в JDK, который при миграции утащил за собой весь production.

    habr.com/ru/companies/spring_a

    #jdk_17 #jdk #java #performance #gc #kot #memory #spring #spring_boot #spring_framework

  40. [Перевод] Раздувание памяти JDK 17 в контейнерах: разбор инцидента

    В новом переводе от команды Spring АйО разберем тему раздувания памяти в JDK 17. Апгрейд микросервисов с JDK 8 на JDK 17 прошел dev и QA спокойно, но в проде через 2-3 часа все начало падать. Утилизация памяти выросла в 4 раза, контейнеры стали ловить OOMKill и перезапускаться, Uptime SLA просел, массовый инцидент. Раньше JVM использовала около 50% памяти контейнера и обслуживала ~400 потоков. После релиза стало 95-100% и 1600+ соответственно. При этом heap выглядел нормально, около Xmx, а раздувалась нативная память: ~800 MB -> 3,4-3,6 GB. Виноваты несколько эффектов, которые в контейнерах усиливаются: JVM начала создавать намного больше потоков, OS стала выделять JVM гораздо больше, а дефолтный GC в JDK 17 добавил накладные расходы. Всё это из-за простого бага в JDK, который при миграции утащил за собой весь production.

    habr.com/ru/companies/spring_a

    #jdk_17 #jdk #java #performance #gc #kot #memory #spring #spring_boot #spring_framework

  41. [Перевод] Spring Data. На пути к более строгой типизации

    В новом переводе от команды Spring АйО разберем, почему stringly-typed API со временем становятся хрупкими, чем помогают метамодели вроде Querydsl и JPA Criteria, и как новый механизм в Spring Data даёт более лёгкую и естественную альтернативу без лишней инфраструктуры сборки.

    habr.com/ru/companies/spring_a

    #spring #spring_data #spring_boot #spring_framework #java #kotlin #jooq

  42. [Перевод] Spring Data. На пути к более строгой типизации

    В новом переводе от команды Spring АйО разберем, почему stringly-typed API со временем становятся хрупкими, чем помогают метамодели вроде Querydsl и JPA Criteria, и как новый механизм в Spring Data даёт более лёгкую и естественную альтернативу без лишней инфраструктуры сборки.

    habr.com/ru/companies/spring_a

    #spring #spring_data #spring_boot #spring_framework #java #kotlin #jooq

  43. [Перевод] Spring Data. На пути к более строгой типизации

    В новом переводе от команды Spring АйО разберем, почему stringly-typed API со временем становятся хрупкими, чем помогают метамодели вроде Querydsl и JPA Criteria, и как новый механизм в Spring Data даёт более лёгкую и естественную альтернативу без лишней инфраструктуры сборки.

    habr.com/ru/companies/spring_a

    #spring #spring_data #spring_boot #spring_framework #java #kotlin #jooq

  44. [Перевод] Spring Data. На пути к более строгой типизации

    В новом переводе от команды Spring АйО разберем, почему stringly-typed API со временем становятся хрупкими, чем помогают метамодели вроде Querydsl и JPA Criteria, и как новый механизм в Spring Data даёт более лёгкую и естественную альтернативу без лишней инфраструктуры сборки.

    habr.com/ru/companies/spring_a

    #spring #spring_data #spring_boot #spring_framework #java #kotlin #jooq

  45. Делаем админку из подручных средств

    Рано или поздно почти любой бэкенд-проект приходит к задаче: нужна простая внутренняя страница. Посмотреть список чего-то, нажать пару кнопок, может быть что-то удалить.На «внутренней» странице пользователей не будет, а значит – «и так сойдёт». И вот тут начинается выбор: какие технологии взять или какой стек выбрать? Привет! На связи Евгений Захаров — backend разработчик в компании ecom.tech. Моя команда занимается вопросами координации и планирования работы внештатных сотрудников. В этой статье мой опыт, накопившейся за многие года работы в разных компаниях, дальше мы разберём базовые сценарии, риски, сложности. Поехали!

    habr.com/ru/companies/ecom_tec

    #kotlin #spring #spring_boot #thymeleaf #vue #gradle #vaadin

  46. [Перевод] О размерах пула соединений

    Настройка пула соединений — то, в чём разработчики часто ошибаются. При конфигурировании пула есть несколько принципов, которые некоторым могут показаться неочевидными, и их нужно понимать. Подробнее в новом переводе от команды Spring АйО .

    habr.com/ru/companies/spring_a

    #java #kotlin #connection_pool #system_design #system_development #system_designer #spring #spring_boot #spring_framework #postgres

  47. [Перевод] Разница между параллельными и распределёнными вычислениями

    Параллельные и распределённые вычисления часто ставят рядом, но это далеко не одно и то же. В новом переводе от команды Spring АйО разберем, как устроены обе модели, чем отличаются их архитектура, способы обмена данными, масштабируемость и отказоустойчивость. Статья подойдет тем, кто хочет понять, когда достаточно ресурсов одной машины, а когда без сети из нескольких узлов уже не обойтись.

    habr.com/ru/companies/spring_a

    #system_design #consistency #distributed_computing #distributed_systems #distributed #parallels #parallelism #parallel_computing #spring #spring_boot

  48. [Перевод] Часы Лампорта

    Сегодня мы живём в мире распределённых систем: Apache Kafka, Apache Spark, Apache Cassandra — это уже не экзотика, а повседневная инфраструктура продакшена. Сервисы пишут события, стримы обрабатываются в реальном времени, данные реплицируются по датацентрам. И почти в каждом таком сценарии возникает фундаментальный вопрос: Как понять, что произошло раньше, а что позже, если глобального времени не существует? Здесь в игру вступают логические часы Лампорта — простая, но концептуально мощная идея, лежащая в основе причинно-следственного порядка в распределённых системах. Подробнее - в новом переводе от команды Spring АйО .

    habr.com/ru/companies/spring_a

    #java #kotlin #system #system_design #architecture #architecture_design #spring #spring_boot

  49. [Перевод] HotSpot AOT-кэш: стартуем быстрее, греемся меньше

    В новом переводе от команды Spring АйО рассмотрим, как можно ускорить Java-приложения без переписываний: в свежих JDK появились Ahead-of-Time оптимизации кэша, которые выносят «дорогие» этапы загрузки/линковки классов (и даже частично профилирование методов) из рантайма в заранее подготовленный артефакт. Рассмотрим как устроен AOT-кэш в JDK 24–26, какие есть workflow (3 шага vs 2 шага/в один прогон), где прячутся подводные камни вроде удвоения требований по памяти при - XX:AOTCacheOutput , и какие практики обучения помогут реально сократить время старта и быстрее выйти на пик производительности.

    habr.com/ru/companies/spring_a

    #java #kotlin #jvm #aot #cache #cachecontrol #spring #spring_boot #spring_framework #springboot

  50. Создаем Telegram-бота для отслеживания погоды за 5 минут с помощью Nyagram (а не очередного PizzaBot)

    В большинстве туториалов по Java-ботам нам предлагают написать EchoBot или магазин пиццы на огромных switch-case конструкциях. Но в 2026 году, когда у нас есть Java 21 и Spring Boot 3 , писать бойлерплейт — это преступление против продуктивности. Сегодня мы напишем WeatherBot — полезного бота, который показывает реальную погоду через API OpenWeatherMap, имеет кнопку обновления "на лету" и, используя FSM (Машину состояний) с валидацией данных, позволяет настроить ежедневную рассылку прогноза.

    habr.com/ru/articles/991414/

    #telegram #java #telegrambot #github #java21 #spring_boot #spring_mvc #боты #tutorial #программирование