gpt4 book ai didi

java - 带有 Gradle 的 Liquibase - changeLogFile 路径的愚蠢问题

转载 作者:行者123 更新时间:2023-12-03 03:44:46 25 4
gpt4 key购买 nike

在我现有的项目中实现 Liquibase 时,我遇到了一个愚蠢但烦人的问题。经过大量的努力后,我在启动应用程序时让它开始工作,它通过主变更日志和包含的变更日志/变更集运行。

当我添加 Luquibase Gradle 插件( future 支持也需要它)时,问题就出现了,因为找不到具有相同路径的变更日志文件。

通过 application.yml 文件中的设置运行应用程序时,更改日志需要:

changeLog: classpath:/db/changelog-master.yml

工作(否则找不到文件)并且我的更改日志主文件中的路径是:

数据库变更日志:
- 包括:
文件:db/changelog/changelog.yml

但是如果我使用插件命令(例如 changelogSync),路径需要来自 src,例如:

src/main/resources/db/changelog-master.yml

让插件找到更新日志。

如果能在启动应用程序时和通过插件使用命令时能够使用 Liquibase,我真的很感激一些帮助,但我似乎找不到解决这个愚蠢的事情的方法。

我在 build.gradle 中的 Activity 是这样的:

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 上的第一个链接中文档中有一部分是关于为什么使用它不是一个很好的做法

While the includeAll tag has many valuable uses, its use can cause problems down the road. The biggest thing to avoid is to use the includeAll tag to simulate Ruby on Rails Active Migrations strategy of a list of changes, one per file, that are ran in file order. While this seems like a good idea at first, it quickly runs into problems

If you do choose to use the includeAll tag, make sure you have a naming strategy in place that will insure that you will never have conflicts or need to rename files to change to force a reordering.

所以也许你可以考虑使用 <include>标记并列出所有子 changeLog 文件。

例如:

<include path="changelogs/migrations1.xml" relativeToChangelogFile="true"/>
<include path="changelogs/migrations2.xml" relativeToChangelogFile="true"/>
...etc.

关于java - 带有 Gradle 的 Liquibase - changeLogFile 路径的愚蠢问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62224162/

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