【问题标题】:How do I proxy a production database with a testing database?如何使用测试数据库代理生产数据库?
【发布时间】:2013-05-21 13:21:36
【问题描述】:

我目前正在从事一个 Grails 项目,该项目有一个包含大量数据的静态生产数据库。我想使用生产数据测试我的应用程序,但我不想克隆生产数据库,而是想为生产数据库设置一个代理数据库。

基本上数据库的读取将一直到生产数据库,而写入将在代理数据库(最好是 h2 数据库)处停止。如果更新了来自生产数据库的行,则该行将保存到代理数据库并在后续查询中返回,而不是生产行。

我希望对应用程序尽可能透明地执行所有这些操作。我目前的想法是我需要分叉 Hibernate GORM 实现并使其支持这个用例。以前有这样做过吗?有没有更好的办法?

【问题讨论】:

    标签: database grails grails-orm


    【解决方案1】:

    分叉 Hibernate GORM 实现可能不是一个好主意。您将被困在您的版本中,并且必须以某种方式使用原始插件使其保持最新(例如错误修复、新实现)。

    也许一个自定义的TestMixin 允许您覆盖all registered domain classes,可以选择使用save()get()find() 等的新实现。您可以使用metaClass 来覆盖此静态方法,这只会在使用带注释的 mixin 的测试中触发。

    这样,您可以在测试环境中使用多个数据源来确定将使用哪个。

    【讨论】:

    • 这是个好主意,但它限制了我的使用仅限于自动化测试。我真的很希望它也能与 run-app 一起使用。
    • 您的意思是您希望开发环境和集成环境都具有这种行为?
    • 第一个目标实际上是让它在开发环境中工作(至少这是我的想法)。由于数据库可能不处于已知状态,因此集成环境会带来一系列挑战。
    • 在开发的情况下,您可以将您的逻辑包装在一个 Spring Bean 中,并在 Bootstrap 上调用它。
    • 我不确定我是否完全理解你在说什么。你认为我应该在 Spring Bean 中包装什么逻辑?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多