Introduktion til Dropwizard

Java Top

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN

1. Oversigt

Dropwizard er en open source Java-ramme, der bruges til hurtig udvikling af højtydende RESTful webtjenester. Det samler nogle populære biblioteker for at oprette letvægtspakken. De vigtigste biblioteker, den bruger, er Jetty, Jersey, Jackson, JUnit og Guava. Desuden bruger det sit eget bibliotek kaldet Metrics.

I denne vejledning lærer vi, hvordan du konfigurerer og kører en simpel Dropwizard-applikation. Når vi er færdige, udsætter vores applikation en RESTful API, der giver os mulighed for at få en liste over gemte mærker.

2. Maven-afhængigheder

For det første dropwizard-kerne afhængighed er alt, hvad vi har brug for for at skabe vores service. Lad os tilføje det til vores pom.xml:

 io.dropwizard dropwizard-core 2.0.0 

3. Konfiguration

Nu opretter vi de nødvendige klasser, der er nødvendige for at alle Dropwizard-applikationer kan køre.

Dropwizard-applikationer gemmer egenskaber i YML-filer. Derfor opretter vi introduktion-config.yml fil i ressourcebiblioteket:

standardstørrelse: 5

Vi kan få adgang til værdier i den fil ved at oprette en klasse, der udvides io.dropwizard.Configuration:

offentlig klasse BasicConfiguration udvider Configuration {@NotNull private final int standardSize; @JsonCreator offentlig BasicConfiguration (@JsonProperty ("defaultSize") int defaultSize) {this.defaultSize = defaultSize; } public int getDefaultSize () {return defaultSize; }}

Dropwizard bruger Jackson til at deserialisere konfigurationsfilen til vores klasse. Derfor har vi brugt Jackson-kommentarer.

Lad os derefter oprette hovedapplikationsklassen, som er ansvarlig for at forberede vores service til brug:

