java - 带有 Gradle 的 Liquibase - changeLogFile 路径的愚蠢问题
问题描述
在我现有的项目中实施 Liquibase 时,我遇到了一个愚蠢但令人讨厌的问题。经过一番努力,我在启动应用程序时让它工作,它通过主变更日志和包含的变更日志/变更集运行。
当我添加 Luquibase Gradle 插件(未来的支持也需要它)时,问题就出现了,因为找不到具有相同路径的更改日志文件。
通过 application.yml 文件中的设置运行应用程序时,更改日志需要:
changeLog: classpath:/db/changelog-master.yml
工作(否则找不到文件),我的变更日志主文件中的路径是:
databaseChangeLog:
- include:
file: db/changelog/changelog.yml
但是,如果我使用插件命令(例如 changelogSync),则路径需要来自 src,例如:
src/main/resources/db/changelog-master.yml
让插件找到更改日志。
非常感谢能够在启动应用程序和使用插件命令时使用 Liquibase 的一些帮助,但我似乎无法找到解决这个愚蠢问题的方法。
我的活动build.gradle
是这样的:
liquibase {
activities {
main {
File propsFile = new File("${project.rootDir}/src/main/resources/liquibase.properties")
Properties properties = new Properties()
properties.load(new FileInputStream(propsFile))
changeLogFile properties['changeLogFile']
url properties['url']
username properties['username']
password properties['password']
}
}
}
application.yml 中的 Liquibase 设置是:
spring:
liquibase:
enabled: true
changeLog: classpath:/db/changelog-master.yml
必须有一个我似乎找不到的简单解决方案?随意询问更多代码片段,但根据 Liquibase 的文档以及我的设置中的liquibase.propterties文件等,其余部分非常简单。我正在使用 Liquibase 核心 v. 3.8.9 和插件版本 2.0.3。
谢谢。
解决方案
我无法 100% 理解您的问题,但我认为以下解决方案将为您完成为 liquibase 配置多个类路径的工作
我认为制作以下结构是个好主意:
--src
-- main
-- resources
-- changelogs
-- migrations1.xml
-- migrations2.xml
-- ...
-- migrationsN.xml
-- migrations.xml (it's a master changeLog which includes all the other changeLogs)
尝试将相对路径设置为您的子 changeLog 文件,如下所示:
<includeAll path="/changelogs" relativeToChangelogFile="true"/>
在includeAll
文档的第一个链接中,有一部分是关于为什么使用它不是一个很好的做法
尽管 includeAll 标签有许多有价值的用途,但它的使用可能会导致问题。要避免的最重要的事情是使用 includeAll 标签来模拟 Ruby on Rails 的活动迁移策略,该策略的更改列表,每个文件一个,按文件顺序运行。虽然一开始这似乎是个好主意,但很快就会遇到问题
如果您确实选择使用 includeAll 标记,请确保您有适当的命名策略,以确保您永远不会发生冲突或需要重命名文件以更改以强制重新排序。
所以也许你可以考虑使用<include>
标签并列出所有子 changeLog 文件。
例如:
<include path="changelogs/migrations1.xml" relativeToChangelogFile="true"/>
<include path="changelogs/migrations2.xml" relativeToChangelogFile="true"/>
...etc.
推荐阅读
- javascript - React 找不到模块 - ttf、otf 字体
- reactjs - 如何在 yup 中为反应选择(单选)分配对象验证
- c# - InvalidOperationException:没有为此 DbContext 配置数据库提供程序。可以通过覆盖 DbContext 来配置提供程序
- c++ - 针对特定 CXXABI 和 GLIBCXX 版本的交叉编译
- php - 需要借助 Windows 身份验证在 PHP 中集成 SSO
- wordpress - Wordpress:是否有一个 SHORTCODE 可以在前端输出注册表单?
- apache-spark - Pyspark - 对数据框进行非矢量化
- java - redis缓存中的自定义名称
- angular - cdk虚拟滚动的itemsize
- php - Magento 2 - 自定义支付模块前端错误