Einführung in Dropwizard

Java Top

Ich habe gerade den neuen Learn Spring- Kurs angekündigt , der sich auf die Grundlagen von Spring 5 und Spring Boot 2 konzentriert:

>> Überprüfen Sie den Kurs

1. Übersicht

Dropwizard ist ein Open-Source-Java-Framework, das für die schnelle Entwicklung von leistungsstarken RESTful-Webdiensten verwendet wird . Es sammelt einige beliebte Bibliotheken, um das leichte Paket zu erstellen. Die Hauptbibliotheken, die es verwendet, sind Jetty, Jersey, Jackson, JUnit und Guava. Darüber hinaus verwendet es eine eigene Bibliothek namens Metrics.

In diesem Tutorial erfahren Sie, wie Sie eine einfache Dropwizard-Anwendung konfigurieren und ausführen. Wenn wir fertig sind, stellt unsere Anwendung eine RESTful-API zur Verfügung, mit der wir eine Liste der gespeicherten Marken abrufen können.

2. Maven-Abhängigkeiten

Erstens ist die Dropwizard-Core- Abhängigkeit alles, was wir zum Erstellen unseres Service benötigen. Fügen wir es unserer pom.xml hinzu :

 io.dropwizard dropwizard-core 2.0.0 

3. Konfiguration

Jetzt erstellen wir die erforderlichen Klassen, die für die Ausführung jeder Dropwizard-Anwendung erforderlich sind.

Dropwizard-Anwendungen speichern Eigenschaften in YML-Dateien. Daher erstellen wir die Datei Introduction-Config.yml im Ressourcenverzeichnis:

defaultSize: 5

Wir können auf Werte in dieser Datei zugreifen, indem wir eine Klasse erstellen, die io.dropwizard.Configuration erweitert :

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

Dropwizard verwendet Jackson, um die Konfigurationsdatei in unsere Klasse zu deserialisieren . Daher haben wir Jackson-Anmerkungen verwendet.

Als Nächstes erstellen wir die Hauptanwendungsklasse, die für die Vorbereitung unseres Dienstes für die Verwendung verantwortlich ist:

public class IntroductionApplication extends Application { public static void main(String[] args) throws Exception { 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); } }

Erstens ist die Hauptmethode für die Ausführung der Anwendung verantwortlich. Wir könnten die Argumente entweder an die Ausführungsmethode übergeben oder selbst füllen.

Das erste Argument kann entweder Server oder Check sein . Die Überprüfungsoption überprüft die Konfiguration, während die Serveroption die Anwendung ausführt. Das zweite Argument ist der Speicherort der Konfigurationsdatei.

Darüber hinaus setzt die Initialisierungsmethode den Konfigurationsanbieter auf den ResourceConfigurationSourceProvider , mit dem die Anwendung eine bestimmte Konfigurationsdatei im Ressourcenverzeichnis finden kann. Es ist nicht obligatorisch, diese Methode zu überschreiben.

Schließlich können wir mit der run- Methode sowohl auf die Umgebung als auch auf die BaseConfiguration zugreifen , die wir später in diesem Artikel verwenden werden.

4. Ressource

Lassen Sie uns zunächst eine Domain-Klasse für unsere Marke erstellen:

