DropWizard Bootstrap与配置与环境

IAm*_*aja 27 jetty jax-rs jersey 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.
    }
}
Run Code Online (Sandbox Code Playgroud)

仔细阅读DropWizard文档以及JavaDocs:

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

但这些是相当模糊的类定义,特别是最后两个.我理解我应该是子类Configuration,并且它代表我的应用程序的YAML/JSON配置文件的内存中POJO.

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

此外,似乎DropWizard将Bootstrap实例与Configurationimpl实例紧密结合,但我找不到关于这两个类如何不同以及如何使用它们彼此不同的可证明的例子.

所以我问:

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

th3*_*org 15

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

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

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

如果您查看源文件,您将很好地了解这些类是如何工作的.

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

Dropwizard使用特定的.yml属性进行数据源的一些自动配置:请参见此处.

  • 我真的不明白为什么Bootstrap类使用Configuration进行参数化,但是在准备初始化包时没有办法访问它(我倾向于在initialize()方法中使用Guice将依赖项注入bundle并需要访问配置) (4认同)