【问题标题】:DropWizard Bootstrap vs Configuration vs EnvironmentDropWizard Bootstrap vs 配置 vs 环境
【发布时间】:2015-02-07 17:54:27
【问题描述】:

一个典型的 DropWizard 应用程序指定一个 Application 子类,并像这样覆盖它的 initialize 方法:

class MyApplication extends Application<MyConfiguration> {
    static void main(String[] args) {
        new MyApplication().run(args)
    }

    @Override
    public void initialize(Bootstrap<MyConfiguration> bootstrap) {
        // ???
    }

    @Override
    public void run(MyConfiguration configuration, Environment environment)
            throws Exception {
        // Register resources, health checks, etc.
    }
}

在仔细阅读 DropWizard 文档以及 JavaDocs 之后:

  • Configuration - YAML 配置文件的对象表示。使用您自己的配置属性扩展它,它们也会从 YAML 文件中解析出来。
  • Bootstrap - 预启动应用程序环境,包含引导 Dropwizard 命令所需的一切。
  • Environment - Dropwizard 应用程序的环境。

但是这些是相当模糊的类定义,尤其是最后两个。我知道我应该继承 Configuration,并且它代表我应用的 YAML/JSON 配置文件的内存 POJO。

但我无法理解其他构造代表什么(BootstrapEnvironment)。我习惯于将环境特定配置注入我的应用程序,因此我倾向于将“环境”和“配置”的概念视为同一概念。

此外,DropWizard 似乎将 Bootstrap 实例与 Configuration impl 实例紧密结合在一起,但我找不到可证明的示例来说明这两个类有何不同,以及它们应该如何以不同的方式使用。

所以我问:

  1. 什么是Bootstrap,我用它做什么?
  2. 什么是Environment,我有什么用?

【问题讨论】:

    标签: jersey jetty jax-rs dropwizard


    【解决方案1】:

    Dropwizard 基本上是一个固执己见的 Web 框架,主要用作 REST API 项目。您所询问的类是构成 Dropwizard 应用程序的关键。开发人员已将他们想要在其框架中使用的所有库组合在一起并将它们连接在一起,以便我们可以轻松地处理他们为我们引导的内容。

    Environment 是 Dropwizard Environment 容器,而不是您的应用程序的个人环境(即本地与生产环境)。它具有 Dropwizard 框架的核心属性,例如 jersey web 容器。

    Bootstrap 基本上是连接环境中使用的所有内容的类,包括您的配置和应用程序。

    如果您查看源文件,您会很好地了解这些类的工作原理。

    更新: 根据您在下面的问题,环境不应用于确定数据库连接类型和凭据;这就是您的配置 .yml 文件的用途。您需要将任何特定于环境的变量放入该文件中,然后使用特定的 .yml 文件运行您的应用程序。我个人有一个 application-local.yml、application-staging.yml 和 application-prod.yml,并根据环境使用适当的 .yml 运行我的应用程序。

    Dropwizard 对具有特定 .yml 属性的数据源进行了一些自动配置:请参阅 here

    【讨论】:

    • 感谢@th3morg (+1) - 我想它的 开始 是有道理的,我绝对会查看来源进行更多挖掘。关于Environment 的一个后续问题:例如,这是否用于确定我们处于 Jersey/Jetty 的“开发”版本中,因此我们应该使用内存中的嵌入式数据库,而不是“产品”容器的版本,因此使用我们实际的 MySQL 服务器?如果没有,你能举几个Environment的用例的具体例子吗?再次感谢!
    • @IAmYourFaja 我建议做的另一件事是在 IDE 中以调试模式运行您的应用程序,您可以在其中暂停和/或通过 Bootstrap 和 Environment 类逐步执行。您将很快了解在幕后完成的所有工作以配置所有内容:)
    • 感谢 @th3morg (+1) - 但我在 Windows 上无法访问 IDE,我只是使用普通的 ole' 记事本。
    • 如果您愿意,您可以在 windows 上获取 NetBeans 或 Eclipse 甚至 IntelliJ 社区
    • 我真的不明白为什么 Bootstrap 类是用 Configuration 参数化的,但是在为初始化准备 bundle 时没有办法访问它(我倾向于在 initialize() 方法中使用 Guice 将依赖项注入捆绑并需要访问那里的配置)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 2019-11-25
    • 1970-01-01
    • 2018-01-23
    • 2021-02-11
    • 1970-01-01
    相关资源
    最近更新 更多