Dropwizard HelloWorld

Dropwizard HelloWorld

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

我们选择的是用Maven来构建

pom.xml

首先定义dropwizard.version


    INSERT VERSION HERE

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


    
        io.dropwizard
        dropwizard-core
        ${dropwizard.version}
    

到这里,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 {
    public static void main(String[] args) throws Exception {
        new HelloWorldApplication().run(args);
    }

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

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

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

}

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

你可能感兴趣的:(Dropwizard HelloWorld)