Параметры журнала изменений Liquibase не обрабатываются - PullRequest
0 голосов
/ 08 мая 2020

Я обновляю огромный проект на основе 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

1 Ответ

0 голосов
/ 08 мая 2020

Нашел: dbms определений свойств устаревшего кода упоминали только mysql, и это хорошо работало с нашим mariadb при использовании Liquibase 3.5. Теперь, когда я добавил mariadb в dbms-list определений свойств, все снова заработало.

...