Forwarded from OpenIDE
Современный senior Spring-разработчик просто обязан разбираться в Kubernetes!
Независимо от того, разворачиваете ли вы приложение в облаке или работаете с внутренним кластером компании, — без этих знаний уже никуда.
В новом докладе Илья Кучмин рассказал, что необходимо знать, какие есть подводные камни, на что обратить внимание и как применять инструменты деплоя в Kubernetes.
😉 СМОТРЕТЬ НА YOUTUBE
😄 СМОТРЕТЬ В VK ВИДЕО
Независимо от того, разворачиваете ли вы приложение в облаке или работаете с внутренним кластером компании, — без этих знаний уже никуда.
В новом докладе Илья Кучмин рассказал, что необходимо знать, какие есть подводные камни, на что обратить внимание и как применять инструменты деплоя в Kubernetes.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍39🔥15⚡6👎2
Media is too big
VIEW IN TELEGRAM
💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍9❤7👎1
Forwarded from Amplicode
Media is too big
VIEW IN TELEGRAM
⚡ Ctrl+C → Ctrl+V на стероидах
Автоимпорт при копировании кода — штука настолько приятная и удобная, что без неё уже невозможно представить работу в IDE.
Мы пошли дальше и вслед за умным импортом во время набора кода сделали автоматическую инжекцию бинов при копировании кода!
Теперь при копировании кода Amplicode автоматически добавляет нужную инжекцию бинов. С учётом контекста,
Доступно всем пользователям Amplicode, без подписки.
Автоимпорт при копировании кода — штука настолько приятная и удобная, что без неё уже невозможно представить работу в IDE.
Мы пошли дальше и вслед за умным импортом во время набора кода сделали автоматическую инжекцию бинов при копировании кода!
Теперь при копировании кода Amplicode автоматически добавляет нужную инжекцию бинов. С учётом контекста,
@Primary, @Qualifier, дженериков, @Bean-методов, Java и Kotlin — без ручной возни после вставки.Доступно всем пользователям Amplicode, без подписки.
👍34🤯13🔥9❤5⚡2👎1🤔1
Друзья, хотим напомнить, что в этом году Spring АйО представляет собственный трек на конференции JPoint.
Помимо самого выступления хотим напомнить о дополнительных фичах участия:
– возможность пообщаться с легендами мира IT
– получить ачивку "я спикер вообще-то"
– побывать на стендах ведущих компаний РФ
– бесплатно съездить и пожить в столице
– послушать другие доклады
– оторваться на афтерпати
– попросить больше з/п у руководства (тут гарантий не дадим, только инструкцию)
После первого поста трек почти укомплектован. Но осталась пара мест. Если сомневаешься - эксперты не кусаются и покажут, как лучше, где поправить, а где, наоборот, вышло уже супер круто.
📩 Заявку на участие можно оставить тут: https://spring-aio.ru/2026
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍8❤6🤩1
В HotSpot появился AOT-кэш, который сохраняет уже разобранные, загруженные и слинкованные классы приложения. Это снижает warm-up time и ускоряет выход на пик после старта.
JDK 24:
Трёхшаговый процесс train+assemble+run (JEP 483).
Training:-XX:AOTMode=record -XX:AOTConfiguration=app.aotconf
Создает конфигурацию, необходимую для дальнейшего построения кеша.
Assembly:-XX:AOTMode=create ... -XX:AOTCache=app.aotсобирает кэш.
Run:-XX:AOTCache=app.aotиспользует его при запуске.
JDK 25:
В кэш добавили профили часто выполняемых методов (JEP 515), из-за чего JIT может стартовать компиляцию раньше и прогрев ускоряется.
Также появился упрощённый workflow в 2 шага через-XX:AOTCacheOutput=app.aot(JEP 514), но он может требовать 2x памяти: при-Xms2g -Xmx2gокружению нужно около 4 ГБ, потому что сборка кэша запускается с отдельной кучей того же размера.
Чтобы кэш применился, окружения должны совпадать: тот же JDK/OS/архитектура, classpath только из JAR без wildcard/каталогов, prod classpath - надмножество training.
Проверка:-XX:AOTMode=on.
JDK 26:
С JDK 26 сняли ограничение по ZGC (JEP 516). Для диагностики: -Xlog:aot,class+path=info. Кэш нужно пересоздавать при любой пересборке приложения или обновлении библиотек/JDK, иначе возможны краши и странное поведение.📚 Полный текст по ссылке: https://habr.com/ru/companies/spring_aio/articles/995398/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤7⚡6👍4
Record-классы удобны, пока класс = «состояние, всё состояние и ничего кроме». Любое отклонение (API канонического конутруктора не равно внутреннему представлению, нужно наследование) ломает «автогенерацию» и паттерн-деструктурирование (destructuring).
В новом переводе от команды Spring АйО статьи Brian`а Goetz`а, архитектора Java Language, предлагается следующий шаг в направлении data-oriented programming in Java: классы-носители и интерфейсы-носители (они же Carrier classes & interfaces). Концептуально, carrier классы родились из record-ов путем ослабления части их ограничений.
Комментарий от Михаила Поливаха:
Друзья, помните, пожалуйста, что данная статья по сути является суммированием обсуждения Carrier классов из JDK Project Amber Mailing List. Я это к тому, что пока непонятно, в какой версии языка carrier классы появятся, и появятся ли они в том виде, в котором представлены в статье. Статья больше пища для размышления
📚 Полный текст по ссылке: https://habr.com/ru/companies/spring_aio/articles/995824/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥10❤8⚡2
⚠️ Java продолжает готовиться к удалению finalize()
В рамках JDK 27 у
А все потому, что у
Комментарий от Михаила Поливаха:
Например:
Как избежать?
* поискать и удалить любые
* управлять жизненным циклом executor’ов явно:
Spring АйО рекомендуетне использовать в целом, но если подобного рода хук нужен, то лучше использовать Java Cleaner API. С его помощью нельзя "случайно" воскресить объект, сломать integrity объекта или т.п.
Ждем JDK 27 🫠
В рамках JDK 27 у
ThreadPoolExecutor-а, очень популярного API в Java, будет удалён метод finalize(). Несмотря на то, что в силу dynamic dispatch вызов метода finalize() всё равно будет транслирован в Object, данное изменение не source level compatible.А все потому, что у
Object.finalize() сигнатура содержит throws Throwable, в то время как ThreadPoolExecutor.finalize() — нет. Пока метод был в ThreadPoolExecutor, компилятору было ок. Как только его удалят, вызов super.finalize() начнет резолвиться в Object.finalize(), и тогда прилетит “unreported exception Throwable”.Комментарий от Михаила Поливаха:
Вот это кстати довольно редкий пример того, что имзенение может быть binary level compatible, но не source level compatible.
Например:
class MyPool extends ThreadPoolExecutor {
@Override
protected void finalize() {
super.finalize(); // JDK 27: теперь это Object.finalize() throws Throwable
}
}
Как избежать?
* поискать и удалить любые
finalize() / super.finalize() (и вообще любые авто-cleanup через финализацию)* управлять жизненным циклом executor’ов явно:
shutdown()/awaitTermination() или просто close() в try-with-resources (да, ExecutorService — AutoCloseable)Spring АйО рекомендует
finalize()Ждем JDK 27 🫠
👍28🔥9❤6
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
😁39⚡7👍4❤3👎2
Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!
– Экосистема Spring, секьюрность Docker, как не уронить базу из-за кеша | Spring АйО Подкаст №50
– Стань частью Spring АйО × JPoint
– HotSpot AOT-кэш: стартуем быстрее, греемся меньше
– Программирование, ориентированное на данные, для Java: за пределами record-классов
– Java продолжает готовиться к удалению finalize()
– Amplicode: Ctrl+C → Ctrl+V на стероидах
– Joker 2025: Федор Сазонов, Илья Сазонов — «От антипаттерна к инструменту: скрытая польза открытой сессии»
– Axiom JDK на Snow One
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5🔥4
Media is too big
VIEW IN TELEGRAM
💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18⚡4❤2😁2🔥1🤯1
Forwarded from OpenIDE
Reksoft ❤🔥 OpenIDE
В прошлом году Reksoft перевёл Kotlin/Java-команды на OpenIDE с Amplicode из-за ограничений лицензий JetBrains.
Тестировали Eclipse, VS Code и GigaIDE. Первые два потребовали много ручной настройки и уступали по навигации и поддержке Spring/Kotlin. GigaIDE оказалась близка к IntelliJ Community, но до Dev Experience IntelliJ Ultimate не дотянула.
OpenIDE с Amplicode закрыла ключевые требования: генерация CRUD и тестов, docker-compose из интерфейса, встроенный HTTP-клиент, reactive debugger и интеграция с Git.
В итоге почти все JVM-команды в Reksoft сейчас используют OpenIDE.
📚 Подробнее в блоге компании Reksoft на Habr: История одного безальтернативного переезда. Почему мы выбрали OpenIDE
В прошлом году Reksoft перевёл Kotlin/Java-команды на OpenIDE с Amplicode из-за ограничений лицензий JetBrains.
Тестировали Eclipse, VS Code и GigaIDE. Первые два потребовали много ручной настройки и уступали по навигации и поддержке Spring/Kotlin. GigaIDE оказалась близка к IntelliJ Community, но до Dev Experience IntelliJ Ultimate не дотянула.
OpenIDE с Amplicode закрыла ключевые требования: генерация CRUD и тестов, docker-compose из интерфейса, встроенный HTTP-клиент, reactive debugger и интеграция с Git.
В итоге почти все JVM-команды в Reksoft сейчас используют OpenIDE.
📚 Подробнее в блоге компании Reksoft на Habr: История одного безальтернативного переезда. Почему мы выбрали OpenIDE
🔥26👍16😁5❤4🤔3🤯1
Разрыв в неизменяемости: почему Java Records нужны оптики (Lenses)
Records и pattern matching сделали чтение вложенных данных в Java удобным. Но обновить поле глубоко внутри неизменяемой структуры все еще больно: чтобы поменять одну строку (street у адреса менеджера отдела), приходится вручную пересобирать каждый record по пути. В примере это около 25 строк с каскадом копирующих конструкторов и риском ошибки на каждом уровне.
Потенциально новые методы
Оптики закрывают этот разрыв: это типобезопасные, компонуемые пути доступа, которые позволяют один раз описать маршрут и дальше читать/писать по нему. Базовая оптика - Lens (ровно 1 цель), есть Prism (0/1 вариант sealed), Affine (0/1 без построения), Traversal (0..many для коллекций). Скомпонованные линзы сами выполняют промежуточную реконструкцию, и обновление превращается в одно простое выражение.
📚 Полный текст по ссылке: https://habr.com/ru/companies/spring_aio/articles/1001066/
Records и pattern matching сделали чтение вложенных данных в Java удобным. Но обновить поле глубоко внутри неизменяемой структуры все еще больно: чтобы поменять одну строку (street у адреса менеджера отдела), приходится вручную пересобирать каждый record по пути. В примере это около 25 строк с каскадом копирующих конструкторов и риском ошибки на каждом уровне.
Потенциально новые методы
withX() в record помогают мало: обновленное значение все равно нужно протаскивать назад через Address -> Employee -> Department -> Company. Даже JEP 468 (with для records, preview в JDK 25) упрощает один уровень, но не поддерживает вложенное обновление, поэтому получаются цепочки with на каждом слое.Оптики закрывают этот разрыв: это типобезопасные, компонуемые пути доступа, которые позволяют один раз описать маршрут и дальше читать/писать по нему. Базовая оптика - Lens (ровно 1 цель), есть Prism (0/1 вариант sealed), Affine (0/1 без построения), Traversal (0..many для коллекций). Скомпонованные линзы сами выполняют промежуточную реконструкцию, и обновление превращается в одно простое выражение.
📚 Полный текст по ссылке: https://habr.com/ru/companies/spring_aio/articles/1001066/
🔥18🤯11❤8👍4🤔1
Соблюдение определённой структуры пакетов или архитектуры крайне важно. Особенно в Java, где для корректной работы некоторые элементы должны быть
public или действительно доступны за пределами своего пакета. В новом переводе от команды Spring АйО рассмотрим библиотеку с открытым исходным кодом ArchUnit, которая помогает в тех случаях, когда одного компилятора недостаточно.
📚 Полный текст по ссылке: https://habr.com/ru/companies/spring_aio/articles/1001486/
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍17🔥10❤5
В одном и том же
null часто прячут разные смыслы: “нет значения”, “неизвестно”, “неинициализировано”. Потом это всплывает в NPE и в кривой логике исполнения.В Ceylon эту проблему решают через типовую систему, через Union типы. Подробнее, в переводе от Spring АйО.
Комментарий от Михаила Поливаха:
Статья достаточно старая, написанная Лукасом Едером (автор Jooq) про реализацию nullability Ceylon.
Конечно, Ceylon довольно старый язык, мёртвый на данный момент. Его дизайнером кстати когда-то выступал сам Gavin King (тот самый автор Hibernate).
Тем не менее, это единственный относительно известный на моей памяти язык поверх JVM, который поддерживал Union типы (не считая Scala 3), через которые и была сделана реализация nullable типов в Ceylon.
Статья больше призвана расширить Ваш кругозор и призвать Вас к осмысленной дискуссии. Приятного чтения.
📚Полный текст по ссылке: https://habr.com/ru/companies/spring_aio/articles/1001982/
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥13❤10👍9⚡1
TechMeetup #11: Spring АйО x МТС Банк
Осталось 5 дней...
В программе:
Доклады от экспертов Spring АйО:
👤 Евгений Сулейманов: HTTP Service Clients + API Versioning в Spring Boot 4: типобезопасный REST без зоопарка клиентов (и без боли при эволюции API);
👤 Павел Кислов: Тренды в Spring. Куда мы движемся и что поменялось в Spring Framework за 2025 год.;
👤 Михаил Поливаха: Встречайте Axelix: Спецназ для вашей Spring Boot экосистемы;
👥 Дискуссия "Мы видим перед собой последнее поколение разработчиков?" со взглядом бизнеса, менеджмента и разработки:
• Федор Сазонов, CEO OpenIDE;
• Павел Кислов, Developer Advocate Amplicode;
• Марат Рахимов, Директор по AI-трансформации МТС Банка;
🗓 Когда: 26 февраля 2026, с 19:00 до 22:30 GMT+03:00 (онлайн и офлайн);
📍 Где (офлайн): Москва, м. Технопарк. Проспект Андропова 18, корпус 1. (Здание с вывеской МТС Банк, Медиарум);
💻 Онлайн трансляция будет на странице мероприятия
требуется регистрация на формат посещения "Онлайн"
👍 Участие: бесплатно
🎉 Нетворкинг: бесценно
⭐ Регистрация продолжается до 23-го февраля на странице мероприятия
Количество мест ограничено, успей забронировать место
Spring АйО | МТС Банк
---
Рассылка подтверждений будет до 24-го февраля включительно.
Не забудь проверить свою почту, включая папку «Спам» и «Промо».
TechMeetup | CFP: Подать доклад | Общалка и вопросы | Записи
Осталось 5 дней...
В программе:
Доклады от экспертов Spring АйО:
• Федор Сазонов, CEO OpenIDE;
• Павел Кислов, Developer Advocate Amplicode;
• Марат Рахимов, Директор по AI-трансформации МТС Банка;
требуется регистрация на формат посещения "Онлайн"
Количество мест ограничено, успей забронировать место
Spring АйО | МТС Банк
---
Рассылка подтверждений будет до 24-го февраля включительно.
Не забудь проверить свою почту, включая папку «Спам» и «Промо».
TechMeetup | CFP: Подать доклад | Общалка и вопросы | Записи
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤8🔥4
Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!
– Java без Spring`а, это ИИ подкаст, HotSpot AOT-кэш | Spring АйО Подкаст №51
– Разрыв в неизменяемости: почему Java Records нужны оптики (Lenses)
– Руководство по ArchUnit — как модульно тестировать архитектуру
– Ceylon и NULL: как сделать null нормальным
– TechMeetup #11: Spring АйО x МТС Банк
– OpenIDE: Reksoft & OpenIDE
– AxiomJDK: Java Rock Star Meetup
– Amplicode: Создание JPA/JDBC сущностей из таблиц базы данных
– OpenIDE: АНДРЕЙ КАРПАТЫЙ ПЕРЕПИСАЛ GPT | OPENCLAW ОБЪЯВИЛ ВОЙНУ | TELEGRAM СНОВА БЛОКИРУЮТ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍4🔥2