美文网首页
DropWizard入门实践

DropWizard入门实践

作者: yuhan_sining | 来源:发表于2020-03-13 13:53 被阅读0次

    Dropwizard是一个操作友好、开发RESTful服务的Java高性能框架,Dropwizard有自己独立的风格,可以辅助以Jetty Jackson Jersey和Metrics提供强大的基于JVM后端服务,Dropwizard将稳定 成熟带给了Java生态系统,大道至简,轻量库包让你聚焦业务,Dropwizard有out-of-the-box支持复杂的配置 应用度量记录、日志等,让你的队伍在短时间内生产出高质量的HTTP+JSON Web服务。

    https://www.jdon.com/soa/6-restful.html

    DropWizard结构的Web服务组成

    • 1、Configuration:用于设置该服务的配置,比方说在服务开放在哪个端口,数据库配置是怎样的等等。
    • 2、Service:该服务的主入口,定义该服务使用哪个配置文件,开放哪些Resource,该服务需要哪些HealthCheck等等。
    • 3、Resource:定义一个资源,包括如何获取该资源,对该资源做Get/Post/Delete/Query时,对应的各种业务逻辑。
    • 4、Representation:定义了一个服务返回值对象,当服务返回该对象时,会自动的把该对象按属性值生成一个Json格式的字符串返回给服务调用者。
    • 5、HealthCheck:在DropWizard为每个服务提供的OM框架中用到,通过它可以随时检测当前服务是否可用。

    使用Dropwizard写一个RESTful Service:
    用Dropwizard写一个RESTful Service至少需要这么几个部分:一是Configuration,二是Service,然后是Resource。因为Dropwizard中已经包括了最常用和最好用的几个开源库,这样编写一个Service会方便和快捷很多。Configuration主要是作为Serivce本身的配置,通过Service可以访问对应的Resource。
    Configuration用于从配置文件中读取信息。Dropwizard中默认的是使用yaml,当你提供的配置文件的后缀名不是.yml或者.yaml时,将会讲你的配置文件看做JSON格式。

    配置文件time-service.yml

    defaultTimezone: UTC
    server:
      applicationConnectors:
      - type: http
        port: 9000
      adminConnectors:
      - type: http
        port: 9001
    

    配置文件封装类

    package com.zte.sunquan.demo.wizard;
     
    import io.dropwizard.Configuration;
    import org.hibernate.validator.constraints.NotEmpty;
     
    import com.fasterxml.jackson.annotation.JsonProperty;
    
    public class TimeZoneConfigure extends Configuration {
        @NotEmpty
        @JsonProperty
        private String defaultTimezone;
     
        public String getDefaultTimezone() {
            return defaultTimezone;
        }
     
    }
    

    主体请求处理逻辑

    package com.zte.sunquan.demo.wizard;
     
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.TimeZone;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.QueryParam;
    import javax.ws.rs.core.MediaType;
     
    import com.google.common.base.Optional;
     
    @Path("/time")
    @Produces(MediaType.APPLICATION_JSON)
    public class TimeResource {
        private final String defaultTimezone;
     
        public TimeResource(String defaultTimezone) {
            this.defaultTimezone = defaultTimezone;
        }
     
        @GET
        public Time getTime(@QueryParam("timezone") Optional timezone) {
            DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("配置文件中配置:" + defaultTimezone);//配置文件中配置
            TimeZone timeZone = null;
            if (timezone.isPresent()) {
                timeZone = TimeZone.getTimeZone(timezone.get().toString());
                System.out.println("请求中配置:" + timezone.get().toString());
            } else {
                timeZone = TimeZone.getTimeZone(defaultTimezone);
            }
            formatter.setTimeZone(timeZone);
            String formatted = formatter.format(new Date());
            return new Time(formatted);
        }
    }
    

    启动类

    package com.zte.sunquan.demo.wizard;
     
    import io.dropwizard.Application;
    import io.dropwizard.setup.Bootstrap;
     
    public class TimeApplication extends Application<TimeZoneConfigure> {
        public static void main(String[] args) throws Exception {
            new TimeApplication().run(args);
        }
     
        @Override
        public void initialize(Bootstrap timezoneConfigurationBootstrap) {
        }
     
        @Override
        public void run(TimeZoneConfigure timeZoneConfigure, io.dropwizard.setup.Environment environment) throws Exception {
            final TimeResource resource = new TimeResource(timeZoneConfigure.getDefaultTimezone());
            environment.jersey().register(resource);
        }
    }
    

    注意dropwizard需要传入配置文件:

    http://localhost:9000/time?timezone=MST
    输出:
    {"time":"2018-09-08 08:47:15"}

    http://localhost:9000/time
    输出:
    {"time":"2018-09-08 01:47:53"}

    相关文章

      网友评论

          本文标题:DropWizard入门实践

          本文链接:https://www.haomeiwen.com/subject/oyafshtx.html