在8年软件开发生涯中我俨然一位Java开发者了。大多数我写的程序,都用Spring框架或者Java EE.最近我在学Python Web开发,其中印象很深的一个是Flask框架。Flask框架是个微框架,使得写REST后端很简单。我今天的30天挑战,决定找一款Java框架替代Python的Flask。一番搜索后,我发现Dropwizard框架可以达到如Flask同样的功效。这篇博客,我们来学习怎样用Dropwizard构建RESTful Java MongoDB程序。
什么是Dropwizard?
Dropwizard是一款开源Java框架,用于ops友好开发,高性能RESTful后端开发。它由Yammer开发并提供基于JVM后端的支持。
Dropwizar延续最优Java库,嵌入到程序包,包括以下组件:
- 嵌入Jetty: 每个程序都打包成jar而不是war,启用自带的Jetty容器,没有WAR文件也没有外部servlet容器。
- JAX-RS: Jersey(JAX-RS的参考实现)用来写RESTful Web服务,这样就没白费你已懂的JAX-RS知识。
- JSON: REST服务使用JSON, Jackson库用来做所有JSON处理。
- Logging: 用Logback和SLF4J完成。
- Hibernate Validator: Dropwizard用Hbernate Vlidator API来验证声明。
- Metrics: Dropwizard支持用Metrics库进行检测,提供观察代码对生产做了什么的绝佳视觉。
为什么选择Dropwizard?
我学习Dropwizard的几点原因:
- 快速的项目引导:要是你用过Spring或者Java EE, 就会了解开发者要通过项目引导的痛苦,用Dropwizard,只需要添加一个依赖到pom.xml文件就好了。
- 项目Metrics: Dropwizard支持项目metrics, 它提供很有用的信息如请求/相应时间等,我们只需给出@Timed注解就可获得方法执行时间。
- 生产力:每个Dropwizard应用有一个启用Jetty容器的主程序,意味着可以在IDE里直接像主程序一样运行和调试,没有必要再编译或者部署WAR文件。
Github仓库
今天的demo放在github: day13-dropwizard-mongodb-demo-app.
前提准备
- 必须会Java基础。
- 下载和安装MongoDB数据库。
- 安装最新Java Development Kit(JDK), 可以装OpenJDK7或者Oracle JDK 7. OpenShift支持OpenJDK 6和7, 这篇博客,我们用JDK 7.
- 从官网下载最新的Eclipse,目前最新版本是Kepler.
安装Eclipse很简单,只需解压下载的安装包。在linux或者mac上,打开命令管理器输入以下命令。
$ tar -xzvf eclipse-jee-kepler-R-*.tar.gz
Windows上可以用7-zip或者其他解压工具解压,解压后,在你解压的路径会有一个eclipse的文件夹,可以给可执行文件创建快捷键。
第一步:新建Maven项目
打开Eclipse IDE导航到项目空间,新建项目,到File > New > Maven Project,选择maven-archetype-quichstart,输入Ground Id和Artifact Id,最后点Finish.
第二步:更新pom.xml
现在更新pom.xml, 加入dropwizard-core maven依赖,再更新Maven项目用Java 1.7版本,更新pom.xml后更新Maven项目(右击>Maven>Update Project)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.shekhar</groupId> <artifactId>blog</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>blog</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>com.yammer.dropwizard</groupId> <artifactId>dropwizard-core</artifactId> <version>0.6.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> </project>