在生产环境中执行 liquibase 更新

Posted

技术标签:

【中文标题】在生产环境中执行 liquibase 更新【英文标题】:Execute liquibase update in production environment 【发布时间】:2013-11-29 01:03:00 【问题描述】:

我有一个 Java Maven 项目。我正在使用 liquibase 来更新数据库。

在本地,要更新我的数据库,我只是在命令行中运行:

mvn liquibase:update

在生产环境中,我没有安装 Maven。

我需要实现的是通过控制台,执行命令以在特定的类路径中运行 liquibase 脚本。

有什么想法吗?

编辑:

好的。我正在尝试采用这种方法。我把以下项目放在一个文件夹中:

    liquibase 罐子

    包含我的应用程序和 liquibase 变更集的战争

    liquibase.properties:它包含以下内容:

    url=jdbc:jtds:sqlserver://xxxxxxxx:xxxx/xxxxx

    用户名=xxx

    密码=xxxxx

    classpath=war_file.war

    changeLogFile=WEB-INF/classes/sql/projectName/liquibase/liquibase.xml

然后,在控制台中,我执行:

java -jar liquibase-core-3.0.5.jar update

有效!它会找到我的 liquibase.xml 文件并启动 liquibase 更新。

但是,当它引用 lib 中包含的另一个 jar 文件中的 liquibase.xml 时,它会失败,因为我将它包含在 liquibase.xml 中:

<include file="../other_module/src/main/resources/sql/projectName/liquibase/liquibase.xml" />

如何在不执行“src/main/resources”的情况下添加此“include”并使其找到此 xml?

【问题讨论】:

“在特定的类路径中”是什么意思?在命令行上运行 liquibase 会出现什么问题? @Jens 问题是我需要直接在没有 Maven 的生产机器中执行更新(我们不想安装它)。所以我找不到更新产品数据库的正确程序。 @Adri 您已经大大改变了最初提出的问题。这是一个关于如何运行命令行客户端的新问题。问题是您的类路径和您在 liquibase 文件中使用的文件系统路径的组合。引用运行时不存在的路径....检查您的war文件中的文件。你会发现没有文件匹配“../other_module/src/main/resources/sql/projectName/liquibase/liquibase.xml” 谢谢!现在可以了。感谢大家的支持。 【参考方案1】:

在您的开发机器上运行 updateSQL 目标:

mvn liquibase:updateSQL

您可以生成迁移脚本:

└── target
    └── liquibase
        └── migrate.sql

这是我最喜欢的 liquibase 功能之一。有时客户坚持所有数据库模式更改必须由他们的员工手动执行。

另一种选择是在您的应用程序中构建自动升级功能。见servlet listener

【讨论】:

然后你需要访问数据库并手动执行它? @Adri 正确。要在生产环境中使用 liquibase,您需要安装 java 以及 liquibase 和 jdbc jar 的副本。而 SQL 文件可以使用数据库服务器上已安装的任何 db 客户端工具运行到数据库中。 @Adri:我们使用 liquibase 的方式与 Mark 概述的相同(使用 updateSQL 命令)。只是,我们不是使用 maven 而是使用命令行生成它。我们这样做也是出于同样的原因。我们有控制生产数据库的数据库人员,并且喜欢查看他们可以自己执行的脚本。

以上是关于在生产环境中执行 liquibase 更新的主要内容,如果未能解决你的问题,请参考以下文章

如何为 liquibase 变更集设置超时?

预发环境与生产环境共享数据库时定时任务重复执行问题解决

weblogic-开发模式转变为生产模式&&生产模式转变为开发模式

使用 mvn liquibase:diff 时如何禁用删除表和列?

MySQL思考触发器是否应该在生产环境中使用?

MySQL思考触发器是否应该在生产环境中使用?