jersey - DropWizard Bootstrap vs 配置 vs 环境

标签 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 )。我习惯注入(inject)特定于环境的配置 进入我的应用程序,因此我倾向于将“环境”和“配置”的概念视为同一概念。

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

    所以我问:
  • 什么是Bootstrap ,我用它做什么?
  • 什么是 Environment ,我用它做什么?
  • 最佳答案

    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 .

    关于jersey - DropWizard Bootstrap vs 配置 vs 环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27385737/

    相关文章:

    java - 无法使用 Jersey 解析 RESTful 应用程序中的日期

    Java & Jersey 1.17 : Custom default response headers

    java - 使用嵌入式 Jetty 将参数传递给资源

    java - 无法从 Karaf 2.2.0 OSGi 容器中的根上下文运行 WAR

    java - 如何从jetty下的web-app.war中获取lib.jar的类实例?

    java - 链接/元素扩展的 JAX-RS 实现?

    Java Jersey PathParams 检查和 NotFoundException 自定义消息

    Jersey 无标记

    java - Application/JSON 是 Restful Web 服务中不支持的媒体类型

    java - 实例化 EntityManager 的最佳实践