gpt4 book ai didi

nullpointerexception - 运行 Liquibase : Unknown reason Throwing NPE 时出现意外错误

转载 作者:行者123 更新时间:2023-12-05 06:18:38 25 4
gpt4 key购买 nike

很长时间以来一直在使用 Liquibase,并且非常喜欢它。但是,在我目前正在进行的项目中,我遇到了一个问题,我似乎无法找到原因。

我可以从命令行(使用更新)运行每个 changelog/feature/*.xml 文件,一切都会成功。

我可以从命令行(使用更新)运行每个 db.changelog-*.xml 文件(master 除外),一切都会成功。

但是当我尝试运行 db.changelog-master 文件时,我得到:

Starting Liquibase at Tue, 14 Apr 2020 11:49:47 CDT (version 3.8.0 built at 2019-08-15T20:38:06Z)
Liquibase Community 3.8.0 by Datical
Unexpected error running Liquibase: Unknown reason
liquibase.exception.ChangeLogParseException: liquibase.exception.SetupException
at liquibase.parser.core.xml.AbstractChangeLogParser.parse(AbstractChangeLogParser.java:25) ~[liquibase.jar:na]
at liquibase.Liquibase.getDatabaseChangeLog(Liquibase.java:217) ~[liquibase.jar:na]
at liquibase.Liquibase.update(Liquibase.java:190) ~[liquibase.jar:na]
at liquibase.Liquibase.update(Liquibase.java:179) ~[liquibase.jar:na]
at liquibase.integration.commandline.Main.doMigration(Main.java:1223) [liquibase.jar:na]
at liquibase.integration.commandline.Main.run(Main.java:209) [liquibase.jar:na]
at liquibase.integration.commandline.Main.main(Main.java:132) [liquibase.jar:na]
Caused by: liquibase.exception.SetupException: null
at liquibase.changelog.DatabaseChangeLog.includeAll(DatabaseChangeLog.java:531) ~[liquibase.jar:na]
at liquibase.changelog.DatabaseChangeLog.handleChildNode(DatabaseChangeLog.java:398) ~[liquibase.jar:na]
at liquibase.changelog.DatabaseChangeLog.load(DatabaseChangeLog.java:308) ~[liquibase.jar:na]
at liquibase.parser.core.xml.AbstractChangeLogParser.parse(AbstractChangeLogParser.java:23) ~[liquibase.jar:na]
... 6 common frames omitted
Caused by: java.lang.NullPointerException: null
at java.util.AbstractCollection.addAll(AbstractCollection.java:343) ~[na:1.8.0_242]
at liquibase.integration.commandline.CommandLineResourceAccessor.list(CommandLineResourceAccessor.java:44) ~[liquibase.jar:na]
at liquibase.resource.CompositeResourceAccessor.list(CompositeResourceAccessor.java:40) ~[liquibase.jar:na]
at liquibase.changelog.DatabaseChangeLog.includeAll(DatabaseChangeLog.java:506) ~[liquibase.jar:na]
... 9 common frames omitted


For more information, please use the --logLevel flag

我确实找到了一个旧的 View 和触发器,它们是在研究项目期间为不同的模式创建的,它们从未在这个模式中运行过(也不在这个 DATABASECHANGELOG 中)。它们已被删除,但问题仍然存在。

运行:

  • macOS Catalina 10.15.3
  • openjdk 版本“1.8.0_242”
  • OpenJDK 运行时环境(Zulu 8.44.0.11-CA-macosx)(构建1.8.0_242-b20)
  • OpenJDK 64 位服务器虚拟机 (Zulu 8.44.0.11-CA-macosx)(构建25.242-b20,混合模式)
  • Oracle Database 11g 企业版 11.2.0.2.0 版
  • 64 位生产 PL/SQL 版本 11.2.0.2.0 生产
  • 核心 11.2.0.2.0 生产
  • 适用于 Linux 的 TNS:版本 11.2.0.2.0 生产
  • NLSRTL 版本 11.2.0.2.0 生产
  • Liquibase 3.8.0

尝试了我能想到的一切。有人有什么想法吗?


**更新 2020 年 4 月 29 日**
我有更多信息 - 我发现了正在发生的事情,但解决这个问题的计划没有奏效。

内容:显然 Liqiubase 在版本 3.4.2 和 3.5.5 之间的某个地方更改了 includeAll 路径:请参见“Upgrade from 3.4.2 to 3.5.5 or higher” '

我从运行 3.4.2 的遗留系统复制了我们的 liquibase 设置。在 db.changelog-master.xml 文件中,它有 <includeAll path="/features"/> (前导斜线)。但是,在新项目上,我升级到了 3.8.0。 includeAll 是引发异常的原因。

新值为 <includeAll path="features/"/> (尾部斜线)。 DATABASECHANGELOG 中 FILENAME 列的格式相同,即 features/20191024-LD-1.xml

在文档中,有一个命令行维护命令看起来非常适合此修复:cleanCheckSums。根据网站:

Removes current checksums from database. On next update changesetsthat have already been deployed will have their checksums recomputed,and changesets that have not been deployed will be deployed.

挑战是,cleanCheckSums 使 MD5SUM 列为空,EXECTYPE 列已执行,并且每一行都有一个填充的 DEPLOYMENT_ID,但下一个更新命令会尝试重新运行所有变更集。

这是我们为修复制定的计划:

步骤

  1. 更改db.changelog-master.xml中的includeAll参数路径:
    <includeAll path="features/"/>

  2. 运行清算 clearCheckSums:
    $LIQUIBASE_HOME/liquibase \ --driver=oracle.jdbc.OracleDriver \ --classpath=/data/apps/liquibase-3.8.0/ojdbc7.jar \ --url={pathToDatabase} \ --username={dbUserName} \ --password={dbUserPass} \ clearCheckSums

  3. 将数据库列文件名固定为预期格式的 SQL
    似乎是完全相同的格式:
    旧:features/20191024-LD-1.xml
    新测试:features/20200429-deleteme.xml

  4. 运行主更新:
    $LIQUIBASE_HOME/liquibase \ --driver=oracle.jdbc.OracleDriver \ --classpath=/data/apps/liquibase-3.8.0/ojdbc7.jar \ --url={pathToDatabase} \ --changeLogFile=db.changelog-master.xml \ --username={dbUserName} \ --password={dbUserPass} \ update

有人知道我错过了什么吗?

最佳答案

请尝试以下命令:

liquibase changelogSync

此命令将创建与 DATABASECHANGELOG 跟踪表中的 db.changelog-master.xml 变更集对应的行,并将这些变更集视为已部署。

关于nullpointerexception - 运行 Liquibase : Unknown reason Throwing NPE 时出现意外错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61213654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com