Dropwizard HelloWorld

Dropwizard HelloWorld

上篇我们介绍了Dropwizard的一些概念和理念,本篇我们主要是动手实践,写一个Dropwizard HelloWorld.

我们选择的是用Maven来构建

pom.xml

首先定义dropwizard.version

<properties>
    <dropwizard.version>INSERT VERSION HERE</dropwizard.version>
</properties>

然后引入dorpwizard-core相关依赖:

<dependencies>
    <dependency>
        <groupId>io.dropwizard</groupId>
        <artifactId>dropwizard-core</artifactId>
        <version>${dropwizard.version}</version>
    </dependency>
</dependencies>

到这里,maven的pom.xml已经定义好了,是时候开始写真正的代码了。

创建一个Configuration类

每个Dropwizard应用都有继承于Configuration的子类来指定特定于环境的参数,这些参数可以在YAML文件中进行配置,然后反序列化到您的应用程序的配置类和验证实例。
我们即将构建的应用是一个高性能的Hello World服务,我们的要求之一是,我们需要能够改变它如何从环境向环境say hello。我们首先需要指定至少两件事:一个用于say hello的模板和一个默认名称,以防用户没有指定它们的名称。
下面就是我们的配置类:

package com.example.helloworld;

import io.dropwizard.Configuration;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.hibernate.validator.constraints.NotEmpty;

public class HelloWorldConfiguration extends Configuration {
    @NotEmpty
    private String template;

    @NotEmpty
    private String defaultName = "Stranger";

    @JsonProperty
    public String getTemplate() {
        return template;
    }

    @JsonProperty
    public void setTemplate(String template) {
        this.template = template;
    }

    @JsonProperty
    public String getDefaultName() {
        return defaultName;
    }

    @JsonProperty
    public void setDefaultName(String name) {
        this.defaultName = name;
    }
}

这里发生了很多事情,所以让我们一点点揭开它的面纱。
当这个类从YAML文件中进行反序列化,将从YAML对象中拉取两个根级别的字段:template,我们Hello World中saying的模版,defaultName,默认使用的名字。templatedefaultName都使用了@NotEmpty注解,所以如果YAML配置文件有任何空白值或是丢失模板完全信息会抛出异常,而你的应用程序将无法启动。
templatedefaultName的get和set方法,都使用了@JsonProperty注解,让Jackson可以从YAML文件进行反序列化,也可以将它序列化。
YAML文件如下:

template: Hello, %s!
defaultName: Stranger

Dropwizard有更多的配置,但它们都有合理的默认设置,所以你可以只重点关注自己的配置文件。
在你即将运行jar包的路径中保存这个YAML文件,命名为hello-world.yml,因为我们要很快的跑起来,所以我们需要它。下一步,我们将创建我们的Application类。

创建Application类

结合Configuration的子类,Application的子类组成了Dropwizard应用的核心。Application类将基本功能的各种包和命令组合在一起,现在,我们的HelloWorldApplication类如下:

package com.example.helloworld;

import io.dropwizard.Application;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
import com.example.helloworld.resources.HelloWorldResource;
import com.example.helloworld.health.TemplateHealthCheck;

public class HelloWorldApplication extends Application<HelloWorldConfiguration> {
    public static void main(String[] args) throws Exception {
        new HelloWorldApplication().run(args);
    }

    @Override
    public String getName() {
        return "hello-world";
    }

    @Override
    public void initialize(Bootstrap<HelloWorldConfiguration> bootstrap) {
        // nothing to do yet
    }

    @Override
    public void run(HelloWorldConfiguration configuration,
                    Environment environment) {
        // nothing to do yet
    }

}

你可以看到,HelloWorldConfiguration作为HelloWorldApplication的参数,初始化方法用于配置应用程序运行前所需的哥哥方面,如捆绑包、配置源等。此外,main方法作为应用程序的入口,到此为止,我们没有实现任何的功能点,可能有些枯燥,下面即将开始实现功能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,971评论 6 342
  • 原文链接:http://www.dropwizard.io/1.2.0/docs/getting-started....
    Lance_Xu阅读 950评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,778评论 18 399
  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,237评论 22 257