Dropwizard 编写Hello world应用
本文介绍如何创建Dropwizard Hello world应用,适合Dropwizard使用入门,对使用Dropwizard的基本流程的理解有一定帮助。
环境准备
在创建Dropwizard应用之前,需要准备好开发环境,Java(JDK 7以上)、Maven和MySQL是必须的。
Java JDK 7下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html
Maven 下载地址:
http://maven.apache.org/download.cgi
MySQL下载地址:
http://dev.mysql.com/downloads/mysql/#downloads
Java和Maven需要配置好环境变量。
创建Maven项目
Maven项目可以使用maven的原型命令maven-archetype-quickstart快速创建,创建出的Maven项目为一个基于标准Maven模板的空项目。
具体步骤如下:
打开命令行,切换到想要创建项目的目录
在命令行中输入以下命令,创建Maven项目:
$ mvn archetype:generate
-DgroupId=com.dwbook.phonebook
-DartifactId=dwbook-phonebook
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
(输入时不要换行符,“-”前接空格)
创建成功则会在当前目录下创建一个空的Maven项目在名为dwbook-phonebook文件夹中。
配置POM文件
创建Maven项目成功后,在dwbook-phonebook目录下会自动生成一个pom.xml文件。想要通过Maven项目创建Dropwizard应用,需要在pom文件中配置Dropwizard依赖项。创建Dropwizard所需要的模块都可以由Maven中央存储库提供,我们需要做的只是提供模块的ID配置到pom中的依赖项,Maven会自动下载所需模块并包含到项目中。
具体步骤如下:
- 在pom.xml文件中加入Dropwizard依赖项,在<dependencies>标签之间加入以下项:
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-core</artifactId>
<version>1.0.2</version>
</dependency>
(依赖项可能存在groupId,artifactId,和合适的version问题,可以自行查找所需依赖,推荐网址:http://repository.sonatype.org/index.html)
2. 加入Maven所需相关插件,用来编译和打包整个项目为一个Jar文件,并可以利用Maven直接运行。在<project>标签之间加入以下项:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.6</version>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
section:<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.dwbook.phonebook.App</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
编写Hello World
在Maven项目的dwbook-phonebook\src\main\java\com\dwbook\phonebook目录中已经自动生成了App.java文件,只是目前此java文件还只是一个普通的java应用类。所以我们需要将其改写为一个Dropwizard应用的类。具体步骤如下:
- 在App.java中导入Dropwizard相关包:
import io.dropwizard.Application;
import io.dropwizard.Configuration;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
- 让App类继承Application <Configuration>类:
public class App extends Application<AppConfig>
- 实现Service类的抽象方法initialize() 和 run():
public void initialize(Bootstrap<AppConfig> b) {}
public void run(AppConfig c, Environment e) throws Exception
{
System.out.println( "Hello world, by Dropwizard!" );
}
- 最后添加main()方法来启动Dropwizard服务:
public static void main( String[] args ) throws Exception
{
new App().run(args);
}
构建、编译运行
- 命令行在项目根目录dwbook-phonebook下,输入:
$ mvn package
构建项目成功,命令行显示如下:
此时,在target文件夹中生成了dwbook-phonebook-1.0-SNAPSHOT.jar文件,即我们要运行的jar文件。
- 在命令行下输入:
$ java -jar target/dwbook-phonebook-1.0-SNAPSHOT.jar server
来运行Dropwizard应用。命令行中显示:
Hello World显示成功。
更多
- 命令行中可能会出现服务启动错误,并提示address already in
use,这是因为Dropwizard应用内置的Jetty服务默认使用8080端口监听应用请求,8081端口监听用户请求,如果这两个端口被其他应用占用则会导致报错。 - 另外,可能会出现错误the ResourceConfig instance does not contain any root resource classes。这是由于我们的Hello world应用还没有创建和配置任何的REST资源。