在生产环境中执行 liquibase 更新

     2023-03-29     50

关键词:

【中文标题】在生产环境中执行 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 而是使用命令行生成它。我们这样做也是出于同样的原因。我们有控制生产数据库的数据库人员,并且喜欢查看他们可以自己执行的脚本。

检查更改日志和数据库是不是相等

...等【发布时间】:2021-07-2107:22:59【问题描述】:我们使用liquibase来指定数据库布局和它的变化。在开发过程中,我们使用集成在Java应用程序中的liquibase来执行更新(如有必要)。由于我们的应用程序无权在生产环境中更改架构... 查看详情

在现有数据库上使用 liquibase

】在现有数据库上使用liquibase【英文标题】:Usingliquibaseontheexistingdatabase【发布时间】:2013-05-0313:34:50【问题描述】:我们有一个生产中的现有数据库。我们决定使用liquibase进行所有进一步的更新并创建任何新的数据库(如开发... 查看详情

如何在生产环境中运行 Webpack 热模块替换 (HMR)

】如何在生产环境中运行Webpack热模块替换(HMR)【英文标题】:HowtorunWebpackHotModuleReplacement(HMR)inProduction【发布时间】:2017-08-2717:24:14【问题描述】:我喜欢在生产环境中运行HMR,将其用于无缝的应用更新。我似乎找不到任何有关... 查看详情

Liquibase 更新错误

】Liquibase更新错误【英文标题】:Liquibaseupdateerror【发布时间】:2013-10-0718:51:34【问题描述】:我正在尝试使用Liquibase在数据库中创建一些表。一些背景知识:我在本地h2数据库上执行了相同的changelog.xml文件,它运行成功。我用... 查看详情

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

】如何为liquibase变更集设置超时?【英文标题】:Howtosetatimeoutforliquibasechangesets?【发布时间】:2017-03-0908:58:21【问题描述】:正如标题所说:我需要这个来确保变更集中的疏忽不会突然导致生产环境停止。【问题讨论】:您要指... 查看详情

异步执行长时间运行的 liquibase 数据库更新

】异步执行长时间运行的liquibase数据库更新【英文标题】:Executelongrunningliquibasedatabaseupdatesasynchronously【发布时间】:2018-02-2701:08:18【问题描述】:我们正在使用liquibase来管理应用程序底层关系数据库结构的变化。我们使用Postgre... 查看详情

liquibase - 变更集的执行顺序

】liquibase-变更集的执行顺序【英文标题】:liquibase-executionorderofchangesets【发布时间】:2015-01-2707:57:55【问题描述】:据我了解,Liquibase会按照它们在更改日志中写入的顺序执行更改集。我希望变更集以另一个顺序运行。有什么... 查看详情

Django 管理员突然只在生产环境中注销(拒绝执行脚本,因为它的 MIME 类型('text/html')不可执行)

】Django管理员突然只在生产环境中注销(拒绝执行脚本,因为它的MIME类型(\\\'text/html\\\')不可执行)【英文标题】:Djangoadminsuddenlyloggingoutonlyonproductionenvironment(RefusedtoexecutescriptbecauseitsMIMEtype(\'text/html\')isnotexecutable)Django管理员... 查看详情

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

背景:为保证预发环境的真实性,预发与生产环境往往共享数据库,在定时任务列表中,预发与生产环境都会从任务列表中获取定时任务,然后执行,这会导致定时任务会执行重复。解决方法:在job中增加一个环境变量字段,如... 查看详情

Liquibase - 执行前测试变更集

】Liquibase-执行前测试变更集【英文标题】:Liquibase-Testchangesetbeforeexecuting【发布时间】:2020-11-1818:55:01【问题描述】:我有一个执行liquibase脚本的管道Jenkins。但是,很多时候管道都失败了,因为脚本中存在错误。我想在运行管... 查看详情

在重新部署 .ear 文件期间未执行 Liquibase 脚本[关闭]

】在重新部署.ear文件期间未执行Liquibase脚本[关闭]【英文标题】:Liquibasescriptsarenotgettingexecutedduringredeploymentof.earfile[closed]【发布时间】:2014-10-1008:56:25【问题描述】:我有一个Liquibase脚本来在H2数据库中添加两个表。第一次部署... 查看详情

使用 Liquibase 的 Spring Boot 未在 Docker 中执行

】使用Liquibase的SpringBoot未在Docker中执行【英文标题】:SpringbootwithLiquibasenotexecutinginDocker【发布时间】:2021-07-2613:10:09【问题描述】:我是Docker新手,我一直在尝试实现数据库(Postgresql)和API(带有liquibase的SpringBoot)的容器化... 查看详情

JAVA SpringBoot:在 Docker 中,liquibase 插件运行时出现错误并且不执行更改日志

】JAVASpringBoot:在Docker中,liquibase插件运行时出现错误并且不执行更改日志【英文标题】:JAVASpringBoot:wheninsideaDockertheliquibasepluginrunswitherrorsanddoesnotexecutechangelogs【发布时间】:2020-12-2005:59:35【问题描述】:我知道已经问过同样的... 查看详情

flyway对比liquibase(转)

...数据库状态从一个版本快速到达另外一个版本 Flyway和Liquibase数据库迁移工具很多,这里我们选择Flyway和Liquibase来说主要是两个原因,一是它们都是Java生态圈的,其次就是SpringBoot提供了这两者的内建支持,可以很快应用到产... 查看详情

使用 liquibase 构建测试脚本以使用普通脚本按顺序执行

】使用liquibase构建测试脚本以使用普通脚本按顺序执行【英文标题】:Structuretestscriptswithliquibasetoexecuteinorderwithnormalscripts【发布时间】:2019-10-1209:22:58【问题描述】:我们正在使用liquibase在SpringBoot应用程序中迁移数据库。在资... 查看详情

创建索引时的 Liquibase 缓慢

】创建索引时的Liquibase缓慢【英文标题】:LiquibaseSlownessWhenCreatingIndexes【发布时间】:2020-12-1711:43:52【问题描述】:我最近将我的JavaLiquibase版本从3.5.3升级到了3.6.3我有一个非常繁重的环境,其中有很多数据库和表(我使用的是O... 查看详情

如何在 macOS 应用程序的生产环境中测试推送通知?

】如何在macOS应用程序的生产环境中测试推送通知?【英文标题】:HowtotestPushNotificationsontheproductionenvironmentforamacOSapp?【发布时间】:2021-10-1308:15:49【问题描述】:我想在生产APNS环境中测试我的应用,以确保推送通知在生产中正... 查看详情

如何从数据库中删除最后执行的 liquibase 变更集

】如何从数据库中删除最后执行的liquibase变更集【英文标题】:Howtodeletelastexecutedliquibasechangesetfromdatabase【发布时间】:2021-10-2108:53:03【问题描述】:我不小心运行了这个变更集,但我想对这个变更集进行一些修改。这仍处于开... 查看详情