Spring АйО
8.43K subscribers
303 photos
209 videos
402 links
Русскоязычное сообщество Spring-разработчиков.

Habr: bit.ly/433IK46
YouTube: bit.ly/4h3Ci0x
VK: bit.ly/4hF0OG8
Rutube: bit.ly/4b4UeX6
Яндекс Музыка: bit.ly/3EIizWy

Канал для общения: @spring_aio_chat
Download Telegram
🚀 Spring Data JPA и Hibernate: ориентируемся на производительность. Часть 3


Команда Spring АйО перевела и адаптировала доклад Мацея Валковяка “Performance oriented Spring Data JPA & Hibernate”, в котором на наглядных примерах рассказывается, как существенно нарастить производительность приложения, оптимизировав его взаимодействие с БД. 

Доклад опубликован тремя частями. В первой части было рассказано об оптимизации управления соединениями с базой данных.

Во второй части мы посмотрели на то, как оптимизировать код и настройки Spring Data и Hibernate, чтобы минимизировать количество отправляемых в базу данных SQL запросов.

Третья часть посвящена обзору инструментов, которые могут помочь разработчику правильно организовать работу по регулярной оптимизации производительности приложений, в том числе при работе командой.

📚 Читать на Хабре: https://habr.com/ru/companies/spring_aio/articles/923872/

Подписывайтесь:
😌@spring_aio
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍1161
Forwarded from Amplicode
Media is too big
VIEW IN TELEGRAM
🤩 Свежие возможности Amplicode

В недавних обновлениях Amplicode появились два КРУПНЫХ блока нововведений — HTTP Client и Database Client.

Чтобы упростить изучение этих фич, мы создали два новых лендинга на сайте, где вы найдете короткие "How-to" видео с демонстрацией возможностей:

ConneKt — HTTP-клиент в вашей IDE
Database Client от Amplicode — управляйте БД прямо из IDE

P.S. К посту прикреплено одно из таких видео: "Просмотр структуры базы данных".
1👍2812🔥11👎3
❄️ Павел Кислов: Spring Security OAuth2 & Co Explained

Совсем недавно эксперт Spring АйО Павел Кислов выступил с докладом на SnowOne 2025.

Когда речь заходит о Spring Security и его работе с OAuth2, OIDC, SAML, SSO и Spring Authorization Server, то перед нами больше вопросов, чем ответов. Документация есть, гайды есть, а ответов на возникающие по ходу вопросы нет. Это повод их найти.


🤩 СМОТРЕТЬ НА YOUTUBE
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍137👎1
⚙️ Разбираемся со Spring Boot с помощью Spring Debugger

Команда Spring АйО перевела статью о работе со Spring Debugger и о том, как его применение существенно облегчает отладку приложений, написанных с использованием Spring Boot. На момент написания статьи фича доступна только в Ultimate версии IntelliJ IDEA.

📚 Читать на Хабре: https://habr.com/ru/companies/spring_aio/articles/924550/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥28👍86
🛡 Особенности работы сервера java-приложений Libercat в режиме ЗПС

Наши партнеры из Axiom JDK проведут вебинар, посвящённый техническим аспектам работы сервера приложений Libercat в условиях режима замкнутой программной среды (ЗПС).

В программе:
– Что такое ЗПС и как он влияет на запуск Java-приложений;
– Особенности работы Libercat в защищённом режиме (JRE, modules, запускаемые архивы jar, class файлы);
– Ключевые проблемы реализации и пути их преодоления (решения для борьбы с распаковкой);
– Издержки новых решений: влияние на производительность и потребление ресурсов;
– Возможные пути оптимизации без нарушения требований ЗПС.

Вебинар будет полезен:
– Разработчикам серверных Java-приложений;
– Специалистам по информационной безопасности;
– Администраторам защищённых ИТ-сред;
– Архитекторам программных решений под Astra Linux и аналогичные ОС;
– Экспертам сертификационных лабораторий.

Ведущие
🔹Денис Анисимов, старший инженер-разработчик Axiom JDK
🔹Роман Карпов, директор по стратегии и развитию технологий Axiom JDK

🛑Вебинар пройдет 9 июля в 11:00

📌 Участие бесплатное – достаточно зарегистрироваться.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍108🔥7
Media is too big
VIEW IN TELEGRAM
🐘 Вышло свежее интервью с Олегом Бартуновым — легендой мира PostgreSQL

Это тот самый человек, который стоял у истоков российского комьюнити Postgres, создал компанию Postgres Professional и внёс огромный вклад в развитие экосистемы.

