Introduksjon til Dropwizard

Java Top

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

1. Oversikt

Dropwizard er et open source Java-rammeverk som brukes til rask utvikling av RESTful-nettjenester med høy ytelse. Den samler noen populære biblioteker for å lage lettvektspakken. De viktigste bibliotekene den bruker er Jetty, Jersey, Jackson, JUnit og Guava. Videre bruker den sitt eget bibliotek kalt Metrics.

I denne opplæringen lærer vi hvordan du konfigurerer og kjører et enkelt Dropwizard-program. Når vi er ferdige, vil søknaden avsløre en RESTful API som lar oss skaffe en liste over lagrede merker.

2. Maven-avhengigheter

For det første, den dropwizard-core avhengighet er alt vi trenger for å skape vår tjeneste. La oss legge det til vårt pom.xml:

 io.dropwizard dropwizard-core 2.0.0 

3. Konfigurasjon

Nå oppretter vi de nødvendige klassene som er nødvendige for at alle Dropwizard-applikasjoner skal kjøre.

Dropwizard-applikasjoner lagrer egenskaper i YML-filer. Derfor oppretter vi introduksjon-config.yml fil i ressurskatalogen:

defaultSize: 5

Vi kan få tilgang til verdier i den filen ved å opprette en klasse som utvides io.dropwizard.Configuration:

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

Dropwizard bruker Jackson til å deserialisere konfigurasjonsfilen til klassen vår. Derfor har vi brukt Jackson-merknader.

La oss deretter lage den viktigste applikasjonsklassen, som er ansvarlig for å forberede tjenesten vår for bruk:

offentlig klasse IntroductionApplication utvider Application {public static void main (String [] args) kaster Unntak {new IntroductionApplication (). run ("server", "Introduction-config.yml"); } @Override public void run (BasicConfiguration basicConfiguration, Environment environment) {// registerklasser} @Override public void initialize (Bootstrap bootstrap) {bootstrap.setConfigurationSourceProvider (new ResourceConfigurationSourceProvider ()); super.initialize (bootstrap); }}

For det første, den hoved- metoden er ansvarlig for å kjøre applikasjonen. Vi kunne enten passere argumenterer til løpe metode eller fylle den av oss selv.

Det første argumentet kan være enten server eller Sjekk. De Sjekk alternativet validerer konfigurasjonen, mens server alternativet kjører applikasjonen. Det andre argumentet er plasseringen til konfigurasjonsfilen.

Videre er den initialisere metoden setter konfigurasjonsleverandøren til ResourceConfigurationSourceProvider, som lar applikasjonen finne en gitt konfigurasjonsfil i ressurskatalogen. Det er ikke obligatorisk å overstyre denne metoden.

Til slutt, løpe metoden gir oss tilgang til begge Miljø og BaseConfiguration, som vi bruker senere i denne artikkelen.

4. Ressurs

For det første, la oss lage en domeneklasse for merkevaren vår:

offentlig klasse merkevare {privat finale Lang id; privat slutt Strengnavn; // all args constructor and getters}

For det andre, la oss lage en BrandRepository klasse som vil være ansvarlig for returmerker:

offentlig klasse BrandRepository {private final Liste merker; public BrandRepository (List brands) {this.brands = ImmutableList.copyOf (brands); } public List findAll (int size) {return brands.stream () .limit (size) .collect (Collectors.toList ()); } offentlig Valgfri findById (Long id) {return brands.stream () .filter (brand -> brand.getId (). equals (id)) .findFirst (); }}

I tillegg vi var i stand til å bruke ImmutableList fra Guava fordi det er en del av Dropwizard selv.

For det tredje lager vi en BrandResource klasse. Dropwizard bruker JAX-RS som standard med Jersey som implementering. Derfor bruker vi merknader fra denne spesifikasjonen for å avsløre våre REST API-sluttpunkter:

@Path ("/ brands") @Produces (MediaType.APPLICATION_JSON) offentlig klasse BrandResource {private final int defaultSize; privat slutt 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}") offentlig merkevare getById (@PathParam ("id") Lang id) {return brandRepository .findById (id) .orElseThrow (RuntimeException :: new); }}

I tillegg har vi definert størrelse som Valgfri for å bruke defaultSize fra vår konfigurasjon hvis argumentet ikke er gitt.

Til slutt registrerer vi oss BrandResource i Innledning Søknad klasse. For å gjøre det, la oss implementere løpe metode:

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

Alle opprettede ressurser skal registreres i denne metoden.

5. Kjører applikasjon

I denne delen lærer vi hvordan du kjører applikasjonen fra kommandolinjen.

Først konfigurerer vi prosjektet vårt for å bygge en JAR-fil ved hjelp av 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åtte konfigurasjonen av pluginet. I tillegg har vi tatt med stien til hovedklassen vår i element.

Til slutt bygger vi applikasjonen med Maven. Når vi har JAR-filen vår, kan vi kjøre applikasjonen:

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

Det er Du trenger ikke å sende parametrene fordi vi allerede har tatt dem med i Innledning Søknad klasse.

Etter det skal konsolloggen slutte med:

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

Nå lytter applikasjonen på port 8080, og vi får tilgang til merkevarens endepunkt på // localhost: 8080 / merker.

6. Helsesjekk

Da vi startet søknaden, ble vi informert om at søknaden ikke har noen helsekontroller. Heldigvis, Dropwizard gir en enkel løsning for å legge til helsekontroller i applikasjonen vår.

La oss starte med å legge til en enkel klasse som strekker seg com.codahale.metrics.health.HealthCheck:

offentlig klasse ApplicationHealthCheck utvider HealthCheck {@ Override-beskyttet Resultatkontroll () kaster unntak {return Result.healthy (); }}

Denne enkle metoden vil gi informasjon om sunnheten til komponenten vår. Vi kan lage flere helsesjekker, og noen av dem kan mislykkes i visse situasjoner. For eksempel ville vi komme tilbake Resultat. Usunn () hvis forbindelsen til databasen mislyktes.

Til slutt må vi registrer helsesjekken vår i løpe metode for vår Innledning Søknad klasse:

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

Etter å ha kjørt applikasjonen, kan vi sjekk helsekontrollresponsen under // localhost: 8081 / healthcheck:

{"application": {"healthy": true, "duration": 0}, "deadlocks": {"healthy": true, "duration": 0}}

Som vi kan se, har helsesjekken vår blitt registrert under applikasjon stikkord.

7. Konklusjon

I denne artikkelen har vi lært hvordan du konfigurerer Dropwizard-applikasjonen med Maven.

Vi har oppdaget at basisoppsettet for applikasjonen er veldig enkelt og raskt. I tillegg inkluderer Dropwizard hvert bibliotek vi trenger for å kjøre den høyytende RESTful-nettjenesten.

Som alltid er koden for disse eksemplene tilgjengelig på GitHub.

Java bunn

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

$config[zx-auto] not found$config[zx-overlay] not found