【问题标题】:Override an existing precondition in Liquibase覆盖 Liquibase 中的现有前提条件
【发布时间】:2017-01-23 19:48:29
【问题描述】:

我目前正在为 Liquibase 创建一个扩展以支持 Cassandra。它运行良好,但我想添加一些不错的功能。

当变更集有先决条件时,我想抛出 NotSuppportedException() 之类的东西。问题是目前,底层 JDBC 包装器返回一个封闭的 ResultSet,这会导致在访问所述 ResultSet 时引发异常。

对于语句,我实现了自己的生成器。先决条件有类似的东西吗?或者一种覆盖现有 ForeignKeyExistsPrecondition 实现的方法?从类扩展并覆盖检查方法不起作用(即使放在包 liquibase.precondition.ext 中)。

谢谢!

【问题讨论】:

  • 大部分前置条件似乎都在使用SqlStatements,如果你实现了自己的Database类,你可能不支持这些Statement?
  • 是的,谢谢,如果 ForeignKeyPrecondition 使用 SqlStatement,这将起作用,但它使用的是 SnapshotGeneratorFactory,我很遗憾无法覆盖
  • 好的,我明白了,前提条件不像更改那样具有优先级,我不确定当您注册具有相同 tagName 的自定义类时 PreconditionFactory 会发生什么。你试过吗?似乎 preconditionFactory 不检查已注册的标签,而只是覆盖已注册的类。
  • IIRC 我没有尝试使用完全相同的名称,只是附加了 Cassandra。但是我尝试了很多东西,也许它没有用。不过会再试一次,然后返回结果。谢谢!
  • 如果我使用完全相同的 FQDN,它可以工作。不是一个真正干净的解决方案,但它有效。感谢您的想法!

标签: java liquibase


【解决方案1】:

这似乎可行的唯一方法(感谢@dag)是使用与我要覆盖的前提条件完全相同的 FQDN。

【讨论】:

  • 虽然这可能会起作用,但我发现这当然不是完美的解决方案——取决于类加载器,这可能会也可能不会起作用。我对新想法持开放态度:(
猜你喜欢
  • 2021-10-08
  • 2015-08-15
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多