Uvod u Dropwizard

Java Top

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

1. Pregled

Dropwizard je Java okvir otvorenog koda koji se koristi za brzi razvoj RESTful web usluga visokih performansi. Okuplja neke popularne knjižnice za stvaranje laganog paketa. Glavne knjižnice koje koristi su Jetty, Jersey, Jackson, JUnit i Guava. Nadalje, koristi vlastitu knjižnicu pod nazivom Metrics.

U ovom uputstvu naučit ćemo kako konfigurirati i pokrenuti jednostavnu aplikaciju Dropwizard. Kada završimo, naša će aplikacija izložiti RESTful API koji nam omogućuje dobivanje popisa pohranjenih marki.

2. Ovisnosti Mavena

Prvo, dropwizard-core ovisnost je sve što nam treba za stvaranje naše usluge. Dodajmo ga našem pom.xml:

 io.dropwizard dropwizard-core 2.0.0 

3. Konfiguracija

Sada ćemo stvoriti potrebne klase potrebne za pokretanje svake aplikacije Dropwizard.

Dropwizard aplikacije pohranjuju svojstva u YML datoteke. Stoga ćemo stvoriti uvod-config.yml datoteka u direktoriju resursa:

zadana veličina: 5

Vrijednostima u toj datoteci možemo pristupiti stvaranjem klase koja se proteže io.dropwizard.Konfiguracija:

javna klasa BasicConfiguration proširuje Configuration {@NotNull private final int defaultSize; @JsonCreator public BasicConfiguration (@JsonProperty ("defaultSize") int defaultSize) {this.defaultSize = defaultSize; } javni int getDefaultSize () {return defaultSize; }}

Dropwizard koristi Jackson za deserializaciju konfiguracijske datoteke u našu klasu. Stoga smo koristili Jacksonove bilješke.

Dalje, kreirajmo glavnu klasu aplikacije koja je odgovorna za pripremu naše usluge za upotrebu:

javna klasa IntroductionApplication proširuje Application {public static void main (String [] args) baca Exception {new IntroductionApplication (). run ("server", "Introduction-config.yml"); } @Override javna void vožnja (BasicConfiguration basicConfiguration, okruženje okoline) {// registriraj klase} @Override javna void inicijalizacija (Bootstrap bootstrap) {bootstrap.setConfigurationSourceProvider (new ResourceConfigurationSourceProvider ()); super.inicijalizirati (bootstrap); }}

Prvo, glavni metoda odgovorna je za pokretanje aplikacije. Mogli bismo ili proći argumenata prema trčanje metodu ili je sami popunimo.

Prvi argument može biti bilo koji poslužitelju ili ček. The ček opcija provjerava konfiguraciju, dok poslužitelju opcija pokreće aplikaciju. Drugi argument je mjesto konfiguracijske datoteke.

Nadalje, inicijalizirati metoda postavlja davatelja konfiguracije na ResourceConfigurationSourceProvider, koji aplikaciji omogućuje pronalazak zadane konfiguracijske datoteke u direktoriju resursa. Nije obavezno nadjačati ovu metodu.

Na kraju, trčanje metoda omogućuje nam pristup i Okoliš i BaseConfiguration, koju ćemo koristiti kasnije u ovom članku.

4. Resurs

Prvo, kreirajmo klasu domene za našu marku:

marka javne klase {private final Long id; privatni konačni naziv niza; // svi args konstruktor i getteri}

Drugo, stvorimo a BrandRepository klasa koja će biti odgovorna za vraćanje marki:

javna klasa BrandRepository {privatni konačni popis marki; javni BrandRepository (Popis marki) {this.brands = ImmutableList.copyOf (robne marke); } javni popis findAll (int size) {return marke.stream () .limit (size) .collect (Collectors.toList ()); } javni Izborni findById (dugački id) {return marke.stream () .filter (brand -> brand.getId (). jednako (id)) .findFirst (); }}

Dodatno, mogli smo koristiti Nepromjenjiva lista iz Guave jer je dio samog Dropwizarda.

Treće, izradit ćemo BrandResource razred. Dropwizard prema zadanim postavkama koristi JAX-RS, a Jersey kao implementaciju. Stoga ćemo upotrijebiti napomene iz ove specifikacije za izlaganje krajnjih točaka REST API-ja:

@Path ("/ brands") @Produces (MediaType.APPLICATION_JSON) javna klasa BrandResource {private final int defaultSize; privatni konačni BrandRepository brandRepository; javni BrandResource (int defaultSize, BrandRepository brandRepository) {this.defaultSize = defaultSize; this.brandRepository = brandRepository; } @GET javni popis getBrands (@QueryParam ("size") Neobvezna veličina) {return brandRepository.findAll (size.orElse (defaultSize)); } @GET @Path ("/ {id}") javni brend getById (@PathParam ("id") Long id) {return brandRepository .findById (id) .orElseThrow (RuntimeException :: new); }}

Uz to smo definirali veličina kao Neobvezno kako bi se koristila defaultSize iz naše konfiguracije ako argument nije naveden.

Na kraju ćemo se registrirati BrandResource u UvodPrimjena razred. Da bismo to učinili, provedimo trčanje metoda:

@Override public void run (BasicConfiguration basicConfiguration, Environment environment) {int defaultSize = basicConfiguration.getDefaultSize (); BrandRepository brandRepository = novi BrandRepository (initBrands ()); BrandResource brandResource = novi BrandResource (defaultSize, brandRepository); okoliš .jersey () .register (brandResource); }

Svi stvoreni resursi trebaju biti registrirani ovom metodom.

5. Pokretanje aplikacije

U ovom ćemo odjeljku naučiti kako pokretati aplikaciju iz naredbenog retka.

Prvo ćemo konfigurirati naš projekt za izgradnju JAR datoteke pomoću maven-shadow-plugin:

 org.apache.maven.plugins maven-shadow-plugin true *: * META-INF / *. SF META-INF / *. DSA META-INF / *. RSA paket sjena com.baeldung.dropwizard.introduction.IntroductionApplication 

Ovo je predložena konfiguracija dodatka. Uz to, u sustav smo uključili i put do naše glavne klase element.

Napokon ćemo aplikaciju izraditi s Mavenom. Nakon što imamo našu JAR datoteku, možemo pokrenuti aplikaciju:

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

Eto nema potrebe za prosljeđivanjem parametara jer smo ih već uključili u UvodPrimjena razred.

Nakon toga, zapisnik konzole trebao bi završiti sa:

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

Sada aplikacija sluša na portu 8080, a krajnjoj točki svoje marke možemo pristupiti na // localhost: 8080 / marke.

6. Zdravstveni pregled

Prilikom pokretanja aplikacije, obaviješteni smo da aplikacija nema zdravstvene provjere. Srećom, Dropwizard nudi jednostavno rješenje za dodavanje zdravstvenih provjera u našu aplikaciju.

Počnimo s dodavanjem jednostavne klase koja se proširuje com.codahale.metrics.health.HealthCheck:

javna klasa ApplicationHealthCheck proširuje HealthCheck {@Override zaštićen Provjera rezultata () baca izuzetak {return Result.healthy (); }}

Ova jednostavna metoda vratit će informacije o zdravosti naše komponente. Mogli bismo stvoriti višestruke zdravstvene preglede, a neki od njih mogu propasti u određenim situacijama. Na primjer, vratili bismo se Rezultat.nezdrav () ako veza s bazom podataka nije uspjela.

Napokon, moramo registrirajte našu zdravstvenu provjeru u trčanje metoda našeg UvodPrimjena razred:

environment .healthChecks () .register ("aplikacija", nova ApplicationHealthCheck ());

Nakon pokretanja aplikacije možemo provjeriti odgovor zdravstvene provjere pod, ispod // localhost: 8081 / healthcheck:

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

Kao što vidimo, naša zdravstvena provjera registrirana je pod primjena označiti.

7. Zaključak

U ovom smo članku naučili kako postaviti aplikaciju Dropwizard s Mavenom.

Otkrili smo da je osnovno postavljanje aplikacije zaista jednostavno i brzo. Uz to, Dropwizard uključuje svaku knjižnicu koja nam je potrebna za pokretanje web usluge RESTful visokih performansi.

Kao i uvijek, kod za ove primjere dostupan je na GitHubu.

Dno Java

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