mysql - 如何摆脱带有格式化.sql 变更集错误的 Liquibase includeAll 标记:找不到元素“databaseChangeLog”的声明
问题描述
我正在使用带有 liquibase 的 Gradle Spring 项目。要运行 liquibase,我正在运行通过编译项目创建的 jar。我正在尝试在 xml 更改日志中使用 liquibase“includeAll”标记来运行我称为 includeAllScriptsTest 的目录中的所有格式化的 sql 更改日志脚本(当前仅包含一个名为 test.sql 的 .sql 文件和一个更改集)。
如果我尝试在我的主 db-changelog 文件中使用 includeAll,则在运行时 liquibase 会返回错误:file:///.../conf/db/db.changelog-master.xml/ 不是可识别的文件类型。
为了解决这个问题,我从我的 db-changelog-master.xml 中引用了另一个名为 includeAll-changelog.xml 的 xml。在这个文件中,我有 includeAll 标签,下面是这个文件的内容。
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns="https://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog conf/xsd/dbchangelog-3.8.xsd">
<includeAll path="***/includeAllScriptsTest/" relativeToChangelogFile="true"/>
</databaseChangeLog>
在文件夹 includeAllScriptsTest 中有一个名为 test.sql 的文件,其内容如下:
--liquibase formatted sql
--changeset author:1 dbms:MySQL splitStatements:true endDelimiter://
DROP PROCEDURE IF EXISTS `TESTINCLUDEALL`;//
CREATE PROCEDURE `TESTINCLUDEALL`()
BEGIN
SELECT * FROM TABLE;
END;//
但是,这在运行时给了我一个不同的错误:cvc-elt.1.a:找不到元素“databaseChangeLog”的声明。我发现有关是否可以将 includeAll 与我的项目使用的 liquibase 版本一起使用的在线信息存在冲突。我目前正在使用 3.4.1。
解决方案
cvc-elt.1.a:找不到元素“databaseChangeLog”的声明
此错误是 XML 解析错误,databaseChangeLog
未在 xml 模式中声明指向。
也许您可以尝试在更改日志中使用以下 XSD:
<?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">
<includeAll path="***/includeAllScriptsTest/" relativeToChangelogFile="true"/>
</databaseChangeLog>
如果这仍然没有帮助,请在这篇文章中查看几点回答。
推荐阅读
- r - 用百分比绘制部分聚合数据(点图或散点图)
- python - 将 CNN Pytorch 中的预训练权重传递给 Tensorflow 中的 CNN
- python - 如何创建一个机器人在 python 中为我玩游戏?
- python - AttributeError:'str'对象没有属性'seek'与python
- c# - SSRS Reportviewer 导出 Excel 无效文件
- jquery - 如何在单击按钮时使用 jquery 将输入字段的值设置为会话变量的值
- sql - Group By 的基本 SQL 问题(在 Netezza 中)
- r - 使用自己的 crs 进行投影时,projectRaster 会产生不同的输出
- c# - 多线程问题,说它在任务没有完成之前完成
- java - CameraX 前置预览很暗