我们使用Liquibase作为云服务中的数据库重构工具,现在想使用它来进行一些轻量级的数据迁移,这将实现为CustomTaskChange,只需几秒钟。此数据迁移"很高兴拥有",但绝不是服务正常运行的强制性要求 - 如果由于某种原因失败,则应跳过更改集,但服务已启动,并在下次重新启动服务期间重试更改集,直到最终成功。因此,应忽略执行更改集时的错误,但标记为已运行的更改集仅在实际成功运行一次后才运行。
我们想知道如何使用 Liquibase 实现这种行为:<changeSet>
属性failOnError="false"
在发生错误时继续,但根据文档和 Nathan Voxland 在 StackOverflow 给出的答案,它总是将更改集标记为运行 - 因此 Liquibase 不会在下次启动服务时重试执行它。<preConditions>
属性onFail
似乎只关心失败的前提条件,因此在将onFail
设置为(例如CONTINUE
(时出错时,启动仍然会失败。
是否有我们忽略的任何其他选项/属性或推荐的方式来解决这种情况?
如果在自定义前提条件的代码中实现可选的数据迁移,则可以实现"重试直到成功"行为。然后,您可以将该前提条件onFail
配置为CONTINUE
,这将为您提供所需的行为(来源(:
继续 – 跳过更改集。下次更新时将再次尝试执行更改集。继续执行更改日志。
我不完全确定在前提条件代码中实现迁移在技术上是否可行——因为它肯定不是为了这些事情。您可能还需要验证在修补程序集标记为运行后不会再次执行自定义前提条件。