Xml 重构Liquibase变更日志文件
我们正在使用我现在正在处理的这个项目,所有的变更日志都在一个大的XML文件中。不幸的是,这个文件太大了——我们想引入一个“主”文件,包括原始文件和任何新文件 旧结构:Xml 重构Liquibase变更日志文件,xml,database,liquibase,Xml,Database,Liquibase,我们正在使用我现在正在处理的这个项目,所有的变更日志都在一个大的XML文件中。不幸的是,这个文件太大了——我们想引入一个“主”文件,包括原始文件和任何新文件 旧结构: /db/changesets-from-beginning-of-time.xml /db/changesets/changesets-from-beginning-of-time.xml /db/changesets/changesets-v.1.2.3.xml /db/changesets/changeset-master.
/db/changesets-from-beginning-of-time.xml
/db/changesets/changesets-from-beginning-of-time.xml
/db/changesets/changesets-v.1.2.3.xml
/db/changesets/changeset-master.xml
新结构:
/db/changesets-from-beginning-of-time.xml
/db/changesets/changesets-from-beginning-of-time.xml
/db/changesets/changesets-v.1.2.3.xml
/db/changesets/changeset-master.xml
changesets-*
-文件的内容只是变更集xml,而changeset master.xml
文件如下所示:
<databaseChangeLog xmlns="...skipped...">
<include file="changesets-from-beginning-of-time.xml"
relativeToChangelogFile="true"/>
<include file="changesets-v1.2.3.xml"
relativeToChangelogFile="true"/>
</databaseChangeLog>
现在,我的数据库中的DATABASECHANGELOG
表引用了旧文件,因此旧的变更集将再次运行
根据,每个变更集都由组合[filepath/-name]::[id]::[author]
唯一标识,这对我来说不是最理想的
所以我的问题是-如何重构文件结构而不破坏我的liquibase设置并清空我的数据库?liquibase有一个“changelogSync”命令,可用于将更改集标记为在数据库中执行。还有一个叫做liquibase的东西,描述为: 用于在创建更改集的唯一标识符时替代文件名和路径。移动或重命名更改日志时需要 也许这会有帮助。 如果我没记错的话,这个选项允许不包括标识符的完整文件路径
(但这不适用于格式化的sql文件。请参阅Liquibase Jira中的内容。我想指出上游和用户之间的旧对话: 我认为上游参数很弱,它们会做出愚蠢的决定来传递完整的文件路径。最初的想法是通过
CLASSPATH
修复文件路径,但您的请求表明这也是错误的
上游开发人员建议对DATABASECHANGELOG.FILENAME
列执行直接更新,以修复具有完整路径的断开条目
如果您设置哈希值DATABASECHANGELOG.MD5SUM
otnull
,则在下次LiquiBase运行时触发哈希值重新计算。您应该这样做,因为哈希算法在计算时使用所有复合ID部分
logicalFilePath
可应用于顶级XML标记:
<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.4.xsd"
logicalFilePath="legacy.xml">
...
</databaseChangeLog>
并且可以在每个变更集标记中重写::
--changeset db-maint:tune-indexed logicalFilePath:other.sql
要验证设置是否有效,请使用:
mvn liquibase:changelogSyncSQL
并查看migration.sql
。对应的pom.xml
部分:
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>${liquibase.version}</version>
<configuration>
<changeLogFile>${basedir}/src/main/resources/sql/master.xml</changeLogFile>
<propertyFile>${liquibase.profile}</propertyFile>
<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
<migrationSqlOutputFile>migration.sql</migrationSqlOutputFile>
</configuration>
</plugin>
org.liquibase
liquibase maven插件
${liquibase.version}
${basedir}/src/main/resources/sql/master.xml
${liquibase.profile}
假的
migration.sql
在这个博客上对如何使用logicalFilePath进行了很好的描述:针对v3.3关闭的SQL语法错误!