我使用的是Spring Boot 2.0.1和<code>liquibase-core-3.5.5。
当我从IntelliJ运行该应用程序(它将运行< code>main()方法)时,我在Liquibase数据库列< code>database.filename中看到以下类型的值:
db/changelog/changes/v0001.sql
如果我使用嵌入式Tomcat创建一个fat jar并运行该应用程序,则数据库中会出现与以下相同的变更集:
BOOT-INF/classes/db/changelog/changes/v0001.sql
我希望这些值匹配,这样我就可以将我的应用程序作为JAR文件运行,但是如果需要调试的话,可以从IntelliJ连接到远程数据库。(注意:这是一个测试数据库,我不会用这种方式调试产品)。
我已经找到了对logicFilePath
的引用(例如这个SO问题),但我不相信这会提供我需要的东西。
我还尝试调试Liquibase代码,以确定是否有方法可以更改此值。我最接近的是这两个观察结果:
如果有办法使这些一致,或者可能只是将filename
列更改为实际的文件名(例如v0001.sql
),那将是最好的。
更新
我在Spring Boot中设置了以下Liquibase设置:
My resources/db/changelog/db.changelog-master.yaml
文件有以下内容:
databaseChangeLog:
- includeAll:
path: db/changelog/changes/
然后在 resources/db/changelog/changes
中,我有单独的 *.sql
文件,其中包含我要运行的 SQL。我不记得我在哪里找到这个设置,但我没有任何特定于“变更集”的东西,这是我的错误吗?
在每个变更集上设置逻辑文件路径
。这将确保数据库更改日志。FILENAME
列是一致的,不依赖于变更集文件的物理签出目录,如本文中所述。
logicalFilePath
属性正是您想要的。我在我的项目中遇到了同样的问题,我正在使用maven执行一些部分,使用spring-boot执行一些部分。这个问题也可以帮助您。
我能够通过不再在我的db.changelog-master.yaml
文件中使用includAll
选项来使用它。includeAll
选项是快速入门(并处理特定目录中的所有文件)的有用方法,但似乎不建议常规使用。如前所述。
这是我以前在<code>db.changelog-master中使用的。yaml,不要这样使用。
databaseChangeLog:
- includeAll:
path: db/changelog/changes/
这是我将其更新为:
databaseChangeLog:
- include:
file: db/changelog/changes/v0001_users.sql
- include:
file: db/changelog/changes/v0002_accounts.sql
需要注意的重要事情是,我特别列出了我想要包含的每个文件,按照我想要它运行的顺序。这有点麻烦,但非常值得更改。
在原始版本中,databasechangelog.filename
列将根据应用程序的执行方式而有所不同:
进行更改后,上面的两个选项是相同的,并且不再包含 BOOT-INF/类/
作为前缀。
感谢其他的答案,帮助我找到了正确的方向!
我正在使用SpringFox的swagger实现。我想修改swagger-ui.html以获得一个自定义的头值。如何修改此文件?或者告诉spring fox使用备用文件?
使用liquibase和springboot,创建了数据库变更日志,并能够用maven-liquibase-plugin(mvn liquibase:update)成功地运行它。我正在编写集成测试,其中需要以编程方式创建liquibase更改。 运行上述测试时出现以下异常。 java.lang.IllegalStateException:在org.springframework.test.cont
问题内容: 假设我有一个整数集,并且我想增加集合中的每个整数。我该怎么做? 我可以在迭代时添加和删除集合中的元素吗? 在迭代原始集合时,是否需要创建一个新集合以将元素“复制并修改”到其中? 编辑:如果集合中的元素是不可变的呢? 问题答案: 您可以在迭代期间使用Iterator对象安全地从集合中删除;尝试在迭代时通过其API修改集合会破坏迭代器。Set类通过getIterator()提供一个迭代器。
问题内容: 标题说明了一切。我在 SWIFT_MODULE_NAME 的构建设置中进行了 搜索 ,但没有发现任何问题。我也在网上搜索过,并且有对该名称的引用,但没有有关其定义的信息。 此外,我在Apple Docs中找不到任何提及SWIFT_MODULE_NAME的信息。 我确实知道这一点:它在“ Objective-C生成的接口头名称”构建设置中使用,并且可以通过双击设置值来查看: $(SWIF
在我的Nativescript Angular 2 Typescript应用程序中,我希望有一个Nativescript加载任何包含html文本输入字段的远程网站(不受我控制)。 然后我想用我的NativeScript应用程序的值填充这些输入字段。 我以前在android studio中使用java完成过这项工作,在那里可以运行一些JS并修改webview的dom。但是,在没有运行特定于andro
我想用liquibase变更集进行模拟数据的集成测试,如何使其不影响真实数据库?我从这里找到了部分想法,但我使用的是springboot,我希望有更简单的解决方案。