当前位置: 首页 > 知识库问答 >
问题:

Spring Boot基于Liquibase类路径的迁移文件

云开诚
2023-03-14

在docker容器中部署应用程序时,我无法使用Spring Boot实现liquibase迁移。我有一个胖罐子,它是在docker图像创建时提取的。

我有一个单独的模块,保存迁移文件。我能装上主机。xml:

<includeAll path="classpath*:/changelog" relativeToChangelogFile="false" />

然后它继续并加载其余的资源。问题在于SpringResourceOpener。java然后从加载的资源中提取仍然正常的实际路径:

jar:file:/app/lib/database-0.0.1-SNAPSHOT.jar!/changelog/001-categories-table.xml

但是接下来做一些路径操作,结果是:

lib/database-0.0.1-SNAPSHOT.jar/changelog/001-categories-table.xml

这反过来又不是有效的类路径:

Caused by: java.io.FileNotFoundException: class path resource 
[lib/database-0.0.1-SNAPSHOT.jar/changelog/001-categories-table.xml]
cannot be resolved to URL because it does not exist

我需要/changelog/001 categories表。xml(类路径)或文件:/app/lib/database-0.0.1-SNAPSHOT。罐子/changelog/001类别表。xml以能够读取文件。但它总是以上面的不完整路径结束。

这是一个配置问题还是有办法调整这种行为?

共有1个答案

邵鸿福
2023-03-14

我能够让它手动引用包含在master.xml中的更改日志文件,而不是包含所有。

例如。

<!--includeAll path="changelog" relativeToChangelogFile="false" /-->

<include file="changelog/001-table.xml" />
<include file="changelog/002-table.xml" />
<include file="changelog/003-table.xml" />
<include file="changelog/004-table.xml" />
 类似资料:
  • 我用试用密钥尝试了State/BaselineMigration功能。https://flywaydb.org/documentation/concepts/baselinemigrationsFlyWay迁移执行脚本并正确移动到正确的版本。但在此基础上运行的所有迁移都失败了 从S开始2__xxx.sql然后它在版本2的模式表中创建一行并键入"SQL_STATE_SCRIPT" 再次执行flywa

  • 我的目标是开发一个单一的骆驼路线来映射这些服务器,接受路径中服务器的名称。类似于这样: 我的(简化且不起作用)Blueprint.xml: 问题是,我不知道如何从路径中移除/center、/north或/south,因此头部被传递给目标服务,而目标服务不知道如何处理它。调用:

  • 我将sql迁移放在项目的rcourses文件夹中,但是我们需要创建一个基于Java的迁移,我们将其放在同一个文件夹中:http://i.stack.imgur.com/J8XEH.png 出于某种原因,基于Java的迁移被完全忽略:http://i.stack.imgur.com/9mqkk.png 我可以不将这两种类型的迁移混合在一起吗?

  • 基于路径的授权 Apache和svnserve都可以给用户赋予(或拒绝)访问许可,通常是对整个版本库:一个用户可以读版本库(或不),而且他可以写版本库(或不)。如果可能,也可以定义细粒度的访问规则。一组用户可以有版本库的一个目录的读写权限,但是没有其它的;另一个目录可以是只对一少部分用户可读。 两种服务器都使用同样的文件格式描述路径为基础的规则,如果是Apache,需要加载mod_authz_sv

  • 我已经创建了一个独立的引导。我需要开始将其集成到更高的环境中。每个环境都有一个属性文件,其中包含特定于数据库的连接信息。由于这不存在于我的启动jar中,所以我想以某种方式添加该数据库的路径。属性文件,然后根据键读取条目。用于创建这样的bean: 但是在启动时,我不确定如何做到这一点:但我想指向下面的属性示例并提取我的值,并以某种方式填充我在开发中硬编码的application.properties

  • 我知道liquibase将创建一个databasechangelog来检查是否应用了一个更改集。但是如果我让应用程序自动运行它,FILENAME列将存储changelog文件的相对路径。但是如果我运行mvn liquiBase:status,它会说我的更改集没有被应用,原因是在liquiBase.properties文件中,我将changelog的路径定义为绝对路径(即changelogfile=