Dropwizard框架搭建微服务入门学习(maven)
来源:互联网 发布:齐天乐春节晚会 知乎 编辑:程序博客网 时间:2024/06/05 20:08
最近新加入一个团队,需要使用Dropwizard微服务框架,搭建一个最简单的demo入门。
一、DropWizard简单介绍(copy)
DropWizard各部分功能所使用的组件,详细可以各个部分再查资料。
二、项目搭建
1、搭建一个简单的maven工程(quickstart)
(1)New --> Other -->Maven Project
选择这个quickstart即可,不需要自己建webapp项目,然后根据要求填写项目名等。
(2)生成项目结构:
(3)补充
添加src/main/resources目录
修改jdk版本,现在是1.5,修改为1.7。修改方法:在pom文件中添加:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build>
然后更新maven工程。
至此项目maven项目搭建完成。
2、添加dropwizard依赖
修改pom文件:
<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.zte.yzh</groupId> <artifactId>dw-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>dw-demo</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <release.repos.ip>10.74.156.77</release.repos.ip> <snapshot.repos.ip>10.74.156.77</snapshot.repos.ip><dropwizard.version>0.8.0</dropwizard.version><swagger.version>1.5.3</swagger.version><gson.version>2.2.4</gson.version><jersey.version>2.16</jersey.version><mysql.version>5.1.38</mysql.version><jdom.version>1.0</jdom.version><jsch.version>0.1.53</jsch.version><org-apache-commons-jexl.version>2.1.1</org-apache-commons-jexl.version><commons-net.version>3.3</commons-net.version><cometd.version>3.0.7</cometd.version><quartz.version>2.2.3</quartz.version><snmp4j.version>1.10.1</snmp4j.version><uep.version>4.11.50.B3SP002</uep.version><junit.version>4.12</junit.version><poi.version>3.11</poi.version><poi-ooxml.version>3.11</poi-ooxml.version><poi-ooxml-schemas.version>3.11</poi-ooxml-schemas.version><zip4j.version>1.3.2</zip4j.version><concurrent.version>1.3.4</concurrent.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>${gson.version}</version></dependency><dependency><groupId>io.dropwizard</groupId><artifactId>dropwizard-core</artifactId><version>${dropwizard.version}</version></dependency><dependency><groupId>io.dropwizard</groupId><artifactId>dropwizard-assets</artifactId><version>${dropwizard.version}</version></dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> </project>
<properties>标签内有些没用的版本标记,懒得删除了。
3、项目全貌
(1)Configuration和yml文件编写(项目启动需要的初始内容)
本demo仅仅为学习,所以yml中没配置什么关键西信息,仅仅将以把yml文件内容输出为目的。
DemoConfiguration.java
package com.zte.demo;import io.dropwizard.Configuration;import javax.validation.Valid;import org.hibernate.validator.constraints.NotEmpty;import com.fasterxml.jackson.annotation.JsonProperty;import com.yzh.demo.model.CometdServletInfo;public class DemoConfiguration extends Configuration {@NotEmpty private String template; @NotEmpty private String defaultName = "yzn Demo"; private boolean saveTaskToFile = false; @Valid private CometdServletInfo cometdServletInfo; @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; } @JsonPropertypublic CometdServletInfo getCometdServletInfo() {return cometdServletInfo;} @JsonPropertypublic void setCometdServletInfo(CometdServletInfo cometdServletInfo) {this.cometdServletInfo = cometdServletInfo;}public boolean isSaveTaskToFile() {return saveTaskToFile;}public void setSaveTaskToFile(boolean saveTaskToFile) {this.saveTaskToFile = saveTaskToFile;}}
package com.yzh.demo.model;public class CometdServletInfo { private String servletClass; private String servletPath;/** * @return the servletClass */public String getServletClass() {return servletClass;}/** * @param servletClass the servletClass to set */public void setServletClass(String servletClass) {this.servletClass = servletClass;}/** * @return the servletPath */public String getServletPath() {return servletPath;}/** * @param servletPath the servletPath to set */public void setServletPath(String servletPath) {this.servletPath = servletPath;} }
demo.yml文件
template: Hello, %s!defaultName: ${DW_DEFAULT_NAME:-Stranger}cometdServletInfo: servletClass: com.zte.ums.zenap.itm.agent.cometd.server.CometdServlet servletPath: /api/itmagentnotification/v1
可以看出来是对应关系,启动时候读取的配置文件。
(2)DemoApp类,即服务启动类
package com.zte.demo;import io.dropwizard.Application;import io.dropwizard.setup.Bootstrap;import io.dropwizard.setup.Environment;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.yzh.demo.resources.DemoResource;public class DemoApp extends Application<DemoConfiguration> { /** * log print */private static final Logger LOG = LoggerFactory.getLogger(DemoApp.class);public static void main(String[] args) {try {new DemoApp().run(args);} catch (Exception e) {LOG.error("service start failed");e.printStackTrace();}}@Overridepublic void run(DemoConfiguration configuration, Environment env)throws Exception {final DemoResource res = new DemoResource(configuration);env.jersey().register(res);}@Overridepublic void initialize(Bootstrap<DemoConfiguration> bootstrap) {super.initialize(bootstrap);}}
一个main方法启动,将所以本app中的资源添加到dropwizard管理,关键主要在资源类,run方法首先初始化资源,然后将资源注册到框架。
DW不是将你的程序提交到复杂的服务器上,DW上有个main方法来启动我们的服务器,DW是将我们的应用作为一个简单的线程来跑,消去了Java生产环境中一些非常复杂令人讨厌的过程,并且允许我们使用所有现有的Unix进程管理工具。
(3)DemoResource类,资源关键类
package com.yzh.demo.resources;import javax.ws.rs.GET;import javax.ws.rs.Path;import javax.ws.rs.Produces;import javax.ws.rs.core.MediaType;import com.zte.demo.DemoConfiguration;@Path("/demo")@Produces(MediaType.APPLICATION_JSON)public class DemoResource {private DemoConfiguration content;public DemoResource(DemoConfiguration content){this.content = content;}@GET@Path("/show")@Produces(MediaType.APPLICATION_JSON) public DemoConfiguration printYMLContent(){ return content; }}其实也没什么,和一般的MVC框架类似,只是标注了不同的注解。
@Produces(MediaType.APPLICATION_JSON)让Jersey的内容协商代码知道这个资源产生的是application/json.
三、运行结果
直接运行main方法,但是需要传入两个参数,一个是固定的server,一个是我们编写的yml文件
run as -->run configuration
上面arguments里填写你自己的yml地址,前面的server固定不变,然后Run,我这里报端口占用,dropwizard默认端口是8080.需要改一下yml文件,配置自己的端口号。
新的yml
template: Hello, %s!defaultName: ${DW_DEFAULT_NAME:-Stranger}cometdServletInfo: servletClass: com.zte.ums.zenap.itm.agent.cometd.server.CometdServlet servletPath: /api/itmagentnotification/v1 server: type: simple rootPath: '/*' applicationContextPath: / connector: type: http port: 9090
启动以后
访问注册的资源:
demo入门项目搭建完成,没有任何逻辑。
关键就只有两个地方,启动类app的run方法注册资源流程和资源类的注解(url、数据类型)等。
阅读全文
0 0
- Dropwizard框架搭建微服务入门学习(maven)
- Dropwizard框架入门
- dropwizard框架学习
- REST微服务架构之DropWizard
- Dropwizard框架新手学习教程(详细版)
- Spring Cloud 快速入门esclipse快速搭建微服务框架 (一)-注册与发现
- DropWizard--轻量级REST开发框架初次搭建
- Dropwizard 框架
- springboot微服务搭建(一):搭建springboot框架
- dropwizard微服务实践
- maven+spring boot搭建简单微服务
- maven+spring boot搭建简单微服务
- Dropwizard(一)教程-简单搭建
- Spring-boot:快速搭建微服务框架
- Java 微服务框架 Redkale 入门介绍
- springboot微服务框架10分钟入门
- 微服务构建:Spring Boot入门学习(1)
- Spring Boot 微服务构建入门学习
- orcad创建元器件方法
- Retrofit使用Log拦截器在控制台输出Log
- 第七章、更高级的索引结构(XML索引、用户定义数据类型、层次数据、空间数据、文件流、表压缩)
- Spring框架中的单例Beans是线程安全的么
- stm32f4xx标准外设固件库
- Dropwizard框架搭建微服务入门学习(maven)
- 使用Kotlin开发Android基础介绍
- 指针和引用的区别
- Pycharm中如何加载多个项目?
- 「57万片段+10万动作+21万标签」谷歌发布人类动作识别数据集AVA
- HTML5中的WebSocket
- C语言创建管道实现进程间通信
- 东北大学科学家利用CNN识别贫血患者红细胞
- 创建一个带有SQLserver数据库模型的MVC项目