Start / Cheat Sheets

Cheat Sheet

Quarkus — Cheat Sheet

Stand: · Quarkus Grundlagentraining

QuarkusJavaRESTPanacheDev Services

Der Spickzettel zum Quarkus Grundlagentraining — Annotationen, Prioritäten und Kurzformen zum Nachschlagen. Die vollständige und immer aktuelle Doku steht auf quarkus.io; hier steht die Auswahl, die im Alltag tatsächlich gebraucht wird.

Konfiguration

Höhere Quellen überschreiben niedrigere — nur Hardcoding schlägt System-Properties.

QuellePriorität
System-Properties (-D)höchste
Umgebungsvariablen↓
.env-Datei↓
application.properties↓
MicroProfile-Defaultsniedrigste
@ConfigProperty(name = "werkbank.betreiber", defaultValue = "Werkbank")
String betreiber;

Modul: Quarkus

REST mit Jakarta REST

AnnotationZweck
@Path, @GET/@POST/@PUT/@DELETEPfad und HTTP-Verb
@RestPathPfadvariable an Parameter binden
@RestQueryQuery-Parameter binden
@RestHeaderHeader auslesen
@RestCookieCookie auslesen
@RestFormFormularfeld auslesen
Body (unannotiert)JSON via Jackson-ObjectMapper

Der Body wird nicht annotiert. @RestPath darf entfallen, wenn Parametername und Pfadvariable gleich heißen. Die Extension heißt quarkus-rest (plus quarkus-rest-jackson) — ältere Anleitungen nennen noch quarkus-resteasy-reactive.

@POST @Transactional
@ResponseStatus(201)
public Kunde add(Kunde k) { repo.persist(k); return k; }

@GET @Path("/{id}")
public Kunde byId(@RestPath Long id) {
    Kunde k = repo.findById(id);
    if (k == null) throw new NotFoundException();   // → HTTP 404
    return k;
}

Modul: REST

Dev Services

Liegt eine Datenbank-Extension im Projekt und ist keine Verbindung konfiguriert, startet Quarkus die Datenbank in dev und test selbst — eine laufende Container-Runtime (Docker oder Podman) vorausgesetzt.

quarkus.datasource.db-kind=postgresql
quarkus.hibernate-orm.schema-management.strategy=drop-and-create
# keine jdbc.url in dev — sonst kein Dev Service
%prod.quarkus.datasource.jdbc.url=${DB_URL}

Der Schlüssel hieß früher quarkus.hibernate-orm.database.generation. Testdaten kommen aus src/main/resources/import.sql; jede Anweisung braucht dort ein Semikolon. Gilt genauso für Kafka, AMQP und RabbitMQ.

Modul: Datenzugriff

Datenzugriff und Panache

ModellTechnologie
RelationalJakarta Persistence / Hibernate ORM
NoSQLMongoDB, Cassandra, Redis, Elastic
Cloud nativDynamoDB, Firestore, BigQuery, Bigtable
Schema-MigrationFlyway, Liquibase
TransaktionenJTA / @Transactional

Ein Panache-Repository bringt listAll(), findById(), persist() und count() ohne eine Zeile Code mit:

@ApplicationScoped
public class LeistungRepository implements PanacheRepository<Leistung> { }

// Finder ergänzen:
public Kunde findByEmail(String email) {
    return find("email", email).firstResult();
}
public Anbieter findByName(String name) {                // case-insensitiv
    return find("lower(name)", name.toLowerCase()).firstResult();
}

lower() gehört auf beide Seiten des Vergleichs — sonst schlägt er fehl. In der Query steht der Entity-Feldname, nicht der Spaltenname.

Modul: Datenzugriff

GraphQL

AnnotationZweck
@GraphQLApiKlasse mit Queries und Mutations
@QueryQuery aus einer Methode erzeugen
@MutationMutation aus einer Methode erzeugen
@DescriptionBeschreibung im generierten Schema
@NameEingaben/Parameter einer Query benennen

Modul: GraphQL

Reaktiv, Messaging, Observability

Uni steht für einen Wert, Multi für einen Strom mehrerer Werte:

@GET @Path("/{id}")
public Uni<Leistung> finde(Long id) { return repo.findById(id); }

Reaktiv ist eine Kette, keine Einzelentscheidung: Der Datenzugriff muss durchgängig reaktiv sein — ein reaktiver Treiber ist Pflicht, dazu Hibernate Reactive mit Panache Reactive.

BrokerStärkeExtension
Apache KafkaPersistenz & Replay der Nachrichtenquarkus-messaging-kafka
AMQP 1.0offener Standard, breit unterstütztquarkus-messaging-amqp
RabbitMQschnell (Erlang), eigene Extensionquarkus-messaging-rabbitmq (Preview)
Micrometer-TypBedeutung
GaugeZu- und Abnahme eines Werts über die Zeit
CounterNur Zunahme — wie oft etwas aufgerufen wurde
Summary / TimerDauer und Verlauf im System

Modul: Reaktiv

Typische Fallen

  • Dev-Broker in Produktion. Dev Services liefern Datenbank und Broker zur Laufzeit — nur in dev und test. Produktion braucht echte Instanzen; über Profile trennen.
  • Gesetzte jdbc.url schaltet die Dev Services ab. Deshalb gehört die Produktionsadresse ins %prod-Profil und nicht in die allgemeine Konfiguration.
  • Readiness prüft keine Abhängigkeiten. „Ready”, aber die Datenbank ist noch nicht oben.
  • traceId und spanId fehlen im Log. Ohne sie wird Debugging über Servicegrenzen hinweg zur Sucharbeit.
  • GraalVM lokal installiert. Nötig ist es nur im Native-Build; zum Entwickeln genügt ein gewöhnliches JDK.
  • CDI Portable Extensions. Von ArC nicht direkt unterstützt — Workaround über Beans am Application-Context.
  • OpenTelemetry ist nicht überall stabil. Traces ja; Metriken und Logs laufen dort als Tech Preview. Für Metriken Micrometer nehmen.

Dieses Thema als Schulung für Ihr Team

Dieser Beitrag erklärt das Thema. Damit Ihr Team es danach auch anwendet, gibt es Quarkus Grundlagentraining als Schulung — an Ihrem eigenen Code, mit den Fragen, die ein Text nicht beantwortet. Sie wählen die Module, wir bauen daraus ein Programm.

2 Tage·ab 900 EUR netto pro Tag (bis 3 Teilnehmende) ·Termin nach Vereinbarung

Als Team-Schulung anfragenZum Seminar Quarkus Grundlagentraining →