Jersey DropWizard引导与配置与环境

Jersey DropWizard引导与配置与环境,jersey,jetty,jax-rs,dropwizard,Jersey,Jetty,Jax Rs,Dropwizard,典型的DropWizard应用程序指定应用程序子类,并覆盖其initialize方法,如下所示: class MyApplication extends Application<MyConfiguration> { static void main(String[] args) { new MyApplication().run(args) } @Override public void initialize(Bootstrap<

典型的DropWizard应用程序指定应用程序子类,并覆盖其
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.
    }
}
类MyApplication扩展了应用程序{
静态void main(字符串[]参数){
新建MyApplication().run(args)
}
@凌驾
公共无效初始化(引导引导引导){
// ???
}
@凌驾
公共无效运行(MyConfiguration配置、环境)
抛出异常{
//注册资源、健康检查等。
}
}
在阅读DropWizard文档以及JavaDocs之后:

  • -YAML配置文件的对象表示形式。使用您自己的配置属性扩展它,它们也将从YAML文件中解析
  • -预启动应用程序环境,包含引导Dropwizard命令所需的所有内容
  • -Dropwizard应用程序的环境
但这些都是相当模糊的类定义,特别是最后两个。我知道我应该是
配置
的子类,它表示我的应用程序的YAML/JSON配置文件的内存POJO

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

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

所以我问:

  • 什么是
    引导
    ,我用它做什么
  • 什么是
    环境
    ,我使用它做什么

  • Dropwizard基本上是一个固执己见的web框架,主要用作RESTAPI项目。您询问的类是Dropwizard应用程序的关键。开发人员已经将他们希望在其框架中使用的所有库组合在一起,并将它们连接在一起,这样我们就可以轻松地完成他们为我们提供的引导

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

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

    如果您查看一下源文件,就会对这些类的工作方式有一个很好的了解

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


    Dropwizard使用特定的.yml属性自动配置数据源:请参阅

    谢谢@th3morg(+1)-我想这已经开始有意义了,我绝对会看看资料来源做更多的挖掘。关于
    环境
    的一个后续问题是:这是否用于确定我们在Jersey/Jetty的“dev”版本中,因此我们应该使用内存中嵌入的db,而不是容器的“prod”版本,从而使用实际的MySQL服务器?如果没有,您能举出一些
    环境
    用例的具体例子吗?再次感谢@IAmYourFaja我建议做的另一件事是在IDE中以调试模式运行应用程序,在IDE中可以通过引导和环境类暂停和/或逐步执行。你很快就会了解到所有在幕后进行的配置工作:)谢谢@th3morg(+1)-但我在Windows上,无法访问IDE,我只使用普通的ole记事本。如果你想,您可以在Windows上获得NetBeans、Eclipse甚至IntelliJ Community all。我真的不明白为什么引导类要用配置参数化,但在准备bundle进行初始化时无法访问它(我倾向于使用initialize()方法中的Guice将依赖项注入bundle,并需要访问其中的配置)