Dropwizard:一个简洁的RESTful Web框架

dropwizard

Dropwizard跨越了开发库与框架的界限,旨在为Web应用所需的功能提供高性能、可靠的实现。Dropwizard将这些功能抽象为可重用的开发库,因此应用程序可以保持精简与专注,从而大大减少产品面世的时间以及维护负担。

Jetty HTTP库

Web应用都离不开HTTP,Dropwizard使用Jetty HTTP库为项目嵌入HTTP服务器。与复杂的应用服务器不同,Dropwizard项目通过main方法加快HTTP服务器处理。在生产环境独立进程中运行Java应用程序会减少很多麻烦(没有PermGen问题,没有应用服务器配置和维护,没有神秘的部署工具、没有类加载器问题、没有隐藏的应用程序日期、没有多个应用程序负载的垃圾回收器调优)。不仅如此,你还可以使用现成的Unix进程管理工具。

Jersey REST库

我们发现,要构建RESTful Web应用程序,从性能和功能角度考虑JerseyJAX-RS参考实现)是最佳选择。你可以编写整洁、易于测试的类,将HTTP请求映射到简单的Java对象。Jersey REST库支持流输出、URI参数矩阵、条件GET请求等功能。

Jackson JSON库

如果说JSON是Web领域的通用数据格式,那么Jackson就是JVM平台JSON处理的王者。除了处理速度飞快,Jackson还支持复杂的对象映射器,可以直接导出领域模型。

Metrics度量库

Metrics库更加全面,它提供了无论伦比的视角,可以更好地了解代码在生产环境下的行为。

其它开发库

除了JettyJersey 和 Jackson,Dropwizard还包含了很多其它非常有帮助的开发库:

  • Guava:支持不可变数据结构,提供日益丰富的Java工具类加速开发。
  • Logback 和 slf4j 可以提供高效灵活的日志功能。
  • Hibernate ValidatorJSR-349_ 参考实现)提供了简洁、声明式的用户输入验证框架,生成非常有用支持i18n的错误信息。
  • Apache HttpClient 和 Jersey 客户端开发库提供了与其它Web服务的底层和高层交互。
  • JDBI:为Java关系数据库提供了最直接的方式交互。
  • Liquibase:在开发和发布周期中,为数据库schema提供全程检查。支持高层数据库重构,取代了一次性DDL脚本。
  • Freemarker 和 Mustache为面向用的应用程序提供了简单的模板系统。
  • Joda Time:完整强大的时间日期处理开发库。

设置Maven

推荐使用Maven构建新的Dropwizard应用。对Maven使用有任何疑问,可以参考Maven参考大全(Maven新手可以从这里了解如何新建项目)

首先,在POM中加入 dropwizard.version 属性及最新版本:


把 dropwizard-core 加为依赖项:

新建Configuration类

每个Dropwizard应用都有一个Configuration的子类,指定环境相关的参数。这些参数在一个YAML配置文件中指定。该配置会被反序列化,得到应用配置对应的Configuration实例并进行验证。

下面会构建一个高性能Hello World服务,根据环境给出不同的回复。需要准备两个东西:hello模板和默认的用户名(防止用户没有输入)。

下面是configuration类,完整示例请看这里

新建Application类

与Configuration对应,需要为你的Dropwizard应用创建一个Application子类。它会将所有开发包及命令组合提供基本功能。HelloWorldApplication如下:

新建Representation类

运行 Hello World 应用之前,需要停下来考虑提供的API。幸运的是,我们的应用遵循RFC 1149标准,通过下面的JSON调用Hello World:


id字段是唯一标识,content是文字内容。下面是representation实现,一个简单的POJO类:

新建Resource类

Jersey资源是Dropwizard应用的主要内容。每个资源类都关联一个URI模板。在我们的应用中,需要一个资源返回URI /hello-world Saying新实例,资源类如下:

注册Resource

开始运作前需要回到HelloWorldApplication添加新资源类。在run方法中,从HelloWorldConfiguration实例读取模板和默认名字,创建一个HelloWorldResource实例,并注册到应用的Jersey环境:

创建HealthCheck类

HealthCheck用来创建测试,确保在生产环境下运行正常。强烈推荐为应用创建HealthCheck。示例如下:

添加HealthCheck

Dropwizard中,大多数情况下会创建一个新实例并添加到Environment:

构建JAR

推荐把Dropwizard应用构建成包含所有.class文件的单个.jar文件。这样可以避免部署环境下不同的库环境带来问题。构建前,需要配置maven-shade插件。在pom.xml中添加<build><plugins>信息:


为JAR加入版本信息

可以在JAR的配置文件中加入项目版本。使用Maven构建时,可以在pom.xml中添加下面 <build><plugins> 信息:


进入项目目录,运行 mvn package (也可以从IDE中执行)。可以看到下面信息:


恭喜!到此为止,你完成了第一个Dropwizard项目!开始运行吧。

运行

在项目目录执行:


可以看到下列信息:


服务启动时需要一个配置文件,让我们加入YAML文件


输出如下:


Dropwizard已启动,8080端口提供服务,8181端口可以进行管理。服务管理提供了metrics线程和 Healthcheck资源管理。

开发资源

官方网站:http://www.dropwizard.io/
开源地址:https://github.com/dropwizard/dropwizard

打赏支持我整理更多优质资源,谢谢!

打赏编辑

打赏支持我整理更多优质资源,谢谢!

任选一种支付方式

3 1 收藏

资源整理者简介:唐尤华

做自己喜欢的,编程、喝茶、看世界 个人主页 · 贡献了108个资源 · 18 ·    


直接登录

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1440 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer