Библиотека джависта | Java, Spring, Maven, Hibernate
23.4K subscribers
2.2K photos
45 videos
45 files
3.1K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://t.me/proglibrary/9197

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
Download Telegram
🔥 Как настроить Liquibase для управления миграциями БД

Liquibase — это инструмент для версионирования схемы базы данных. Забудьте про ручные SQL-скрипты и проблемы с синхронизацией между окружениями.

Работает декларативно, отслеживает все изменения, поддерживает rollback и работает с любыми реляционными БД.

1️⃣ Добавляем зависимости

Нужна одна основная зависимость: liquibase-core. Если используете Spring Boot, добавьте spring-boot-starter-liquibase — он автоматически интегрируется с DataSource и запускается при старте приложения.

Критически важно добавить JDBC-драйвер вашей БД (postgresql, mysql-connector и т.д.). Без него Liquibase не сможет подключиться и применить миграции.

2️⃣ Создаём структуру changelog-файлов

Создайте директорию resources/db/changelog/. В корне положите главный файл db.changelog-master.yaml — это точка входа, которая включает все остальные миграции.

В мастер-файле перечисляете пути к конкретным changeset-файлам в порядке применения. Называйте файлы по схеме: v1.0-create-users-table.yaml, v1.1-add-email-column.yaml — так проще ориентироваться в истории изменений.

3️⃣ Настраиваем application.yml

В конфигурации укажите путь к мастер-файлу через параметр spring.liquibase.change-log. По умолчанию это classpath:db/changelog/db.changelog-master.yaml.

Обязательно настройте параметры enabled (включить/выключить), drop-first (очистка БД перед стартом — только для dev!) и contexts (для разделения миграций по окружениям: dev, test, prod).

4️⃣ Пишем changeset'ы

Каждое изменение оборачивается в changeset с уникальным id и автором. Liquibase отслеживает, какие changeset'ы уже применены через служебную таблицу databasechangelog.

Основные типы изменений:

▪️ createTable / dropTable — создание/удаление таблиц
▪️ addColumn / dropColumn — добавление/удаление колонок
▪️ createIndex — создание индексов для оптимизации запросов
▪️ addForeignKey — настройка связей между таблицами
▪️ insert / update — заполнение справочников и тестовых данных
▪️ sql / sqlFile — для сложных кастомных запросов

Используйте preconditions для проверки условий перед применением: например, не создавать таблицу, если она уже существует.

5️⃣ Настраиваем rollback

Liquibase умеет откатывать изменения. Для большинства операций rollback генерируется автоматически, но для sql и sqlFile нужно явно указывать rollback-блок.

Добавляйте тег rollback с SQL-командами отката. Для createTable это будет dropTable, для addColumn — dropColumn. Это критически важно для production — без rollback вы не сможете откатить проблемную миграцию.

6️⃣ Работа с разными окружениями

Используйте contexts и labels для разделения миграций. Тестовые данные помечайте context="dev", production-миграции — context="prod". При запуске приложения указывайте нужный context в конфигурации.

Можно создать отдельные файлы для каждого окружения: db.changelog-dev.yaml с тестовыми данными и db.changelog-prod.yaml только со структурными изменениями. Подключайте их условно через профили Spring.

7️⃣ Лучшие практики

▪️ Никогда не изменяйте уже применённые changeset'ы — создавайте новые для исправлений
▪️ Один changeset = одно атомарное изменение. Не пихайте всё в один файл
▪️ Используйте runOnChange="false" чтобы changeset применялся только один раз
▪️ Добавляйте failOnError="true" для критичных миграций
▪️ Тестируйте миграции на копии production БД перед деплоем

✔️ Что происходит под капотом

При старте приложения Liquibase подключается к БД и проверяет наличие служебных таблиц DATABASECHANGELOG и DATABASECHANGELOGLOCK. Если их нет — создаёт.

Затем читает master-файл, получает список всех changeset'ов и сверяет с таблицей DATABASECHANGELOG. Новые changeset'ы применяются последовательно, информация о них записывается в таблицу с MD5-хэшем для контроля целостности.

💡 Бонус-совет