public class IntroductionApplication udvider Application {public static void main (String [] args) kaster Undtagelse {new IntroductionApplication (). run ("server", "Introduction-config.yml"); } @Override public void run (BasicConfiguration basicConfiguration, Environment environment) {// register classes} @Override public void initialize (Bootstrap bootstrap) {bootstrap.setConfigurationSourceProvider (new ResourceConfigurationSourceProvider ()); super.initialize (bootstrap); }}

For det første vigtigste metode er ansvarlig for at køre applikationen. Vi kunne enten passere argumenterer til løb metode eller udfylde det selv.

Det første argument kan være enten server eller kontrollere. Det kontrollere option validerer konfigurationen, mens server option kører applikationen. Det andet argument er placeringen af ​​konfigurationsfilen.

Desuden er den initialisere metoden indstiller konfigurationsudbyderen til ResourceConfigurationSourceProvider, som gør det muligt for applikationen at finde en given konfigurationsfil i ressourcebiblioteket. Det er ikke obligatorisk at tilsidesætte denne metode.

Endelig er det løb metode giver os adgang til begge Miljø og BaseConfiguration, som vi bruger senere i denne artikel.

4. Ressource

Lad os først oprette en domæneklasse for vores brand:

offentlig klasse Brand {privat final Lang id; privat endelig Navn på streng; // alle args konstruktør og getters}

For det andet, lad os oprette en BrandRepository klasse, der er ansvarlig for returnering af mærker:

offentlig klasse BrandRepository {private final Listemærker; public BrandRepository (List brands) {this.brands = ImmutableList.copyOf (brands); } offentlig liste findAll (int størrelse) {return brands.stream () .limit (størrelse) .collect (Collectors.toList ()); } offentlig Valgfri findById (Long id) {return brands.stream () .filter (brand -> brand.getId (). equals (id)) .findFirst (); }}

Derudover vi var i stand til at bruge ImmutableList fra Guava, fordi det er en del af Dropwizard selv.

For det tredje opretter vi en BrandResource klasse. Dropwizard bruger JAX-RS som standard med Jersey som implementering. Derfor bruger vi annoteringer fra denne specifikation til at udsætte vores REST API-slutpunkter:

@Path ("/ brands") @Produces (MediaType.APPLICATION_JSON) offentlig klasse BrandResource {private final int defaultSize; privat endelig BrandRepository brandRepository; offentlig BrandResource (int defaultSize, BrandRepository brandRepository) {this.defaultSize = defaultSize; this.brandRepository = brandRepository; } @GET offentlig liste getBrands (@QueryParam ("størrelse") Valgfri størrelse) {return brandRepository.findAll (size.orElse (defaultSize)); } @GET @Path ("/ {id}") offentligt brand getById (@PathParam ("id") Lang id) {return brandRepository .findById (id) .orElseThrow (RuntimeException :: new); }}

Derudover har vi defineret størrelse som Valgfri for at bruge standardstørrelse fra vores konfiguration, hvis argumentet ikke er angivet.

Endelig registrerer vi os BrandResource i IntroduktionApplicaton klasse. For at gøre det, lad os implementere løb metode:

@Override public void run (BasicConfiguration basicConfiguration, Environment environment) {int defaultSize = basicConfiguration.getDefaultSize (); BrandRepository brandRepository = nyt BrandRepository (initBrands ()); BrandResource brandResource = ny BrandResource (defaultSize, brandRepository); miljø .jersey () .register (brandResource); }

Alle oprettede ressourcer skal registreres i denne metode.

5. Kører applikation

I dette afsnit lærer vi, hvordan du kører applikationen fra kommandolinjen.

Først konfigurerer vi vores projekt til at oprette en JAR-fil ved hjælp af maven-skygge-plugin:

 org.apache.maven.plugins maven-shade-plugin true *: * META-INF / *. SF META-INF / *. DSA META-INF / *. RSA-pakke skygge com.baeldung.dropwizard.introduction.IntroductionApplication 

Dette er den foreslåede konfiguration af pluginet. Derudover har vi inkluderet stien til vores hovedklasse i element.

Endelig bygger vi applikationen med Maven. Når vi har vores JAR-fil, kan vi køre applikationen:

java -jar target / dropwizard-0.0.1-SNAPSHOT.jar

Der er ingen grund til at videregive parametrene, fordi vi allerede har inkluderet dem i Introduktion Ansøgning klasse.

Derefter skal konsolloggen slutte med:

INFO [2020-01-08 18: 55: 06,527] org.eclipse.jetty.server.Server: Startet @ 1672ms

Nu lytter applikationen til port 8080, og vi kan få adgang til vores brandendepunkt kl // localhost: 8080 / mærker.

6. Sundhedstjek

Da vi startede applikationen, blev vi informeret om, at applikationen ikke har nogen sundhedskontrol. Heldigvis, Dropwizard giver en nem løsning til at tilføje sundhedstjek til vores applikation.

Lad os starte med at tilføje en simpel klasse, der udvides com.codahale.metrics.health.HealthCheck:

offentlig klasse ApplicationHealthCheck udvider HealthCheck {@ Override-beskyttet Resultatkontrol () kaster undtagelse {returner Resultat.healthy (); }}

Denne enkle metode returnerer oplysninger om sundheden i vores komponent. Vi kunne oprette flere sundhedstjek, og nogle af dem kunne mislykkes i visse situationer. For eksempel ville vi vende tilbage Resultat. Usundt () hvis forbindelsen til databasen mislykkedes.

Endelig skal vi registrer vores sundhedstjek i løb metode til vores Introduktion Ansøgning klasse:

miljø .healthChecks () .register ("applikation", ny ApplicationHealthCheck ());

Efter at have kørt applikationen kan vi tjek sundhedstjekresponset under // localhost: 8081 / healthcheck:

{"applikation": {"sund": sand, "varighed": 0}, "deadlocks": {"sund": sand, "varighed": 0}}

Som vi kan se, er vores sundhedstjek blevet registreret under Ansøgning tag.

7. Konklusion

I denne artikel har vi lært, hvordan du konfigurerer Dropwizard-applikationen med Maven.

Vi har opdaget, at basisopsætningen af ​​applikationen er virkelig let og hurtig. Derudover inkluderer Dropwizard hvert bibliotek, som vi har brug for til at køre den højtydende RESTful-webservice.

Som altid er koden til disse eksempler tilgængelig på GitHub.

Java bund

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN