Liquibase无法从环境变量读取变更日志中的参数
解决Liquibase环境变量无法替换的问题
问题原因
你的liquibase_data.properties文件里的${DB1_HOSTNAME}没有被Liquibase解析——默认情况下,Liquibase只会处理变更日志中的占位符,不会递归解析properties文件里的环境变量占位符,所以最终插入的是字面量字符串${DB1_HOSTNAME}。
解决方法
方法一:直接在变更日志中引用环境变量
跳过中间的liquibase_data.properties文件,直接在变更日志里使用环境变量占位符,Liquibase会自动读取系统环境变量完成替换:
<changeSet author="dmohanpuria (generated)" id="1710307015865-2"> <insert tableName="datasource_detail"> <column name="dade_id" valueNumeric="1"/> <column name="dade_client_id" valueNumeric="1"/> <column name="dade_source_url" value="${DB1_HOSTNAME}"/> <column name="dade_recovery_url"/> <column name="dade_driver_class_name" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> <column name="dade_dialect" value="MSSQL"/> </insert> </changeSet>
方法二:开启Liquibase的属性替换功能
如果必须通过liquibase_data.properties中转,需要启动Liquibase时开启属性递归替换:
- 启动命令添加参数:
liquibase update -Dliquibase.property.substitution.enabled=true - 或者在主
liquibase.properties文件中添加配置:property.substitution.enabled=true
开启后,Liquibase会解析liquibase_data.properties里的${DB1_HOSTNAME},替换成环境变量的值,变更日志里的${db1.name}就能拿到正确结果。
方法三:通过系统属性传递值
如果环境变量读取有问题,也可以在启动Liquibase时直接传递系统属性,覆盖环境变量:
liquibase update -DDB1_HOSTNAME=your-database-host
这种方式不管是properties文件还是变更日志里的占位符都会被正确替换。
内容的提问来源于stack exchange,提问作者Deepti
相关产品推荐
相关产品推荐

