Применение паттернов проектирования в Java
Паттерны проектирования находят широкое применение в Java благодаря её объектно-ориентированной природе и богатой экосистеме.
1. Разработка корпоративных приложений
Java часто используется для создания сложных серверных систем, таких как банковские платформы или системы управления контентом. В таких проектах паттерны проектирования помогают структурировать код.
Например:
Фреймворк Spring: Использует паттерн "Внедрение зависимостей" для управления жизненным циклом объектов. Это позволяет разработчикам сосредоточиться на бизнес-логике, а не на создании и настройке объектов.
Hibernate: Применяет паттерн "Фасад" для упрощения работы с базой данных, скрывая сложность SQL-запросов за простым API.
2. Создание библиотек и API
Паттерны проектирования упрощают создание библиотек, которые другие разработчики могут использовать.
Например:
В Java API паттерн "Итератор" используется в коллекциях (например, List или Set), чтобы обеспечить единообразный способ перебора элементов.
Паттерн "Фабричный метод" применяется в классе java.util.Calendar, где метод getInstance() создает объекты в зависимости от локализации.
3. Управление многопоточностью
Java широко используется для многопоточного программирования, и паттерны помогают управлять сложностью.
Например:
Паттерн "Синглтон" часто используется для создания единственного экземпляра менеджера ресурсов, такого как пул соединений с базой данных.
Паттерн "Монитор" встроен в Java на уровне языка (через ключевое слово synchronized), что упрощает синхронизацию потоков.
4. Упрощение тестирования
Паттерны способствуют написанию тестируемого кода. Например, использование "Внедрения зависимостей" позволяет легко заменять реальные компоненты на заглушки (mocks) во время тестирования.
Проблемы и критика паттернов проектирования
Хотя паттерны проектирования чрезвычайно полезны, их применение не лишено недостатков:
Избыточная сложность: Иногда использование паттерна усложняет код там, где можно было бы обойтись более простым решением.
Злоупотребление: Новички могут применять паттерны везде, даже когда они не нужны, что приводит к "паттерн-ориентированному" программированию.
Контекстная зависимость: Не все паттерны подходят для всех ситуаций. Например, "Синглтон" может быть проблематичным в многопоточных приложениях, если не позаботиться о синхронизации.
В Java-разработке важно понимать, когда и какой паттерн использовать, чтобы избежать ненужной сложности. Опытные разработчики часто комбинируют паттерны, адаптируя их под конкретные задачи.
Для более подробного изучения паттернов, предлагаю к просмотру 4 ранее записанных видео:
Порождающие паттерны проектирования на Java
Структурные паттерны проектирования на Java
Поведенческие паттерны проектирования на Java. Часть 1
Поведенческие паттерны проектирования на Java. Часть 2
Для полезного чтения, рекомендую сайт (может не работать без VPN)
#Java #для_новичков #beginner #on_request #patterns
Паттерны проектирования находят широкое применение в Java благодаря её объектно-ориентированной природе и богатой экосистеме.
1. Разработка корпоративных приложений
Java часто используется для создания сложных серверных систем, таких как банковские платформы или системы управления контентом. В таких проектах паттерны проектирования помогают структурировать код.
Например:
Фреймворк Spring: Использует паттерн "Внедрение зависимостей" для управления жизненным циклом объектов. Это позволяет разработчикам сосредоточиться на бизнес-логике, а не на создании и настройке объектов.
Hibernate: Применяет паттерн "Фасад" для упрощения работы с базой данных, скрывая сложность SQL-запросов за простым API.
2. Создание библиотек и API
Паттерны проектирования упрощают создание библиотек, которые другие разработчики могут использовать.
Например:
В Java API паттерн "Итератор" используется в коллекциях (например, List или Set), чтобы обеспечить единообразный способ перебора элементов.
Паттерн "Фабричный метод" применяется в классе java.util.Calendar, где метод getInstance() создает объекты в зависимости от локализации.
3. Управление многопоточностью
Java широко используется для многопоточного программирования, и паттерны помогают управлять сложностью.
Например:
Паттерн "Синглтон" часто используется для создания единственного экземпляра менеджера ресурсов, такого как пул соединений с базой данных.
Паттерн "Монитор" встроен в Java на уровне языка (через ключевое слово synchronized), что упрощает синхронизацию потоков.
4. Упрощение тестирования
Паттерны способствуют написанию тестируемого кода. Например, использование "Внедрения зависимостей" позволяет легко заменять реальные компоненты на заглушки (mocks) во время тестирования.
Проблемы и критика паттернов проектирования
Хотя паттерны проектирования чрезвычайно полезны, их применение не лишено недостатков:
Избыточная сложность: Иногда использование паттерна усложняет код там, где можно было бы обойтись более простым решением.
Злоупотребление: Новички могут применять паттерны везде, даже когда они не нужны, что приводит к "паттерн-ориентированному" программированию.
Контекстная зависимость: Не все паттерны подходят для всех ситуаций. Например, "Синглтон" может быть проблематичным в многопоточных приложениях, если не позаботиться о синхронизации.
В Java-разработке важно понимать, когда и какой паттерн использовать, чтобы избежать ненужной сложности. Опытные разработчики часто комбинируют паттерны, адаптируя их под конкретные задачи.
Для более подробного изучения паттернов, предлагаю к просмотру 4 ранее записанных видео:
Порождающие паттерны проектирования на Java
Структурные паттерны проектирования на Java
Поведенческие паттерны проектирования на Java. Часть 1
Поведенческие паттерны проектирования на Java. Часть 2
Для полезного чтения, рекомендую сайт (может не работать без VPN)
#Java #для_новичков #beginner #on_request #patterns
YouTube
Порождающие паттерны проектирования на Java. Онлайн встреча от 04.08.2024
Онлайн встреча нашего канала, которую мы провели совместно с подписчиками.
Сегодня мы рассмотрели на примерах следующие паттерны проектирования:
- Фабричный метод (Factory Method)
- Абстрактная фабрика (Abstract Factory)
- Прототип (Prototype)
- Одиночка…
Сегодня мы рассмотрели на примерах следующие паттерны проектирования:
- Фабричный метод (Factory Method)
- Абстрактная фабрика (Abstract Factory)
- Прототип (Prototype)
- Одиночка…
👍2
Есть предложение встретиться завтра в 16:00 по МСК на лайвкодинг!
Тема будет: Swagger
Тема будет: Swagger
Anonymous Poll
50%
Да, я обязательно приду! 🙂
45%
Я хотел бы прийти, но не могу 🤷♀️
5%
Не приду, фигню какую-то рассматриваете 🤢
👍1
Всем привет! ✌️
Приглашаю всех желающих сегодня собраться в Яндекс.Телемост в 16:00 по МСК!
В этот раз, дошла очередь рассказать о том, как в контроллере в экосистеме Spring, добавить Swagger.
И даже если раньше вы и не слышали о таком слове - уверен, Вам это пригодится!
Рассмотрим:
- Зачем нам вообще нужен Swagger
- Какие существуют основные принципы его написания
- Основные аннотации Swagger
- Все это посмотрим на примере кода
Приходите, будет весьма интересно🧑💻
Как всегда жду всех! 🫡
Приглашаю всех желающих сегодня собраться в Яндекс.Телемост в 16:00 по МСК!
В этот раз, дошла очередь рассказать о том, как в контроллере в экосистеме Spring, добавить Swagger.
И даже если раньше вы и не слышали о таком слове - уверен, Вам это пригодится!
Рассмотрим:
- Зачем нам вообще нужен Swagger
- Какие существуют основные принципы его написания
- Основные аннотации Swagger
- Все это посмотрим на примере кода
Приходите, будет весьма интересно
Как всегда жду всех! 🫡
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
"Твой первый проект — важнее, чем думаешь"
Не знаю как все, а я хорошо помню как писал свой первый проект😉
И пускай сейчас я лишь улыбнусь, вспоминая его, но тогда мне казалось, что я как минимум сделал что-то великое✈️
И наверно лишь после этого, я смог окончательно поверить, что стану программистом.💪
И если Вы 🫵 до сих пор считаете, что писать пет-проекты - это как минимум ерунда и никому не нужно, спешу огорчить - Вы не правы.
Так почему же стоит попробовать реализовать свою самую смелую и сложную идею, самым простым образом?
🔴 Первый завершённый проект — это точка отсчёта. Он показывает, что ты не просто учишься, а уже умеешь создавать что-то настоящее.
Это по сути, первая проверка твоих настоящих умений, а не копирование кода с видео или сайта. И пускай чатями ты все равно берешь код с Stack Owerflow или из LLM, но сама проработка идеи, наполнение смыслом безликого кода, порождает в тебе уверенность в своих силах.
🔴 Доведение проекта до конца — уже победа.
Ведь большинство бросает обучение, написание проекта на середине, а то и в самом начале!
Так вот, завершив проект, ты входишь в то меньшинство, кто реально двигается вперёд. Тех, кто преодолел свою лень, свои слабости и сомнения.
🔴 Обучение в процессе
Ведь в даже самом простом проекте ты сталкиваешься как минимум с:
⚫ структурой кода,
⚫ ООП (объектно-ориентированным программированием),
⚫ работой с вводом/выводом,
⚫ дебагом и ошибками,
⚫ поиском информации и документацией.
А это как минимум зарядка для твоего серого вещества!
🔴 Маленький проект - это уже портфолио.
Даже самый простой проект можно показать на GitHub. А это твой первый кирпичик в карьеру.
А если он написан с использованием топовых технологий - это лишний повод гордится собой и давать ссылку на GitHub собеседующему.
🔴 С каждым следующим проектом будет легче.
После первого проекта страх уходит. После второго ты начинаешь думать не “смогу ли?”, а “что сделаю дальше?”. После третьего ты уже сам можешь кого-то научить🙂
😎
#motivation
Не знаю как все, а я хорошо помню как писал свой первый проект
И пускай сейчас я лишь улыбнусь, вспоминая его, но тогда мне казалось, что я как минимум сделал что-то великое
И наверно лишь после этого, я смог окончательно поверить, что стану программистом.
И если Вы 🫵 до сих пор считаете, что писать пет-проекты - это как минимум ерунда и никому не нужно, спешу огорчить - Вы не правы.
Так почему же стоит попробовать реализовать свою самую смелую и сложную идею, самым простым образом?
Это по сути, первая проверка твоих настоящих умений, а не копирование кода с видео или сайта. И пускай чатями ты все равно берешь код с Stack Owerflow или из LLM, но сама проработка идеи, наполнение смыслом безликого кода, порождает в тебе уверенность в своих силах.
Ведь большинство бросает обучение, написание проекта на середине, а то и в самом начале!
Вы знаете сколько пользователей JavaRush достигли 10 уровня? Из нескольких миллионов - 3%! Да, Карл, всего 3%!
Так вот, завершив проект, ты входишь в то меньшинство, кто реально двигается вперёд. Тех, кто преодолел свою лень, свои слабости и сомнения.
Ведь в даже самом простом проекте ты сталкиваешься как минимум с:
А это как минимум зарядка для твоего серого вещества!
Даже самый простой проект можно показать на GitHub. А это твой первый кирпичик в карьеру.
А если он написан с использованием топовых технологий - это лишний повод гордится собой и давать ссылку на GitHub собеседующему.
После первого проекта страх уходит. После второго ты начинаешь думать не “смогу ли?”, а “что сделаю дальше?”. После третьего ты уже сам можешь кого-то научить
#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10 1
Предлагаем темы для разбора и публикации! 📖
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
🟢 темы, не выше уровня middle, чтоб был интерес общим.
🟢 один человек - одна тема.
🟢 Тема должна быть отдельным теоретически-практическим вопросом. Готовый проект - это не тема!
Жду Ваших предложений!👏
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
Жду Ваших предложений!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Голосуем за предложенные (одним человеком!) темы!
Anonymous Poll
27%
Keycloak
32%
MVC
30%
EntityManager
11%
EntityGraph
👍1
Изучаем Swagger
Встреча от 25.05.2025
Запись встречи -
YOUTUBE
RUTUBE
На сегодняшней встрече мы разобрали часто встречающуюся библиотеку - Swagger UI
Что мы успели:
➡️ Зачем нам вообще нужен Swagger UI
➡️ Какие существуют основные принципы его написания
➡️ Основные аннотации Swagger Core
➡️ Все это посмотрели на примере кода
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Кому нужно проект на гитхабе (кому не жалко поставьте звездочек)
Спасибо всем кто пришел, респект 🫡
Встреча от 25.05.2025
Запись встречи -
YOUTUBE
RUTUBE
На сегодняшней встрече мы разобрали часто встречающуюся библиотеку - Swagger UI
Что мы успели:
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Кому нужно проект на гитхабе (кому не жалко поставьте звездочек)
Спасибо всем кто пришел, респект 🫡
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
А вы знали, что термин Boilerplate (Шаблонный код) пришел к нам из начала 20 века?
Изначально термином Boiler plate описывалась согнутая в цилиндры сталь для изготовления водонагревателей. Затем начал применяться в СМИ для банального или неоригинального текста. Также этим термином называли металлические печатные формы с заранее подготовленным текстом, например, с рекламой или синдицированными колонками, которые передавались в небольшие местные газеты. По аналогии сами печатные формы тоже стали называть boilerplates. Одним из крупных поставщиков таких форм была компания Western Newspaper Union. Она предлагала газетам с небольшим географическим покрытием «готовые к печати истории, содержащие национальные или международные новости». Эти «истории» могли содержать рекламные объявления, размещённые рядом с обычным текстом.
proof
#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
"Пользовательский интерфейс — это лицо вашего продукта."
Алан Купер, отец визуального программирования (Visual Basic), сказал это в 1995 году в книге "About Face".
Немного хабра
#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Чтение на выходные: «Психбольница в руках пациентов. Алан Купер об интерфейсах»
Алан Купер — дизайнер и разработчик из США. Отец Visual Basic — языка программирования, на котором до сих пор работают макросы Office. Как личность сильно неравнодушен ко всему удобному. По...
👍1
Глубокое изучение типа данных double в Java: сравнение с целочисленными типами
Тип данных double в Java — это примитивный числовой тип, предназначенный для хранения вещественных чисел двойной точности, то есть чисел с плавающей запятой. Он используется везде, где необходима работа с дробями, приближёнными значениями, математическими и научными вычислениями, где целочисленных типов недостаточно.
Размер и назначение
double занимает 8 байт (64 бита) и поддерживает числа с высокой точностью в достаточно большом диапазоне — от ±10⁻³⁰⁸ до ±10³⁰⁸. При этом точность составляет около 15–17 десятичных цифр. Это делает double универсальным для большинства задач, связанных с вещественной арифметикой.
В отличие от int и long, которые могут хранить только целые числа, double может представлять дробные значения. Например, 3.14, -0.0001, 2.71828.
Формат хранения и особенности
Числа типа double хранятся в формате IEEE 754 — стандарте представления чисел с плавающей точкой.
Эти 64 бита делятся на три части:
1 бит знака;
11 бит на экспоненту;
52 бита на мантиссу (значащие цифры).
Такое представление даёт широкий диапазон значений, но не обеспечивает абсолютную точность — дробные значения могут быть представлены с ошибкой округления.
Сравнение с целочисленными типами
byte, short, int, long обеспечивают точную арифметику в рамках своего диапазона. double же — приближённую, и это накладывает ограничения.
Например, выражение 0.1 + 0.2 == 0.3 даст false, потому что 0.1 и 0.2 не имеют точного двоичного представления, и результат чуть отличается от 0.3.
double может без ошибок хранить целые числа, но только до 2⁵³ (около 9 квадриллионов). После этого точность теряется: не каждое целое число может быть представлено уникально.
Попытка точно представить большие целые (long) в double может привести к неожиданным ошибкам.
Автоматическое приведение типов
При работе в выражениях:
Все целочисленные типы (byte, short, int, long) автоматически продвигаются до double, если в выражении участвует double.
Приведение от double к целым типам выполняется явно, с усечением дробной части.
Пример:
Переполнение и особые значения
В отличие от целочисленных типов, double не оборачивается при переполнении, а уходит в бесконечность:
Также возможны:
NaN (Not a Number) — результат недопустимых операций (например, 0.0 / 0.0)
+Infinity и -Infinity — результат переполнения или деления на ноль
Производительность и использование
Арифметика с double обычно медленнее, чем с целыми числами, особенно на старых процессорах или в JVM без JIT-оптимизаций. В современных системах разница не всегда критична, но при массовых расчётах (for-циклы, обработка массивов) её стоит учитывать.
Когда использовать double, а когда — целые типы
Используйте double, если:
нужно представлять дробные числа;
важна относительная точность, а не абсолютная;
вы работаете с физикой, графикой, научными расчётами.
Выбирайте int или long, если:
работаете с точным счётом (деньги, единицы, индексы);
важна предсказуемость и надёжность арифметики;
нужны точные операции без округлений.
Выбирайте BigDecimal, если:
нужна максимальная точность и надежность расчетов.
Рекомендации
Для точных денежных расчётов не используйте double — он не гарантирует точность. Лучше использовать BigDecimal.
Избегайте == для сравнения double — сравнивайте с допустимой дельтой (например, Math.abs(a - b) < epsilon)
Помните, что double не хранит точных значений, даже для простых дробей вроде 0.1
#Java #для_новичков #beginner #double
Тип данных double в Java — это примитивный числовой тип, предназначенный для хранения вещественных чисел двойной точности, то есть чисел с плавающей запятой. Он используется везде, где необходима работа с дробями, приближёнными значениями, математическими и научными вычислениями, где целочисленных типов недостаточно.
Размер и назначение
double занимает 8 байт (64 бита) и поддерживает числа с высокой точностью в достаточно большом диапазоне — от ±10⁻³⁰⁸ до ±10³⁰⁸. При этом точность составляет около 15–17 десятичных цифр. Это делает double универсальным для большинства задач, связанных с вещественной арифметикой.
В отличие от int и long, которые могут хранить только целые числа, double может представлять дробные значения. Например, 3.14, -0.0001, 2.71828.
Формат хранения и особенности
Числа типа double хранятся в формате IEEE 754 — стандарте представления чисел с плавающей точкой.
Эти 64 бита делятся на три части:
1 бит знака;
11 бит на экспоненту;
52 бита на мантиссу (значащие цифры).
Такое представление даёт широкий диапазон значений, но не обеспечивает абсолютную точность — дробные значения могут быть представлены с ошибкой округления.
Сравнение с целочисленными типами
byte, short, int, long обеспечивают точную арифметику в рамках своего диапазона. double же — приближённую, и это накладывает ограничения.
Например, выражение 0.1 + 0.2 == 0.3 даст false, потому что 0.1 и 0.2 не имеют точного двоичного представления, и результат чуть отличается от 0.3.
double может без ошибок хранить целые числа, но только до 2⁵³ (около 9 квадриллионов). После этого точность теряется: не каждое целое число может быть представлено уникально.
Попытка точно представить большие целые (long) в double может привести к неожиданным ошибкам.
Автоматическое приведение типов
При работе в выражениях:
Все целочисленные типы (byte, short, int, long) автоматически продвигаются до double, если в выражении участвует double.
Приведение от double к целым типам выполняется явно, с усечением дробной части.
Пример:
int x = 5;
double y = 2.5;
double z = x + y; // x автоматически превращается в double
int i = (int) y; // i = 2, дробная часть отбрасывается
Переполнение и особые значения
В отличие от целочисленных типов, double не оборачивается при переполнении, а уходит в бесконечность:
double x = Double.MAX_VALUE;
System.out.println(x * 2); // Infinity
Также возможны:
NaN (Not a Number) — результат недопустимых операций (например, 0.0 / 0.0)
+Infinity и -Infinity — результат переполнения или деления на ноль
Производительность и использование
Арифметика с double обычно медленнее, чем с целыми числами, особенно на старых процессорах или в JVM без JIT-оптимизаций. В современных системах разница не всегда критична, но при массовых расчётах (for-циклы, обработка массивов) её стоит учитывать.
Когда использовать double, а когда — целые типы
Используйте double, если:
нужно представлять дробные числа;
важна относительная точность, а не абсолютная;
вы работаете с физикой, графикой, научными расчётами.
Выбирайте int или long, если:
работаете с точным счётом (деньги, единицы, индексы);
важна предсказуемость и надёжность арифметики;
нужны точные операции без округлений.
Выбирайте BigDecimal, если:
нужна максимальная точность и надежность расчетов.
Рекомендации
Для точных денежных расчётов не используйте double — он не гарантирует точность. Лучше использовать BigDecimal.
Избегайте == для сравнения double — сравнивайте с допустимой дельтой (например, Math.abs(a - b) < epsilon)
Помните, что double не хранит точных значений, даже для простых дробей вроде 0.1
#Java #для_новичков #beginner #double
👍5
Продолжаем выбирать темы для разбора и голосовать за рассмотрение предложенных! 🤓
Голосуем за тему к рассмотрению в эти выходные!
Выбираем новую тему!
(можете предложить что-то из того что предлагали на прошлой неделе и что проигрывает в голосовании!)
Не стесняемся!✌️
Голосуем за тему к рассмотрению в эти выходные!
Выбираем новую тему!
(можете предложить что-то из того что предлагали на прошлой неделе и что проигрывает в голосовании!)
Не стесняемся!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Что выведет код?
#Tasks
public class Task260525 {
public static void main(String[] args) {
double d1 = 0.1 + 0.2;
double d2 = 0.3;
System.out.println(d1 == d2);
}
}
#Tasks
👍1
👍1
Объясните основные принципы ООП в Java? 🤓
Ответ:
Инкапсуляция: сокрытие данных (через private) и предоставление доступа через методы (геттеры/сеттеры).
Наследование: класс может наследовать свойства и методы другого класса (extends).
Полиморфизм: возможность использовать объекты разных классов через общий интерфейс или родительский класс.
Абстракция: сокрытие деталей реализации, предоставление только необходимого интерфейса (через абстрактные классы или интерфейсы).
#собеседование
Ответ:
Наследование: класс может наследовать свойства и методы другого класса (extends).
Полиморфизм: возможность использовать объекты разных классов через общий интерфейс или родительский класс.
Абстракция: сокрытие деталей реализации, предоставление только необходимого интерфейса (через абстрактные классы или интерфейсы).
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1
А вы знали, что термин Cursor (Курсор) пришел к нам из древней Греции?
Cursor в переводе с латыни — бегун. Этим словом называли прозрачную каретку на логарифмической линейке — бегунок, ползунок. На бегунке была нанесена тончайшая линия для выбора нужной позиции на линейке. Позднее термин «курсор» перекочевал в компьютеры.
#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
"Если вам не стыдно за первую версию продукта, вы запустились слишком поздно."
Рид Хоффман, сооснователь LinkedIn, сказал это в 2009 году в интервью о стартапах.
Биография
#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
Wikipedia
Хоффман, Рид
Рид Га́рретт Хо́ффман (англ. Reid Garrett Hoffman; род. 5 августа 1967, Станфорд, Калифорния, США) — американский предприниматель, венчурный капиталист и писатель. Сооснователь LinkedIn, социальной сети для установления деловых контактов.
👍1
Введение в Liquibase
1. Что такое Liquibase и зачем он нужен
Liquibase — это инструмент для управления изменениями в структуре базы данных (миграциями).
Он позволяет:
Контролировать эволюцию схемы БД через версионированные скрипты.
Автоматизировать применение изменений (создание таблиц, изменение столбцов и т. д.).
Обеспечивать консистентность между разными окружениями (dev, test, prod).
Поддерживать откат изменений (rollback) в случае ошибок.
Проблемы, которые решает Liquibase:
Ручное выполнение SQL-скриптов на разных серверах.
Отсутствие истории изменений БД.
Несовместимость версий схемы БД между разработчиками.
2. Поддерживаемые СУБД
Liquibase работает с большинством популярных баз данных:
Реляционные: PostgreSQL, MySQL, Oracle, SQL Server, H2, SQLite.
NoSQL: MongoDB (с ограниченной поддержкой).
Облачные: Amazon RDS, Google Cloud SQL.
3. Принципы работы
Changelog (журнал изменений)
Это главный файл, который ссылается на все изменения (changeSet’ы). Хранится в формате XML, YAML, JSON или SQL.
ChangeSet (набор изменений)
Минимальная единица изменения в Liquibase.
Каждый changeSet:
Имеет уникальный идентификатор (id + author).
Описывает одно или несколько изменений (например, создание таблицы).
Может содержать атрибуты (runOnChange, failOnError).
Контроль версий
Liquibase ведет таблицы в БД:
DATABASECHANGELOG — журнал примененных changeSet’ов.
DATABASECHANGELOGLOCK — блокировка для предотвращения конфликтов.
4. Форматы changelog-файлов
XML — строгая структура, но многословный.
YAML — лаконичный, но чувствителен к отступам.
SQL — прост для DBA, но менее гибкий.
5. Интеграция Liquibase в Java-проект (Maven/Gradle)
Maven
Добавить в pom.xml:
Конфигурация в application.properties (Spring Boot):
Gradle
Добавить в build.gradle:
#Java #middle #Liquibase
1. Что такое Liquibase и зачем он нужен
Liquibase — это инструмент для управления изменениями в структуре базы данных (миграциями).
Он позволяет:
Контролировать эволюцию схемы БД через версионированные скрипты.
Автоматизировать применение изменений (создание таблиц, изменение столбцов и т. д.).
Обеспечивать консистентность между разными окружениями (dev, test, prod).
Поддерживать откат изменений (rollback) в случае ошибок.
Проблемы, которые решает Liquibase:
Ручное выполнение SQL-скриптов на разных серверах.
Отсутствие истории изменений БД.
Несовместимость версий схемы БД между разработчиками.
2. Поддерживаемые СУБД
Liquibase работает с большинством популярных баз данных:
Реляционные: PostgreSQL, MySQL, Oracle, SQL Server, H2, SQLite.
NoSQL: MongoDB (с ограниченной поддержкой).
Облачные: Amazon RDS, Google Cloud SQL.
3. Принципы работы
Changelog (журнал изменений)
Это главный файл, который ссылается на все изменения (changeSet’ы). Хранится в формате XML, YAML, JSON или SQL.
ChangeSet (набор изменений)
Минимальная единица изменения в Liquibase.
Каждый changeSet:
Имеет уникальный идентификатор (id + author).
Описывает одно или несколько изменений (например, создание таблицы).
Может содержать атрибуты (runOnChange, failOnError).
Контроль версий
Liquibase ведет таблицы в БД:
DATABASECHANGELOG — журнал примененных changeSet’ов.
DATABASECHANGELOGLOCK — блокировка для предотвращения конфликтов.
4. Форматы changelog-файлов
XML — строгая структура, но многословный.
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.6.xsd">
<changeSet id="1" author="alex">
<createTable tableName="users">
<column name="id" type="INT" autoIncrement="true">
<constraints primaryKey="true"/>
</column>
<column name="username" type="VARCHAR(50)"/>
</createTable>
</changeSet>
</databaseChangeLog>
YAML — лаконичный, но чувствителен к отступам.
databaseChangeLog:
- changeSet:
id: 1
author: alex
changes:
- createTable:
tableName: users
columns:
- column:
name: id
type: INT
autoIncrement: true
constraints:
primaryKey: true
- column:
name: username
type: VARCHAR(50)
SQL — прост для DBA, но менее гибкий.
--liquibase formatted sql
--changeset alex:1
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50)
);
5. Интеграция Liquibase в Java-проект (Maven/Gradle)
Maven
Добавить в pom.xml:
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.20.0</version>
</dependency>
Конфигурация в application.properties (Spring Boot):
spring.liquibase.change-log=classpath:db/changelog/db.changelog-master.yaml
spring.liquibase.url=jdbc:postgresql://localhost:5432/mydb
spring.liquibase.user=user
spring.liquibase.password=pass
Gradle
Добавить в build.gradle:
implementation 'org.liquibase:liquibase-core:4.20.0'
#Java #middle #Liquibase
👍8
Сегодня каналу исполнился год! 🥳
Начинавшийся как попытка освоить телеграм-каналы и найти единомышленников в программировании на Java - сегодня наш канал, небольшое, но уникальное сообщество, в котором объединено стремление охватить все аспекты Java, с встречами и интересным общением!🤓
Вот немного статистики по каналу:
🔵 Сегодня нас в канале: 669 человек
🔵 Постов в канале: 2406 или 6.6 постов в день
🔵 Постов содержащих обучающую информацию: ~ 440
🔵 Постов с уникальными задачами: 257
🔵 Постов с IT-мемами: 415
🔵 Постов с IT-фактами: 89
🔵 Постов с IT-цитатами и биографиями: 88
🔵 Проведено встреч и опубликовано видео: 42
🔵 Подписчиков на YouTube: 220
🔵 Потрачено на рекламу/заработано: 0 рублей
Много это или мало - судить Вам))
Как бы то ни было, канал для меня сейчас - это прекрасная возможность не стагнировать, повторять пройденное и изучать новое, знакомиться и общаться с интересными людьми.
И в любом случае, я продолжу его развивать, наполнять информацией и стараться дать то, чего Вы все здесь ищете.
Спасибо всем, кто поддерживает канал, помогает с лайвкодингом, приходит на встречи.
Ценю🍸
С днем рождения нас❤️
Начинавшийся как попытка освоить телеграм-каналы и найти единомышленников в программировании на Java - сегодня наш канал, небольшое, но уникальное сообщество, в котором объединено стремление охватить все аспекты Java, с встречами и интересным общением!
Вот немного статистики по каналу:
Много это или мало - судить Вам))
Как бы то ни было, канал для меня сейчас - это прекрасная возможность не стагнировать, повторять пройденное и изучать новое, знакомиться и общаться с интересными людьми.
И в любом случае, я продолжу его развивать, наполнять информацией и стараться дать то, чего Вы все здесь ищете.
Спасибо всем, кто поддерживает канал, помогает с лайвкодингом, приходит на встречи.
Ценю
С днем рождения нас
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15🍾4👍3 1