junior
Как организовать changelog-и с помощью include и includeAll?
Include и includeAll — два механизма декомпозиции changelog-ов, позволяющие разбить один большой файл на логические модули.
include
Включает конкретный файл changelog:
Пример master changelog с include
<?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-latest.xsd">
<include file="db/changelog/releases/release-1.0.xml"/>
<include file="db/changelog/releases/release-1.1.xml"/>
<include file="db/changelog/releases/release-2.0.xml"/>
</databaseChangeLog>
includeAll
Включает все файлы из указанной директории (в алфавитном порядке):
Пример
<databaseChangeLog ...>
<includeAll path="db/changelog/changes/"/>
</databaseChangeLog>
Типичная структура проекта
Пример
src/main/resources/
└── db/
└── changelog/
├── db.changelog-master.xml (корневой changelog)
├── changes/
│ ├── 001-create-users.xml
│ ├── 002-create-accounts.xml
│ ├── 003-add-email-to-users.xml
│ └── 004-create-transactions.xml
└── data/
├── currencies.csv
└── default-settings.csv
Организация по релизам
Пример
src/main/resources/
└── db/
└── changelog/
├── db.changelog-master.xml
├── release-1.0/
│ ├── 001-create-users.xml
│ └── 002-create-accounts.xml
└── release-1.1/
├── 001-add-email-to-users.xml
└── 002-create-transactions.xml
Master changelog:
Пример
<databaseChangeLog ...>
<includeAll path="db/changelog/release-1.0/"/>
<includeAll path="db/changelog/release-1.1/"/>
</databaseChangeLog>
При использовании includeAll файлы включаются в алфавитном порядке, поэтому нумерация в именах файлов обязательна (001-, 002- и т.д.).
На собеседовании: важно объяснить разницу между include и includeAll и знать про алфавитный порядок в includeAll. Частая ошибка — не упомянуть необходимость нумерации файлов при использовании includeAll.