【问题标题】:When to use DropWizard bundles?何时使用 DropWizard 捆绑包?
【发布时间】:2015-07-23 14:46:12
【问题描述】:

我对一个名为Bundles 的难以捉摸但可能非常强大的 DropWizard 功能感到好奇。根据文档:

Dropwizard 包是一组可重用的功能,用于定义应用程序的行为块。

鉴于 DropWizard (DW) 的文档非常有据可查,我很震惊这真的是对捆绑包的唯一解释。我在野外看到了一些例子:

但我不明白的是:bundle 似乎只是在 JAR 中打包和分发的代码。那么为什么我不能只编写“原始”(非“捆绑”兼容)Java 类来做我需要的事情,将它们放入 JAR 中,然后将该 JAR 包含在我的构建/编译类路径中,然后在广告中使用它们我的 DW 应用程序? DW 捆绑包有什么用途,什么时候应该使用它们?

【问题讨论】:

    标签: java dropwizard


    【解决方案1】:

    Bundles 就像 Dropwizard 的插件,可以很容易地添加小块功能。例如,如果您使用资产包,您可以将 UI 附加到您的 API 以进行测试,它将在同一端口上运行并且非常易于使用。另一个例子是 Migrations Bundle,它可以轻松地将 Liquibase 绑定到 Dropwizard,因此您可以使用相同的 jar 运行数据库迁移。这也很有效,因为您的 API 可以访问一些在 yml 文件中定义了连接参数的 sql 数据库,迁移将能够在同一个数据库上运行。

    【讨论】:

    • 感谢@user3354059 (+1) - 所以我完全明白捆绑包是为了在多个 DW 应用程序中重用 DW 应用程序功能。我想我只是不明白为什么我需要创建一个“捆绑包”而不是将公共代码打包到一个 JAR 中,并让我的每个 DW 应用程序都使用该 JAR 中定义的类。您引用的所有示例(Migrations/Liquibase/etc.)也可以打包在一个普通的 JAR 中 - 不符合任何 Bundle API - 然后我所有的 DW 应用程序都可以依赖该 JAR 并使用它的类来完成 DB迁移。我知道我错过了一些东西,我只是没有看到它。
    • 这可能是一个易于使用的东西。我发现添加几行代码来添加捆绑软件比为您需要的少数功能创建一个完整的其他库要容易得多。
    • 感谢 @user3354059,我在谷歌上搜索“如何为 dropwizard 创建自己的自定义包”,但我没有任何教程可以帮助我创建自己的包。我只有一个链接是你的回复。但是,各种情况并非如此。我知道我们创建了一个可重用的组件作为 DW (dropwizard) 包,但仍然不清楚 DW 包的生命周期是什么,实现它需要什么接口,你能指出一些帮助我创建我的教程吗自己的 DW 包。
    • @smeeb 我想知道你是否曾经在其他地方找到过这个问题的答案,因为我也有同样的问题
    【解决方案2】:

    假设您在公司的平台团队工作,而您的开发人员使用 Kafka 作为消息总线。

    然后,您可以要求开发团队在他们的 DW 应用程序中添加以下配置,然后您可以编写 bundle 来解析 broker-uris,并构建 Producer Instance。 通过与任何依赖注入框架集成,您只需在需要时@InJect 生产者实例。

    kafka-broker-uris: <your kafka broker urls>
    

    我们可以使用一个库来做同样的事情,然后调用一个方法来获取一个 broker-uri 并返回一个生产者对象..

    但是,我相信,主要好处来自于 Bundle 知道如何解析配置,并在 DW 生命周期的 Initialize 阶段预先构建必要的对象。 此外,如果您想在公司中设置如何定义配置文件的标准,那么最好使用捆绑包。

    【讨论】:

      【解决方案3】:

      DW 包与“原始”JAR 类似,两者都可用于提供可重用的功能。但是,不同之处在于 DW 捆绑包享有的额外支持。捆绑包可以配置,即它们可以使用 DW 配置文件作为配置参数

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-15
        • 1970-01-01
        • 1970-01-01
        • 2012-06-29
        • 2014-05-02
        • 2013-09-24
        • 2015-08-07
        相关资源
        最近更新 更多