【发布时间】:2020-05-08 04:28:06
【问题描述】:
我正在将一个基于 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 的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
【问题讨论】:
标签: spring-boot liquibase