middle
Как использовать параметры и подстановки (property substitution)?
Property substitution — механизм Liquibase, позволяющий использовать переменные в changelog-файлах для адаптации миграций под разные окружения и СУБД.
Определение параметров в changelog
Пример с параметрами в XML
<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">
<property name="table.prefix" value="app_"/>
<property name="varchar.type" value="VARCHAR" dbms="postgresql"/>
<property name="varchar.type" value="NVARCHAR" dbms="mssql"/>
<property name="id.type" value="BIGINT"/>
<changeSet id="14" author="dev">
<createTable tableName="${table.prefix}users">
<column name="id" type="${id.type}" autoIncrement="true">
<constraints primaryKey="true"/>
</column>
<column name="name" type="${varchar.type}(255)"/>
</createTable>
</changeSet>
</databaseChangeLog>
Передача параметров
Через командную строку:
Пример
liquibase -Dtable.prefix=myapp_ update
Через Spring Boot:
Пример
spring.liquibase.parameters.table.prefix=app_
spring.liquibase.parameters.schema.name=banking
Через файл liquibase.properties:
Пример
parameter.table.prefix=app_
parameter.schema.name=banking
Приоритет параметров (от высшего к низшему)
- Параметры из командной строки (
-D) - Параметры из
liquibase.properties - Параметры из Spring Boot (
spring.liquibase.parameters.*) - Параметры, определённые в
<property>внутри changelog
На собеседовании: важно знать приоритет параметров и типичный кейс использования — адаптация типов данных под разные СУБД (VARCHAR для PostgreSQL, NVARCHAR для MSSQL). Частая ошибка — не упомянуть, что параметры из командной строки имеют наивысший приоритет.