public class Brand { private final Long id; private final String name; // all args constructor and getters }

Zweitens erstellen wir eine BrandRepository- Klasse, die für die Rückgabe von Marken verantwortlich ist:

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

Außerdem konnten wir die ImmutableList von Guava verwenden, da sie Teil von Dropwizard selbst ist.

Drittens erstellen wir eine BrandResource- Klasse. Der Dropwizard verwendet standardmäßig JAX-RS mit Jersey als Implementierung . Daher verwenden wir Anmerkungen aus dieser Spezifikation, um unsere REST-API-Endpunkte verfügbar zu machen:

@Path("/brands") @Produces(MediaType.APPLICATION_JSON) public class BrandResource { private final int defaultSize; private final BrandRepository brandRepository; public BrandResource(int defaultSize, BrandRepository brandRepository) { this.defaultSize = defaultSize; this.brandRepository = brandRepository; } @GET public List getBrands(@QueryParam("size") Optional size) { return brandRepository.findAll(size.orElse(defaultSize)); } @GET @Path("/{id}") public Brand getById(@PathParam("id") Long id) { return brandRepository .findById(id) .orElseThrow(RuntimeException::new); } }

Darüber hinaus haben wir die Größe als Optional definiert , um defaultSize aus unserer Konfiguration zu verwenden, wenn das Argument nicht angegeben wird.

Zuletzt registrieren wir BrandResource in der IntroductionApplicaton- Klasse. Dazu implementieren wir die run- Methode:

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

Alle erstellten Ressourcen sollten in dieser Methode registriert werden.

5. Anwendung ausführen

In diesem Abschnitt erfahren Sie, wie Sie die Anwendung über die Befehlszeile ausführen.

Zuerst konfigurieren wir unser Projekt so, dass eine JAR-Datei mit dem Maven-Shade-Plugin erstellt wird :

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

Dies ist die vorgeschlagene Konfiguration des Plugins. Zusätzlich haben wir den Pfad zu unserer Hauptklasse in die aufgenommen Element.

Schließlich erstellen wir die Anwendung mit Maven. Sobald wir unsere JAR-Datei haben, können wir die Anwendung ausführen:

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

Die Parameter müssen nicht übergeben werden, da wir sie bereits in die IntroductionApplication- Klasse aufgenommen haben .

Danach sollte das Konsolenprotokoll enden mit:

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

Jetzt überwacht die Anwendung Port 8080 und wir können unter // localhost: 8080 / brand auf unseren Markenendpunkt zugreifen .

6. Gesundheitscheck

Beim Starten der Anwendung wurden wir darüber informiert, dass die Anwendung keine Integritätsprüfungen aufweist. Glücklicherweise bietet Dropwizard eine einfache Lösung, um unserer Anwendung Integritätsprüfungen hinzuzufügen .

Beginnen wir mit dem Hinzufügen einer einfachen Klasse, die com.codahale.metrics.health.HealthCheck erweitert :

public class ApplicationHealthCheck extends HealthCheck { @Override protected Result check() throws Exception { return Result.healthy(); } }

Diese einfache Methode gibt Informationen über die Gesundheit unserer Komponente zurück. Wir könnten mehrere Gesundheitsprüfungen erstellen, von denen einige in bestimmten Situationen fehlschlagen könnten. Zum Beispiel würden wir Result.unhealthy () zurückgeben, wenn die Verbindung zur Datenbank fehlschlägt.

Zuletzt müssen wir unsere Integritätsprüfung in der Ausführungsmethode unserer IntroductionApplication- Klasse registrieren :

environment .healthChecks() .register("application", new ApplicationHealthCheck());

Nach dem Ausführen der Anwendung können wir die Antwort auf die Integritätsprüfung unter // localhost: 8081 / healthcheck : überprüfen .

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

Wie wir sehen können, wurde unser Gesundheitscheck unter dem Anwendungstag registriert .

7. Fazit

In diesem Artikel haben wir gelernt, wie Sie die Dropwizard-Anwendung mit Maven einrichten.

Wir haben festgestellt, dass das Basis-Setup der Anwendung sehr einfach und schnell ist. Darüber hinaus enthält Dropwizard alle Bibliotheken, die zum Ausführen des leistungsstarken RESTful-Webdiensts erforderlich sind.

Wie immer ist der Code für diese Beispiele auf GitHub verfügbar.

Java unten

Ich habe gerade den neuen Learn Spring- Kurs angekündigt , der sich auf die Grundlagen von Spring 5 und Spring Boot 2 konzentriert:

>> Überprüfen Sie den Kurs