【问题标题】:How to pass property value dynamically to sql tag in liquibase changelog如何将属性值动态传递给 liquibase 更改日志中的 sql 标记
【发布时间】:2021-08-24 13:40:19
【问题描述】:

我目前正在为某些标记的属性分配预定义的属性值,但我也想在 xml 标记中使用它。下面是一个基于 Liquibase 文档的示例:

<?xml version="1.0" encoding="utf-8"?>
<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-3.4.xsd"
>

    <property  name="schema.name"  value="DBPECG"/>

    <changeSet id="20201005103200-1" author="felipe.rudolfe" objectQuotingStrategy="QUOTE_ALL_OBJECTS">
        <createTable schemaName="${schema.name}" tableName="TB_IES" >
         .
         .
         .
        </createTable>
    </changeSet>
</databaseChangeLog>

这就是我想要做的。我想以这样的方式使用 schema.name,inside sql tag:

<changeSet id="20201005103200-3" author="felipe.rudolfe" objectQuotingStrategy="LEGACY">
    <sql>
        ALTER TABLE ${schema.name}.TB_IES ADD CONSTRAINT...
    </sql>
</changeSet>

有没有办法做到这一点?

【问题讨论】:

  • XML 通常有一个围绕标签的根元素;但是,您的示例在根目录中有一个 property 标记和一个 changeSet 标记。你给出了完整的结构吗?还是周围有根标签?
  • 是的,我会纠正它。谢谢你的提示

标签: sql xml oracle liquibase


【解决方案1】:

Liquibase 允许动态替换更改日志文件中的属性。我们可以在一个文件中配置多个属性,然后在需要的地方使用它们。在您的情况下,我们可以使用一些值配置属性 "schemaName",然后使用 ${schemaName} 语法在更改日志文件中使用它。

Liquibase 按以下顺序为配置的属性分配或优先考虑值:

  1. 作为传递给 liquibase runner 的属性。
  2. 作为 JVM 系统属性
  3. 作为环境变量
  4. 如果您通过命令行运行 liquibase,则作为 CLI 属性
  5. 在 liquibase.properties 文件中
  6. 在参数块中(DATABASECHANGELOG 的属性元素 表)

您可以按照以下示例代码 sn-p 进行操作:

<?xml version="1.0" encoding="UTF-8"?>
<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-3.8.xsd">

    <changeSet author="author" id="some-unique-id" context="some-context">
        **Your SQL query/ transactional logic goes here**
        <sql>
             ALTER TABLE ${schemaName}.TB_IES ADD CONSTRAINT...
        </sql>
    </changeSet>
    
</databaseChangeLog>

liquibase.properties文件中,我将配置这个属性如下:

schemaName=DBPECG

注意: 上面的示例使用 1 个属性 (schemaName)。您只能使用更多。

如果您在创建"liquibase.properties" 文件方面需要帮助,请访问this link

干杯!

【讨论】:

    猜你喜欢
    • 2017-11-23
    • 2015-06-29
    • 1970-01-01
    • 2019-05-26
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 2017-10-14
    相关资源
    最近更新 更多