我使用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
答案 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"
属性。