liquibase maven插件禁用校验和

时间:2016-03-18 16:34:26

标签: maven-3 liquibase

我使用liquibase和maven-3。第一次运行按预期工作。连续运行(即使sql文件包含更改)也会失败,因为它们被视为等同于liquibase并被忽略(校验和)。

我的sql脚本中的所有sql操作都考虑了以前的运行,所以我不想要这种行为。通过下面的这个设置,无论更改如何,我如何强制liquibase 始终执行我的脚本?

正如您在下面所见,我已经尝试将clearCheckSums设置为目标,实际上它会清除哈希值,但仍然没有运气(因此已被注释掉)。 这是我创建的个人资料

<profile>
    <id>liquibase-executions</id>
    <build>
        <defaultGoal>process-resources</defaultGoal>
        <plugins>
            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>3.4.2</version>
                <dependencies>
                    <dependency>
                        <groupId>org.postgresql</groupId>
                        <artifactId>postgresql</artifactId>
                        <version>${postgres.version}</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>update-schema</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>update</goal>
                            <!--<goal>clearCheckSums</goal>-->
                        </goals>
                        <configuration>
                            <driver>org.postgresql.Driver</driver>
                            <url>jdbc:postgresql://${db.url}</url>
                            <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                            <changeLogFile>${basedir}/src/main/resources/liquibase.sql</changeLogFile>
                        </configuration>
                    </execution>
                    <execution>
                        <id>update-data</id>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>update</goal>
                            <!--<goal>clearCheckSums</goal>-->
                        </goals>
                        <configuration>
                            <driver>org.postgresql.Driver</driver>
                            <url>jdbc:postgresql://${db.url}</url>
                            <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                            <changeLogFile>${basedir}/src/main/resources/liquibase-populate.sql</changeLogFile>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>

这就是我执行它的方式

mvn process-resources -Pliquibase-executions -Ddb.url=POSTGRES_IP:5432/POSTGRES_DB -Dliquibase.username=POSTGRES_USERNAME

1 个答案:

答案 0 :(得分:1)

Liquibase Maven插件expects一个changelog file,没有普通的.sql文件。此文件应包含您希望Liquibase执行的changeSets。每次运行Liquibase时都可以指示运行这些changeSet(默认情况下它们只执行一次)。所以没有必要篡改校验和。例如,您的changelog文件可能如下所示:

<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.1.xsd">

    <changeSet id="your-id" author="msp" runAlways="true">
    ...
    </changeSet>
</databaseChangeLog>

实现预期行为的重要部分是在liquibase变更集中设置runAlways="true"属性。