Skip to content

GEDOPLAN/springboot-vs-quarkus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

springboot-vs-quarkus.git

  1. Überblick

    In diesem Projekt werden zwei Anwendungen mit gleicher Fachlichkeit realisiert - einmal mit Spring Boot und einmal mit Quarkus.

    • Fachlichkeit:

      Die Anwendungen verwalten die Daten von Planeten in einer Datenbank und bieten ein einfaches REST API an:

      URL Methode Beschreibung

      http://localhost:8080/api/planets

      GET

      Liefere alle Planeten

      http://localhost:8080/api/planets

      POST

      Füge neuen Planeten hinzu

      http://localhost:8080/api/planets/{id1}-{id2}

      GET

      Liefere die Gravitation zwischen zwei Planeten

      Im Verzeichnis scripts befinden sich einige Shell Scripts zum Aufruf der API.

    • Technische Bestandteile:

      Um die Beispielanwendungen zwar als Demo überschaubar, aber dennoch realitätsnah zu gestalten, sind die folgenden Bestandteile enthalten:

      • Als Datenbank wird PostgreSQL verwendet.

      • Die DB-Anbindung geschieht mittels Jakarta Persistence und Hibernate, allerdings mit den Enhancements der beiden Frameworks (Spring Data JPA bzw. Panache).

      • Das REST API wird mit dem jeweiligen Framework ohne Besonderheiten realisiert.

      • Zur anwendungsinternen Verknüpfung wird (natürlich!) Dependency Injection verwendet.

      • Die Anwendungen sind über Umgebungsvariablen (u. a.) konfigurierbar:

        Variable Bedeutung Beispiel

        G_CONST

        Gravitationskonstante

        6.67430e-11
        (Default)

        MAINT_START

        Wartungsfenster-Beginn im ISO-Format yyyy-MM-ddTHH:mm
        (Verwendung s. Health Checking weiter unten)

        2023-04-20T18:45

        MAINT_DURATION

        Wartungsfenster-Dauer im Duration Format PnDTnHnMn.nS

        PT15M
        (Default)

      • Für das REST API wird eine OpenAPI-Beschreibung veröffentlicht. Zudem ist das API auch probeweise über ein OpenAPI UI (aka Swagger UI) zu nutzen.

      • Die Anwendungen bieten einen Health Check Endpoint für ihre Readiness an. Sie sind ready, wenn die DB-Verbindung steht und wir uns nicht gerade im Wartungsfenster befinden.

      • Die Anwendungen bieten einen Metrics Endpunkt zur Abfrage diverser Metriken an. Neben System-Metriken (CPU-Auslasrung etc.) kann als anwendungsspezifische Metrik abgefragt werden, wie oft bisher der Endpunkt zur Berechnung der Gravitation aufgerufen wurde.

      • Die Anwendungen enthalten (einfache) Integrationstests.

  2. Realisierung / Besonderheiten

    1. Spring Boot

    2. Quarkus

      • Dev Mode:

        • Entwicklung mit beliebiger IDE und parallel laufendem mvn quarkus:dev.

      • DB:

        • Dependency: io.quarkus:quarkus-jdbc-postgresql.

        • Im Dev Mode wird automatisch ein Testcontainer genutzt.

      • Persistenzframework:

        • Dependency: io.quarkus:quarkus-hibernate-orm-rest-data-panache.

        • Bietet Standard-JPA + CRUD/Finder/…​ (Active Record oder Repository).

      • REST Provider:

        • Dependencies: io.quarkus:quarkus-resteasy-reactive, io.quarkus:quarkus-resteasy-reactive-jsonb.

        • Jakarta RESTful Webservices (Classic oder Reactive).

      • (Microprofile) Config:

        • (Default-)Werte in application.properties.

        • Injection mit @Inject @ConfigProperty.

      • OpenAPI:

      • Health Checks:

        • Dependency: io.quarkus:quarkus-smallrye-health.

        • Endpunkte: http://localhost:8080/q/health/{started|live|ready}.

        • DB Readiness ist auto-konfiguriert.

        • Falls ein Wartungsfenster konfiguriert ist (s. o.), meldet die Anwendung in dieser Zeit not ready.
          Die Klasse MaintenanceReadinessCheck implementiert diesen Custom Check.

      • Metrics:

      • Tests:

        • Es sind je ein White Box Test und Black Box Test vorhanden.

        • Die Tests nutzen eine separate DB (via Dev Services / Testcontainers).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •