Inleiding tot Dropwizard

Java Top

Ik heb zojuist het nieuwe aangekondigd Leer de lente natuurlijk, gericht op de basisprincipes van Spring 5 en Spring Boot 2:

>> BEKIJK DE CURSUS

1. Overzicht

Dropwizard is een open-source Java-framework dat wordt gebruikt voor de snelle ontwikkeling van krachtige RESTful-webservices. Het verzamelt een aantal populaire bibliotheken om het lichtgewicht pakket te maken. De belangrijkste bibliotheken die het gebruikt, zijn Jetty, Jersey, Jackson, JUnit en Guava. Bovendien gebruikt het zijn eigen bibliotheek met de naam Metrics.

In deze tutorial leren we hoe je een eenvoudige Dropwizard-applicatie configureert en uitvoert. Als we klaar zijn, zal onze applicatie een RESTful API tonen waarmee we een lijst met opgeslagen merken kunnen opvragen.

2. Maven afhankelijkheden

Ten eerste de dropwizard-core afhankelijkheid is alles wat we nodig hebben om onze service te creëren. Laten we het toevoegen aan ons pom.xml:

 io.dropwizard dropwizard-core 2.0.0 

3. Configuratie

Nu gaan we de nodige klassen maken die nodig zijn om elke Dropwizard-applicatie uit te voeren.

Dropwizard-applicaties slaan eigenschappen op in YML-bestanden. Daarom maken we het introductie-config.yml bestand in de resourcemap:

standaardgrootte: 5

We hebben toegang tot waarden in dat bestand door een klasse te maken die zich uitbreidt io.dropwizard.Configuration:

public class BasicConfiguration breidt Configuratie uit {@NotNull private final int defaultSize; @JsonCreator openbare BasicConfiguration (@JsonProperty ("defaultSize") int defaultSize) {this.defaultSize = defaultSize; } public int getDefaultSize () {return defaultSize; }}

Dropwizard gebruikt Jackson om het configuratiebestand in onze klas te deserialiseren. Daarom hebben we Jackson-annotaties gebruikt.

Laten we vervolgens de hoofdtoepassingsklasse maken, die verantwoordelijk is voor het voorbereiden van onze service voor gebruik:

public class IntroductionApplication breidt Applicatie uit {public static void main (String [] args) gooit Uitzondering {nieuwe IntroductionApplication (). run ("server", "introductie-config.yml"); } @Override public void run (BasicConfiguration basicConfiguration, Environment environment) {// register classes} @Override public void initialize (Bootstrap bootstrap) {bootstrap.setConfigurationSourceProvider (nieuwe ResourceConfigurationSourceProvider ()); super.initialize (bootstrap); }}

Ten eerste de hoofd method is verantwoordelijk voor het uitvoeren van de applicatie. We kunnen ofwel de args naar de rennen methode of vul het zelf in.

Het eerste argument kan een van beide zijn server of controleren. De controleren optie valideert de configuratie, terwijl de server optie voert de applicatie uit. Het tweede argument is de locatie van het configuratiebestand.

Bovendien is de initialiseren methode stelt de configuratieprovider in op de ResourceConfigurationSourceProvider, waarmee de toepassing een bepaald configuratiebestand in de resourcemap kan vinden. Het is niet verplicht om deze methode te negeren.

Ten slotte de rennen methode geeft ons toegang tot zowel de Milieu en de BaseConfiguration, die we later in dit artikel zullen gebruiken.

4. Middelen

Laten we eerst een domeinklasse voor ons merk maken:

openbare klasse Merk {privé finale Lange id; private laatste String naam; // alle args constructor en getters}

Ten tweede, laten we een BrandRepository klasse die verantwoordelijk is voor het retourneren van merken:

openbare klasse BrandRepository {private final List-merken; openbare BrandRepository (lijst van merken) {this.brands = ImmutableList.copyOf (merken); } openbare lijst findAll (int size) {return brands.stream () .limit (size) .collect (Collectors.toList ()); } openbaar Optioneel findById (lange id) {return brands.stream () .filter (brand -> brand.getId (). equals (id)) .findFirst (); }}

Bovendien, we waren in staat om de Onveranderlijke lijst van Guava omdat het deel uitmaakt van Dropwizard zelf.

Ten derde maken we een BrandResource klasse. De Dropwizard gebruikt standaard JAX-RS met Jersey als implementatie. Daarom maken we gebruik van annotaties uit deze specificatie om onze REST API-eindpunten bloot te leggen:

@Path ("/ brands") @Produces (MediaType.APPLICATION_JSON) openbare klasse BrandResource {private final int defaultSize; privé definitief BrandRepository brandRepository; openbare BrandResource (int defaultSize, BrandRepository brandRepository) {this.defaultSize = defaultSize; this.brandRepository = brandRepository; } @GET openbare lijst getBrands (@QueryParam ("size") Optionele grootte) {return brandRepository.findAll (size.orElse (defaultSize)); } @GET @Path ("/ {id}") openbaar Brand getById (@PathParam ("id") Lange id) {retourneer brandRepository .findById (id) .orElseThrow (RuntimeException :: nieuw); }}

Bovendien hebben we gedefinieerd grootte net zo Optioneel Om te kunnen gebruiken defaultSize van onze configuratie als het argument niet is opgegeven.

Ten slotte zullen we ons registreren BrandResource in de Inleiding Toepassing klasse. Om dat te doen, implementeren we het rennen methode:

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

Alle gemaakte bronnen moeten in deze methode worden geregistreerd.

5. Toepassing uitvoeren

In dit gedeelte leren we hoe u de toepassing vanaf de opdrachtregel uitvoert.

Eerst zullen we ons project configureren om een ​​JAR-bestand te bouwen met behulp van de maven-shad-plugin:

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

Dit is de voorgestelde configuratie van de plug-in. Bovendien hebben we het pad naar onze hoofdklasse opgenomen in de element.

Ten slotte bouwen we de applicatie met Maven. Zodra we ons JAR-bestand hebben, kunnen we de applicatie uitvoeren:

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

Er is het is niet nodig om de parameters door te geven, omdat we ze al hebben opgenomen in de Inleiding Toepassing klasse.

Daarna zou het consolelogboek moeten eindigen met:

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

Nu luistert de applicatie op poort 8080 en hebben we toegang tot ons merkeindpunt op // localhost: 8080 / brands.

6. Gezondheidscheck

Bij het starten van de applicatie kregen we te horen dat de applicatie geen health checks heeft. Gelukkig, Dropwizard biedt een eenvoudige oplossing om health checks aan onze applicatie toe te voegen.

Laten we beginnen met het toevoegen van een eenvoudige klasse die zich uitbreidt com.codahale.metrics.health.HealthCheck:

public class ApplicationHealthCheck breidt HealthCheck uit {@Override beschermd Result check () genereert Uitzondering {return Result.healthy (); }}

Deze eenvoudige methode retourneert informatie over de gezondheid van onze component. We zouden meerdere gezondheidscontroles kunnen maken, en sommige ervan kunnen in bepaalde situaties mislukken. We zouden bijvoorbeeld terugkeren Resultaat. Ongezond () als de verbinding met de database is mislukt.

Ten slotte moeten we registreer onze gezondheidscheck in de rennen methode van onze Inleiding Toepassing klasse:

omgeving .healthChecks () .register ("applicatie", nieuwe ApplicationHealthCheck ());

Nadat we de applicatie hebben uitgevoerd, kunnen we controleer de reactie van de gezondheidscontrole onder // localhost: 8081 / healthcheck:

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

Zoals we kunnen zien, is onze gezondheidscontrole geregistreerd onder de toepassing label.

7. Conclusie

In dit artikel hebben we geleerd hoe je de Dropwizard-applicatie instelt met Maven.

We hebben ontdekt dat de basisconfiguratie van de applicatie heel gemakkelijk en snel is. Bovendien bevat Dropwizard elke bibliotheek die we nodig hebben om de krachtige RESTful-webservice uit te voeren.

Zoals altijd is de code voor deze voorbeelden beschikbaar op GitHub.

Java onderkant

Ik heb zojuist het nieuwe aangekondigd Leer de lente natuurlijk, gericht op de basisprincipes van Spring 5 en Spring Boot 2:

>> BEKIJK DE CURSUS