Советуем посмотреть полностью: Бартунов много говорит про астрономию (его вторая большая любовь), про баланс прикладного и фундаментального, про open source, про то, как на Postgres строят больше сотни реальных продуктов, и даже про то, чей на самом деле слон.

Занятие на вечер воскресенья найдено.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33🔥1714
Forwarded from Amplicode
☠️ Циклические зависимости в Spring: разбираемся на практике

😉 СМОТРЕТЬ НА YOUTUBE
😄 СМОТРЕТЬ В VK ВИДЕО
🥰 СМОТРЕТЬ НА RUTUBE
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥19👍85👎1
🤖 Встречайте Koog — новый AI-фреймворк от JetBrains

Рустам Курамшин, эксперт сообщества Spring АйО, подготовил пост про новый AI-фреймворк от JetBrains – Koog.

AI-агенты — это не фантастика. Это новый уровень взаимодействия с LLM, где модели не просто болтают в чате, а действуют: они умеют вызывать внешние инструменты, планировать, запоминать контекст, адаптироваться и выполнять сложные задачи почти без участия человека.

Эти агенты становятся ключевым компонентом современных систем: от помощников в IDE и CI/CD пайплайнах до интеллектуальных обработчиков в бизнес-приложениях.

JetBrains представили Koog — open source фреймворк для разработки AI-агентов на Kotlin.

Что такое Koog?

Koog — это Agentic AI фреймворк, написанный полностью на идиоматичном Kotlin. Он позволяет создавать AI-агентов, которые:

- запускаются локально без внешних зависимостей
- умеют вызывать инструменты и API
- обрабатывают сложные пайплайны через графовые сценарии
- поддерживают мультимодели (OpenAI, Anthropic, Google, Ollama и др.)
- работают на JVM и JS (за счет Kotlin Multiplatform)

Koog можно использовать как для простых агентов “вопрос-ответ”, так и для построения сложных, многосоставных систем с устойчивой памятью, сжатой историей, потоковой обработкой ответов и гибкой трассировкой.

До недавнего времени экосистема Java не имела по-настоящему удобных, нативных инструментов для работы с AI-агентами, возможно кроме Spring AI в составе Spring Framework.

Пример использования минимального AI-агента в Koog:


fun main() = runBlocking {
val apiKey = System.getenv("OPENAI_API_KEY")

val agent = AIAgent(
executor = simpleOpenAIExecutor(apiKey),
systemPrompt = "Ты - очень полезный ассистент-помошник",
llmModel = OpenAIModels.Chat.GPT4o
)

val result = agent.run("Привет! Чем можешь помочь?")
println(result)
}


Koog — это, возможно, первый шаг к тому, чтобы писать LLM-based приложения просто на Kotlin без лишних зависимостей.

Как потестить Koog:

Репозиторий: https://github.com/JetBrains/koog

Документация: https://docs.koog.ai

Быстрый старт: https://docs.koog.ai/single-run-agents/

💬 Как вам Koog? Делитесь мнениями в комментариях! 👇
👍30🔥1614👎2
🧠 Подключение Spring AI к локальным AI-моделям с помощью Foundry Local

Команда Spring АйО перевела статью, которая покажет, как интегрировать Spring AI с Foundry Local — десктопным приложением от Microsoft, совместимым с OpenAI API.

Вы узнаете, как настроить локальную AI-модель, подключить её к Spring Boot и создать REST-эндпоинты для чат-бота и суммаризации текста. Всё это — с акцентом на производительность, безопасность и автономность.

📚 Читать на Хабре: https://habr.com/ru/companies/spring_aio/articles/925074/
🔥14👍76👎1
⚡️⚡️⚡️ OpenIDE – профессиональные инструменты без ограничений

Мы, Spring АйО, являемся генеральным информационным партнёром первого масштабного события, посвящённого OpenIDE — новой открытой экосистемы для Java, Kotlin, Go, Python, JavaScript и других языков.

В программе — доклады от экспертов сообщества и не только, live-демо и обсуждение концепции OpenIDE.

📅 31 июля в 17:00 МСК
📍 Бесплатно, онлайн, на всех наших платформах. Главное – зарегистрироваться.

🔗 ЗАРЕГИСТРИРОВАТЬСЯ
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29👍14🤩63👎1🤔1🤯1
💡 JEP 507: Примитивы в pattern matching и switch — Java 25 ломает старые ограничения

Java 25 продолжает развивать pattern matching: теперь в instanceof и switch можно будет использовать примитивные типы!

В чем была проблема?
Раньше pattern matching работал только с объектами:


if (obj instanceof String s) { ... }
А вот так было нельзя:

if (x instanceof int i) { ... } // Ошибка