Интегрируйте Liquibase с CI/CD. Перед деплоем запускайте команду liquibase validate для проверки корректности changelog'ов. В pipeline добавьте команду liquibase updateSQL чтобы увидеть, какой SQL будет выполнен, без реального применения.

🐸 Библиотека джависта

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102🔥1
🎓 Экспресс-курс «Математика для Data Science» стартует 4 декабря

Этот курс для вас, если вы:

🧑‍💻 Программист
Когда нужно понять, что происходит «под капотом» ML-алгоритмов.

📊 Начинающий DS / аналитик / студент
Чтобы закрыть теорию, подтянуть фундамент и собрать портфолио.

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

🎁 Сейчас лучший момент стартовать:
— скидка 40% на курс до конца ноября
— можно пройти бесплатный тест на знание основ математики

👉 Записаться на курс
This media is not supported in your browser
VIEW IN TELEGRAM
😵‍💫 Усиль свои позиции на собесе в Data Science знаниями математики!

Чем важна математика расскажет Мария Тихонова - кандидат компьютерных наук, руководитель исследовательского направления SberAI, доцент факультета компьютерных наук и преподаватель НИУ ВШЭ на курсе «Математика для Data Science» от Proglib Academy.

👀 Мария - человек, который реально работает с LLM и делает так, чтобы модели понимали человеческую речь, а не делали вид.

📌 Добавь в свое портфолио проект, выделись среди конкурентов

Курс предусматривает выполнение практического проекта с фидбеком от экспертов. За проект можно взять темы:
• обучите градиентный спуск для предсказания цен на квартиры
• создадите классификатор тональности или тематики текста
• построите простую рекомендательную систему на матричных разложениях

Бонусы:
- скидка 40% до 30 ноября
- если оплатить до конца ноября, получите курс «Базовая математика» в подарок

➡️ Пройти бесплатный тест на знание математики

👇👇👇
Записаться на курс
Please open Telegram to view this post
VIEW IN TELEGRAM
Сохраняйте шпаргалку по основным командам Docker

🐸 Библиотека джависта

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥31
⚙️ JMH (Java Microbenchmarking Harness)

JMH — это фреймворк для точного микробенчмаркинга в Java 📈

Он предназначен для создания тестов производительности, которые помогают анализировать, как различные изменения в коде влияют на его эффективность.

📌 Фичи:

▪️ измерение времени выполнения на уровне микроопераций;
▪️ поддержка сложных случаев оптимизации JVM;
▪️ вывод подробной статистики;
▪️ возможность настройки параметров теста;
▪️ точные результаты без влияния JVM-оптимизаций.

🔗 JMH на GitHub

🐸 Библиотека джависта

#Enterprise
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍31👏1
🔍 Просто о сложном: Testcontainers

Testcontainers — это Java-библиотека, которая позволяет запускать Docker-контейнеры прямо из тестов.

Забудьте про моки базы данных, embedded PostgreSQL и H2 "вместо настоящей БД" — тестируйте на реальных зависимостях.

Библиотека предоставляет лёгкий API для управления жизненным циклом контейнеров: автоматический запуск перед тестом, проброс портов, ожидание готовности сервиса и гарантированная очистка после завершения.

Больше не нужно поднимать локальный PostgreSQL, настраивать Kafka кластер или держать Redis на машине разработчика — всё запускается изолированно в Docker и удаляется после тестов.

🔹 Ключевые моменты

▪️ Поддержка 50+ готовых модулей: PostgreSQL, MySQL, MongoDB, Redis, Kafka, Elasticsearch, Localstack и др.
▪️ Можно использовать любой Docker-образ через GenericContainer.
▪️ Автоматическая очистка — контейнеры удаляются после тестов.
▪️ Реальная изоляция — каждый тест может иметь свежее окружение.
▪️ Интеграция с JUnit 5, Spring Boot Test, Spock.

🔹 Под капотом

Testcontainers общается с Docker через docker-java клиент. При запуске теста библиотека:

1. Создаёт контейнер с нужным образом.
2. Ждёт готовности (health check или проверка порта).
3. Пробрасывает рандомный порт на localhost.
4. Передаёт connection URL в тест.
5. После теста останавливает и удаляет контейнер.

