如何在Liquibase中定义可选更改集?

时间:2018-10-11 07:37:57

标签: liquibase failonerror

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

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

还有其他我们可以忽略的选项/属性或推荐的方式来解决这种情况吗?

1 个答案:

答案 0 :(得分:0)

如果在custom precondition的代码内实现可选的数据迁移,则可以实现“重试直到成功”的行为。然后,您可以将onFail的前提条件配置为CONTINUE,这将为您提供所需的行为(source):

  

继续-跳过更改集。在下一次更新时将再次尝试执行更改集。继续更改日志。

我不完全确定在前提条件代码中实现迁移是否在技术上是可能的-因为它肯定不是用于此类事情的。而且,一旦补丁集标记为已运行,您可能还想验证自定义前提条件是否未再次执行。