1

我们使用 Liquibase 作为云服务中的数据库重构工具,现在想用它来做一些轻量级的数据迁移,这将实现为 CustomTaskChange,只需几秒钟。这种数据迁移“很高兴”,但服务正常运行绝不是强制性的——如果它由于某种原因失败,则应该跳过更改集,尽管如此,服务仍会启动,并且在迁移期间重试更改集下次重新启动服务,直到它最终成功。因此,应该忽略执行更改集时的错误,但只有在实际成功运行一次后才标记为已运行。

我们想知道如何使用 Liquibase 实现这种行为:如果出现错误,该<changeSet>属性将failOnError="false"继续,但根据文档和 Nathan Voxland 在 StackOverflow 上给出的答案,它总是将更改集标记为已运行 - 因此 Liquibase 不会重试在下次启动服务时执行它。该<preConditions>属性onFail似乎只与失败的先决条件有关,因此在设置onFailCONTINUE.

是否有任何其他我们忽略的选项/属性或推荐的方式来解决这种情况?

4

1 回答 1

0

如果您在自定义前提条件的代码中实现可选的数据迁移,您可能能够实现“重试直到成功”行为。然后,您可以配置onFail该前提条件,该前提条件CONTINUE将为您提供所需的行为(来源):

CONTINUE – 跳过变更集。下次更新时将再次尝试执行更改集。继续更改日志。

我不完全确定在前置条件代码中实现迁移是否在技术上是可行的——因为它当然不适合这样的事情。并且您可能还想验证一旦补丁集被标记为已运行,自定义前提条件是否不会再次执行。

于 2018-10-11T09:51:08.917 回答