DropWizard Bootstrap与配置与环境

时间:2014-12-09 18:05:14

标签: jersey jetty jax-rs dropwizard

典型的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)。我习惯于在我的应用程序中注入特定于环境的配置,因此我倾向于考虑&#34; environment&#34;的概念。和&#34;配置&#34;作为同一个人。

此外,似乎DropWizard将Bootstrap实例与Configuration impl实例紧密结合,但我找不到关于这两个类如何不同的可证明的示例,以及如何使用它们不同于一个另一个。

所以我问:

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

1 个答案:

答案 0 :(得分:15)

Dropwizard基本上是一个固定的Web框架,主要用作REST API项目。你问的课程是Dropwizard应用程序的关键所在。开发人员将他们想要在框架中使用的所有库组合在一起并将它们连接在一起,这样我们就可以轻松地为他们引导我们的工作。

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

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

如果你看一下源文件,你就会明白这些类是如何工作的。

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

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