Я обновляю огромный проект на основе Spring Boot 1.x до Spring Boot 2.2. В старой версии использовалась Liquibase 3.5, а в текущей ветке обновления используется Liquibase 3.8.
Основной файл журнала изменений имеет следующую структуру:
...
<include file="initialize-liquibase-properties.xml" />
<include file="001-first-changeset.yml" />
...
Т.е. первый включенный журнал изменений - это файл, содержащий глобальные настройки property
, используемые во всех других файлах журнала изменений.
Это отлично работало в ветке старого кода, но теперь в ветке обновления все сломалось: свойства, похоже, не подбираются .
Сначала я ударился головой об стену, за исключением того, что получалось при запуске приложения: Java s ArrayIndexOutOfBoundsException
. Я подумал: "Что за ...?!?" Затем я начал отладку и обнаружил, что устаревший XML -changelog вызывал исключение. Наконец, я понял, что проблема была вызвана использованием ${long_text_type}
. long_text_type
определено в вышеупомянутом файле initialise-liquibase-properties.xml
как таковое:
<property name="long_text_type" dbms="postgresql, mysql" value="ntext" />
<property name="long_text_type" dbms="h2" value="nvarchar(100000)" />
Изменилась ли система чтения свойств Liquibase с 3.5 на 3.8?
В качестве обходного пути я использую подход, определенный здесь: https://reflectoring.io/database-migration-spring-boot-liquibase/: мой application.yml
теперь содержит, например:
---
spring:
profiles: test
liquibase:
parameters:
long_text_type: nvarchar(1000000)
---
spring:
profiles: native
liquibase:
parameters:
long_text_type: ntext