То же самое со switch — примитивы были ограничены: нельзя было использовать switch на boolean, float, double, long или с примитивными паттернами.

Что добавили?
Теперь можно будет:

Использовать примитивы в instanceof:


if (num instanceof byte b) { ... } // Автоматически проверит, влезает ли num в byte
Писать switch по boolean, long, float, double:

switch (flag) {
case true -> System.out.println("Да");
case false -> System.out.println("Нет");
}


Использовать примитивные паттерны в switch:


switch (value) {
case 0 -> System.out.println("Ноль");
case int i when i > 0 -> System.out.println("Положительное: " + i);
}


Почему это круто?

– упрощаются безопасные преобразования типов без ручных проверок диапазонов.
– убираются лишние if перед кастами.
switch будет действительно универсальным: можно будет свитчить по любым типам.
– можно будет использовать примитивы в record-паттернах и instanceof так же просто, как объекты.

Пример:
Допустим, есть JSON:


sealed interface JsonValue { ... }
record JsonNumber(double d) implements JsonValue { }


Раньше:


if (json instanceof JsonNumber(double d)) {
int age = (int) d; // Ручной каст, возможна потеря данных
}


С Java 25:


if (json instanceof JsonNumber(int age)) {
System.out.println("Возраст: " + age);
}
// Сработает только если double без потери вмещается в int


Зачем это добавили?

Паттерны должны быть едиными как для объектов, так и для примитивов. Это делает язык мощнее, проще, безопаснее

Java 25 умеет проверять и безопасно преобразовывать примитивы прямо в instanceof и switch.

Как вам новая фича? Предлагаем обсудить комментариях👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🔥299🤔3👎1
🤩 Ого: Гэвин Кинг добавил интеграцию со Spring в рамках Hibernate Data Repositories

Это значит, что скоро Jakarta Data можно будет использовать в приложениях на Spring с минимальными усилиями. Без лишних приседаний.

Судя по скриншотам, интеграция выглядит привычным образом, а методы @Query, @Find и @Update уже работают как надо!

💡 Напомним: Гэвин Кинг — core contributor в Jakarta Data спецификацию, а также автор Hibernate и Ceylon. Поэтому, если кто и может сделать это по-человечески, то он!

Только что добавил интеграцию Hibernate Data Repositories со Spring, благодаря чему использовать Jakarta Data в Spring стало гораздо проще.


Пока это лишь пост Гэвина в социальной сети — официальной поддержки Hibernate Data Repositories для Spring ещё нет. Как только появятся детали от команды Spring, мы обязательно напишем.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥29🤩127👍4🤔3😁21
💡 JEP 511: Импорт модулей в Java 25 — как упростить работу с библиотеками

В Java 25 появится долгожданная фича: импорт модулей. Теперь можно будет одним импортом подключать все пакеты, которые экспортирует модуль. Это сильно упростит работу с большими библиотеками, особенно в прототипах и обучении.

В чем проблема?
Например, чтобы работать с потоками, коллекциями и функциями, раньше приходилось писать кучу импортов:


import java.util.*;
import java.util.function.*;
import java.util.stream.*;


Теперь можно будет написать:


import module java.base;


И все нужные классы из java.util, java.util.stream и других будут доступны сразу.

Зачем это нужно?
– Быстрее подключать модули целиком без перечисления всех пакетов.
– Удобно для прототипов, скриптов и JShell.
– Упрощает жизнь новичкам — не нужно вспоминать, где в иерархии пакетов живет List или Stream.

Пример:


import module java.sql;

public class Demo {
public static void main(String[] args) throws Exception {
Connection conn = DriverManager.getConnection("jdbc:h2:mem:");
Statement stmt = conn.createStatement();
stmt.execute("create table test(id int)");
System.out.println("Таблица создана");
}
}


Благодаря import module java.sql; доступны все классы из java.sql и javax.sql сразу.

⚙️ Как это работает?
import module M; — подключает все публичные классы и интерфейсы из экспортируемых пакетов модуля M.

Также подключаются пакеты из модулей, от которых M зависит транзитивно.

Важно:
Это работает даже в обычных (не модульных) проектах.

Если в разных модулях встречаются классы с одинаковыми именами, компилятор сообщит об ошибке. В этом случае можно уточнить импорт:


import java.sql.Date; // Уточнение, какой именно класс Date использовать


Java постоянно расширяется, и стандартные библиотеки становятся все объемнее. import module — это способ сделать работу с ними проще и быстрее, без потери совместимости.

Что думаете о новой фиче? Предлагаем обсудить комментариях👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🤔108🔥8👎7