【问题标题】:apply migration in all schema that i have using liquibase在我使用 liquibase 的所有模式中应用迁移
【发布时间】:2026-01-14 16:55:02
【问题描述】:

我在这个应用程序中使用 spring boot 开发了一个网站,我正在使用架构多租户来管理我的数据库。我想使用 Liquibase 作为数据库迁移工具。问题是,当我进行迁移时,新的修改(修改意味着通过将新列添加到不同的表并添加新表)仅适用于公共架构,不适用于其他 sachems,我想要什么,当我做迁移我希望新的修改适用于所有 sachems ps:我正在使用hibernate来创建新的sachems

【问题讨论】:

    标签: spring-boot hibernate liquibase


    【解决方案1】:

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

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

    schema1=ABC
    schema2=PQR
    

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

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

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

    1.向架构 ABC 中的某个表添加列

    <?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="authorName" id="some-unique-id" dbms="${dbType}" context="some-context">
           <sql endDelimiter=";" splitStatements="true" stripComments="true">
                **My SQL query/ transactional logic goes here**
                ALTER TABLE "${schema1}"."TableName" ADD COLUMN COLUMNNAME DATATYPE;
           </sql>
        </changeSet>
        
    </databaseChangeLog>
    

    2。在 PQR 架构中创建表:

    <?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="authorName" id="some_unique_id" dbms="${dbType}" context="some_context">
            <createTable tableName="TableName" schemaName="${schema2}">
                <column name="id" type="VARCHAR(200)" />
                <column name="name" type="VARCHAR(255)"/>
            </createTable>
        </changeSet>
    
    </databaseChangeLog>
    

    注意:上面的例子使用了 2 个属性(schema1 和 schema2)。您只能使用更多。

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

    干杯!

    【讨论】:

      最近更新 更多