java - CustomTaskChange 在调用 updateSQL 时实际执行

标签 java liquibase

我在 Liquibase 中有一个 CustomTaskChange(除了其他 ChangeSet)。 我希望我的应用程序在实际执行之前显示所有 ChangeSet 的 SQL。根据我的理解,updateSQL 应该预览 SQL 并且不执行任何操作。但是,CustomTaskChange 会立即执行。我本以为调用 updateSQL 时会忽略 CustomTaskChange

变更集:

<changeSet id="2" author="clu">
    <comment>Print out 'helloworld'.</comment>
    <customChange class="path.to.HelloWorldUpdate">
</customChange>
</changeSet>

自定义任务更改:

public class HelloWorldUpdate implements CustomTaskChange {
    @Override
public void execute(Database database) throws CustomChangeException {
    System.out.println("HELLO WORLD!!");
}
}

调用updateSQL时,控制台打印“HELLO WORLD!!”

这是一个错误吗?有解决办法吗?

谢谢!

[已编辑]

最佳答案

CustomTaskChange的描述说:

Interface to implement when creating a custom change that does not actually
generate SQL. If you are updating a database through SQL, 
implementing CustomSqlChange is preferred because the SQL can either 
be executed directly or saved to a text file for later use depending 
on the migration mode used.

所以使用 CustomSqlChange反而。

generateStatements() 方法中,您还可以在返回 SqlStatement[] 数组之前打印出 sql。 println 每次都会运行。但是,您创建的语句不会应用于数据库,而只是在您选择使用 updateSQL 运行它时打印到标准输出。

关于java - CustomTaskChange 在调用 updateSQL 时实际执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24080892/

相关文章:

java - 尝试在 Java 中初始化 Bouncy CaSTLe 密码时, key 长度不是 128/192/256 位

xml - liquibase数据库重构xml createIndex

sql - 对于 Liquibase,使用唯一的 <createIndex> 和使用具有唯一约束的 <column> 之间有区别吗?

liquibase - 数据库变更管理 - 如何处理分支和主干上的变更

Java - 数组元素的排列 - 解释清楚

java - 驱动程序 :com. mysql.jdbc.Driver@2b7374f8 为 URL 返回 null

docker - 旋转kilna/liquibase-postgres时的“/bin/sh: [/bin/sh,: not found”响应

mysql - 更新到 3.2.3 时的 liquibase 变更集

java - Spring Rest 从 JSON 生成器调用 JSON 响应大小

java - Android 打印框架 - 将自定义 pdf 静默打印到预定打印机