{"id":666,"date":"2026-05-17T00:26:54","date_gmt":"2026-05-16T23:26:54","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=666"},"modified":"2026-06-17T00:27:33","modified_gmt":"2026-06-16T23:27:33","slug":"quarkus-der-cloud-native-java-stack-fuer-die-kubernetes-aera","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=666","title":{"rendered":"Quarkus \u2014 Der cloud-native Java-Stack f\u00fcr die Kubernetes-\u00c4ra"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Quarkus hat sich in den letzten Jahren als ernstzunehmende Alternative zu Spring Boot etabliert. Entwickelt von Red Hat und als Open-Source-Projekt unter der Commonhaus Foundation gepflegt, verfolgt Quarkus das Ziel, Java f\u00fcr die Cloud fit zu machen \u2014 mit blitzschnellen Startzeiten, minimalem Speicherverbrauch und nativer Unterst\u00fctzung f\u00fcr Kubernetes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Warum Quarkus?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Traditionelle Java-Frameworks laden per Reflection viele Klassen zur Laufzeit, was zu langen Startzeiten und hohem Speicherverbrauch f\u00fchrt. Quarkus dreht dieses Prinzip um: Statt zur Laufzeit arbeitet das Framework zur Build-Zeit. Es verarbeitet Annotations, konfiguriert Metamodelle und erzeugt Bytecode bereits w\u00e4hrend der Kompilierung \u2014 ein Konzept, das Quarkus selbst als \u201eCompile-Time Boot\u201c bezeichnet. Das Ergebnis: Startzeiten im Millisekundenbereich und ein drastisch reduzierter Footprint.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">&lt;em&gt;<span class=\"hljs-comment\">\/\/ Ein einfacher Quarkus-REST-Endpoint&lt;\/em&gt;<\/span>\n<span class=\"hljs-keyword\">import<\/span> jakarta.ws.rs.GET;\n<span class=\"hljs-keyword\">import<\/span> jakarta.ws.rs.Path;\n<span class=\"hljs-keyword\">import<\/span> jakarta.ws.rs.Produces;\n<span class=\"hljs-keyword\">import<\/span> jakarta.ws.rs.core.MediaType;\n\n@Path(<span class=\"hljs-string\">\"\/hello\"<\/span>)\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">GreetingResource<\/span> <\/span>{\n\n    @GET\n    @Produces(MediaType.TEXT_PLAIN)\n    public <span class=\"hljs-built_in\">String<\/span> hello() {\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Hallo von Quarkus 3.36!\"<\/span>;\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Quarkus setzt auf bew\u00e4hrte Standards wie Jakarta EE (fr\u00fcher Java EE), Eclipse MicroProfile und CDI. Wer bereits mit Spring gearbeitet hat, findet \u00fcber die Quarkus-Erweiterung&nbsp;<code>quarkus-spring-di<\/code>&nbsp;auch vertraute Annotations wie&nbsp;<code>@Autowired<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Developer Joy \u2014 das Mantra von Quarkus<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ein zentrales Versprechen von Quarkus ist \u201eDeveloper Joy\u201c. Dazu geh\u00f6rt nicht nur das schnelle Booten der Anwendung, sondern vor allem der&nbsp;<strong>Dev Mode<\/strong>. \u00c4nderungen am Code werden ohne manuellen Neustart \u00fcbernommen:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quarkus dev\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Mit diesem Befehl startet Quarkus die Anwendung im Entwicklungsmodus. Sobald eine Java-Datei gespeichert wird, kompiliert Quarkus diese neu, tauscht die betroffene Klasse im laufenden Prozess aus und stellt die \u00c4nderung sofort zur Verf\u00fcgung. Kein Neustart, kein Warten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Datenbankzugriff mit Panache<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr den Datenbankzugriff bietet Quarkus&nbsp;<strong>Panache<\/strong>&nbsp;an, eine Erweiterung von Hibernate ORM, die den Persistenz-Code radikal vereinfacht:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import io.quarkus.hibernate.orm.panache.PanacheEntity;\nimport jakarta.persistence.Entity;\nimport java.util.<span class=\"hljs-keyword\">List<\/span>;\n\n@Entity\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Kunde<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">PanacheEntity<\/span> <\/span>{\n    <span class=\"hljs-keyword\">public<\/span> String name;\n    <span class=\"hljs-keyword\">public<\/span> String email;\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">List<\/span>&lt;Kunde&gt; findByEmailDomain(String domain) {\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">list<\/span>(<span class=\"hljs-string\">\"email like ?1\"<\/span>, <span class=\"hljs-string\">\"%@\"<\/span> + domain);\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Keine Repository-Interfaces, keine Boilerplate \u2014 die statischen Methoden der&nbsp;<code>PanacheEntity<\/code>-Oberklasse (wie&nbsp;<code>list()<\/code>,&nbsp;<code>find()<\/code>,&nbsp;<code>delete()<\/code>) machen SQL-Zugriffe kompakt und lesbar. Seit Mai 2026 gibt es zudem&nbsp;<strong>Quarkus Data Hibernate<\/strong>&nbsp;(ehemals \u201eHibernate with Panache Next&#8220;) als experimentellen Nachfolger, der das Jakarta-Data-Modell mit typsicheren Repositories kombiniert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Native Image mit GraalVM\/Mandrel<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quarkus ist von Anfang an auf GraalVM Native Image abgestimmt \u2014 und mit Mandrel bietet Red Hat eine eigenst\u00e4ndige GraalVM-Distribution speziell f\u00fcr Quarkus.&nbsp;<strong>Seit Quarkus 3.36 ist das Minimum GraalVM\/Mandrel 25.0<\/strong>&nbsp;(basiert auf JDK 25):<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">mvn package -Pnative\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Das Ergebnis ist eine einzelne ausf\u00fchrbare Bin\u00e4rdatei, die in unter 0,02 Sekunden starten kann und mit wenigen MB Arbeitsspeicher auskommt. In einer Kubernetes-Umgebung bedeutet das: weniger Ressourcenverbrauch pro Pod und k\u00fcrzere Scale-out-Zeiten. F\u00fcr Container-Builds ohne lokale GraalVM-Installation nutzt man:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">mvn package -Pnative -Dquarkus.native.container-build=<span class=\"hljs-literal\">true<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Reaktive Programmierung mit Mutiny<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quarkus setzt f\u00fcr reaktive Programmierung auf&nbsp;<strong>Mutiny<\/strong>&nbsp;\u2014 eine ereignisbasierte Bibliothek, die intuitiver sein will als Project Reactor oder RxJava:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">io<\/span><span class=\"hljs-selector-class\">.smallrye<\/span><span class=\"hljs-selector-class\">.mutiny<\/span><span class=\"hljs-selector-class\">.Uni<\/span>;\n<span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">io<\/span><span class=\"hljs-selector-class\">.smallrye<\/span><span class=\"hljs-selector-class\">.mutiny<\/span><span class=\"hljs-selector-class\">.Multi<\/span>;\n\n<span class=\"hljs-keyword\">@Path<\/span>(\"\/reactive\")\npublic class ReactiveResource {\n\n    <span class=\"hljs-keyword\">@GET<\/span>\n    @Path(<span class=\"hljs-string\">\"\/uni\"<\/span>)\n    public Uni&lt;String&gt; uni() {\n        <span class=\"hljs-selector-tag\">return<\/span> <span class=\"hljs-selector-tag\">Uni<\/span><span class=\"hljs-selector-class\">.createFrom<\/span>()<span class=\"hljs-selector-class\">.item<\/span>(\"<span class=\"hljs-selector-tag\">Sofort<\/span> <span class=\"hljs-selector-tag\">verf<\/span>\u00fc<span class=\"hljs-selector-tag\">gbar<\/span>\")\n            <span class=\"hljs-selector-class\">.onItem<\/span>()<span class=\"hljs-selector-class\">.transform<\/span>(<span class=\"hljs-selector-tag\">String<\/span><span class=\"hljs-selector-pseudo\">::toUpperCase)<\/span>;\n    }\n\n    <span class=\"hljs-keyword\">@GET<\/span>\n    @Path(<span class=\"hljs-string\">\"\/multi\"<\/span>)\n    public Multi&lt;String&gt; multi() {\n        <span class=\"hljs-selector-tag\">return<\/span> <span class=\"hljs-selector-tag\">Multi<\/span><span class=\"hljs-selector-class\">.createFrom<\/span>()<span class=\"hljs-selector-class\">.items<\/span>(\"<span class=\"hljs-selector-tag\">A<\/span>\", \"<span class=\"hljs-selector-tag\">B<\/span>\", \"<span class=\"hljs-selector-tag\">C<\/span>\")\n            <span class=\"hljs-selector-class\">.onItem<\/span>()<span class=\"hljs-selector-class\">.transform<\/span>(<span class=\"hljs-selector-tag\">s<\/span> <span class=\"hljs-selector-tag\">-<\/span>&gt; \"<span class=\"hljs-selector-tag\">Wert<\/span>: \" + <span class=\"hljs-selector-tag\">s<\/span>);\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><code>Uni&lt;T&gt;<\/code>&nbsp;repr\u00e4sentiert einen asynchronen Wert (0 oder 1 Ergebnis),&nbsp;<code>Multi&lt;T&gt;<\/code>&nbsp;einen asynchronen Stream (0 bis N Ergebnisse). Quarkus verarbeitet reaktive R\u00fcckgabetypen automatisch auf dem I\/O-Thread.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quarkus Extensions \u2014 das \u00d6kosystem<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Eine St\u00e4rke von Quarkus ist das wachsende Extension-\u00d6kosystem. \u00dcber 500 offizielle und Community-Extensions decken Datenbanken, Messaging, Security, Observability und KI ab:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span># Verf\u00fcgbare Extensions auflisten<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span>\nquarkus ext list\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span># Extensions hinzuf\u00fcgen<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span>\nquarkus ext add quarkus-smallrye-openapi,quarkus-kafka-client\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Highlights unter den Extensions:&nbsp;<code>quarkus-oidc<\/code>&nbsp;f\u00fcr Keycloak-Integration,&nbsp;<code>quarkus-smallrye-graphql<\/code>&nbsp;f\u00fcr GraphQL-APIs,&nbsp;<code>quarkus-micrometer<\/code>&nbsp;f\u00fcr Metriken und&nbsp;<code>quarkus-langchain4j<\/code>&nbsp;f\u00fcr LLM-Integration.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Testing mit Quarkus<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quarkus bringt exzellente Testunterst\u00fctzung mit. Der&nbsp;<code>@QuarkusTest<\/code>-Ansatz startet die Anwendung einmal und f\u00fchrt alle Tests gegen dieselbe Instanz aus:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> io.quarkus.test.junit.QuarkusTest;\n<span class=\"hljs-keyword\">import<\/span> org.junit.jupiter.api.Test;\n<span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-keyword\">static<\/span> io.restassured.RestAssured.given;\n<span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-keyword\">static<\/span> org.hamcrest.CoreMatchers.is;\n\n@QuarkusTest\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">GreetingResourceTest<\/span> <\/span>{\n\n    @Test\n    <span class=\"hljs-keyword\">void<\/span> testHelloEndpoint() {\n        given()\n            .when().get(<span class=\"hljs-string\">\"\/hello\"<\/span>)\n            .then()\n            .statusCode(<span class=\"hljs-number\">200<\/span>)\n            .body(is(<span class=\"hljs-string\">\"Hallo von Quarkus 3.36!\"<\/span>));\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">F\u00fcr Integrationstests mit externen Abh\u00e4ngigkeiten bietet Quarkus&nbsp;<strong>Dev Services<\/strong>: Startet man die Anwendung im Test, werden automatisch Docker-Container f\u00fcr PostgreSQL, Kafka, Redis und viele andere Dienste hochgefahren \u2014 ohne manuelle Konfiguration.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quarkus verbindet die bew\u00e4hrte Java-\u00d6kosystem-Welt mit modernen Cloud-Anforderungen. Die Kombination aus Compile-Time-Optimierung, Developer-Joy-Funktionen, nativer Kubernetes-Integration und einem stark wachsenden Extension-\u00d6kosystem (mit KI-Integration via&nbsp;<code>quarkus-langchain4j<\/code>) macht Quarkus zur ersten Wahl, wenn es um cloud-native Java-Anwendungen geht. W\u00e4hrend Spring Boot durch sein riesiges \u00d6kosystem dominiert, punktet Quarkus mit Geschwindigkeit und Effizienz \u2014 zwei Eigenschaften, die in der Cloud entscheidend sind.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quarkus hat sich in den letzten Jahren als ernstzunehmende Alternative zu Spring Boot etabliert. Entwickelt von Red Hat und als Open-Source-Projekt unter der Commonhaus Foundation gepflegt, verfolgt Quarkus das Ziel, Java f\u00fcr die Cloud fit zu machen \u2014 mit blitzschnellen Startzeiten, minimalem Speicherverbrauch und nativer Unterst\u00fctzung f\u00fcr Kubernetes. Warum Quarkus? Traditionelle Java-Frameworks laden per Reflection [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-666","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/666","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=666"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/666\/revisions"}],"predecessor-version":[{"id":667,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/666\/revisions\/667"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=666"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=666"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=666"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}