Есть механизм Ryuk (контейнер-уборщик) — он следит, что все тестовые контейнеры будут убиты, даже если JVM упала.

🔹 Подводные камни

— Нужен Docker
— Медленнее unit-тестов
— Потребление ресурсов
— Проблемы с сетью на CI
— Не забывайте фиксировать версии образов

✔️ Когда использовать

— Интеграционные тесты с БД (JPA, JDBC, jOOQ);
— Тестирование Kafka consumers/producers;
— Проверка работы с Redis, Elasticsearch;
— E2E тесты с реальным окружением;
— Локальная разработка (docker-compose замена);
— Тестирование миграций БД (Flyway, Liquibase);
— Проверка совместимости с разными версиями зависимостей.

Не подходит:

— Unit-тесты (слишком тяжело);
— Когда Docker недоступен;
— Performance-тесты (overhead на контейнеры);
— Простые CRUD операции (можно обойтись H2);
— CI с ограниченными ресурсами.

🔧 Бонус-трюк: используйте @ServiceConnection в Spring Boot 3.1+ — он автоматически сконфигурирует DataSource из TestContainer без ручного прописывания URL.

🐸 Библиотека джависта

#CoreJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍31👏1
This media is not supported in your browser
VIEW IN TELEGRAM
🤖 AI сейчас на пике — и математика снова в центре внимания.

«На конференции AIJ только и разговоров, что о AI и математике. Ведь в основе генеративных моделей Gen AI лежит фундаментальная математика.»

Одна из топовых экспертов, кто сегодня участвует на AIJ, преподаёт у нас.

Мария Тихонова — PhD по Computer Science, руководитель направления в SberAI и доцент ВШЭ. Она работает с LLM каждый день и объясняет математику так, как она реально применяется в AI.

🔥 Экспресс-курс «Математика для DS» — 8 недель, чтобы закрыть пробелы и уверенно проходить собесы.

🎁 До 30 ноября:
→ скидка 40%
→ курс «Школьная математика» в подарок при оплате
→ бесплатный тест на знание основ математики

👉
Записаться на курс
👏2👾2😁1
Помните, как это было? Кофе, зачетка и возможность просто учиться без спринтов и задач

29 ноября в 16:00 будет Back to Uni — встреча-ностальгия в кампусе Центрального университета для ИТ-сообщества.
Что вас ждет:
— Пары от преподавателей ЦУ — применять знания не обязательно, будет просто интересно.
— Возможность узнать, как и зачем ИТ-специалисту преподавать в вузе, даже если нет опыта или страшно начать.
— Студенческие клубы, разговоры по душам в коридорах и та самая атмосфера, где можно просто вдохновляться.

Пары будут вести руководитель отдела прикладного ML в AI-центре Т-Банка Андрей Мельников, руководитель аналитики международного Яндекс Поиска Роман Васильев, к.м.н., руководитель направления исследований «Мышление и AI» в лаборатории нейронаук и поведения человека Сбера Яна Венерина и другие эксперты.

Это бесплатно. Приходите с однокурсниками — ностальгировать вместе.

Регистрируйтесь по ссылке тут!
🎧 Что послушать — #подкаст Javaswag #82

🔹 Ведущий: Дмитрий Волыхин
🔹 Гость: Владимир Ситников
🔹 Продолжительность: 2 часа 6 минут

Владимир рассказывает о перфоманс-инжиниринге, роли нагрузочного тестирования, создании собственного профайлера, работе с Java Flight Recorder и Async Profiler, а также делится опытом управления PR в Open Source проектах и участия в конференциях.

🔹 Ключевые темы выпуска

02:31 — Перфоманс-инжиниринг
07:40 — Роль нагрузочного тестирования
29:46 — Кэширование запросов в Oracle и Postgres
35:42 — Платная поддержка Spring
38:17 — Создание собственного профайлера
56:13 — Оптимизация записи метрик
58:18 — Java Flight Recorder и Async Profiler
01:38:00 — Управление PR и их обсуждение
01:45:02 — Доклады и конференции

🔗 Слушать выпуск

🐸 Библиотека джависта

#DevLife
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1👏1