2:I[231,["231","static/chunks/231-7054a12985b3b868.js","173","static/chunks/173-6d8e00193ae3f76c.js","367","static/chunks/app/articles/backend/page-a95690472eed8ceb.js"],""] 3:I[9275,[],""] 4:I[1343,[],""] 5:I[1747,["231","static/chunks/231-7054a12985b3b868.js","173","static/chunks/173-6d8e00193ae3f76c.js","867","static/chunks/867-a87251d1c6093b7e.js","185","static/chunks/app/layout-9ab2d417c52414ab.js"],"Providers"] 6:I[5107,["231","static/chunks/231-7054a12985b3b868.js","173","static/chunks/173-6d8e00193ae3f76c.js","867","static/chunks/867-a87251d1c6093b7e.js","185","static/chunks/app/layout-9ab2d417c52414ab.js"],"SidebarLayout"] 0:["CNcemyiCksiu8DGDV_gau",[[["",{"children":["articles",{"children":["backend",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",{"children":["articles",{"children":["backend",{"children":["__PAGE__",{},[["$L1",["$","div",null,{"className":"sm:px-8 mt-16 lg:mt-32","children":["$","div",null,{"className":"mx-auto w-full max-w-7xl lg:px-8","children":["$","div",null,{"className":"relative px-4 sm:px-8 lg:px-12","children":["$","div",null,{"className":"mx-auto max-w-2xl lg:max-w-5xl","children":["$","div",null,{"className":"xl:relative","children":["$","div",null,{"className":"mx-auto max-w-2xl","children":[["$","$L2",null,{"href":"/articles","aria-label":"Go back to articles","className":"group mb-8 flex h-10 w-10 items-center justify-center rounded-full bg-white ring-1 shadow-md shadow-zinc-800/5 ring-zinc-900/5 transition lg:absolute lg:-left-5 lg:-mt-2 lg:mb-0 xl:-top-1.5 xl:left-0 xl:mt-0 dark:border dark:border-zinc-700/50 dark:bg-zinc-800 dark:ring-0 dark:ring-white/10 dark:hover:border-zinc-700 dark:hover:ring-white/20","children":["$","svg",null,{"viewBox":"0 0 16 16","fill":"none","aria-hidden":"true","className":"h-4 w-4 stroke-zinc-500 transition group-hover:stroke-zinc-700 dark:stroke-zinc-500 dark:group-hover:stroke-zinc-400","children":["$","path",null,{"d":"M7.25 11.25 3.75 8m0 0 3.5-3.25M3.75 8h8.5","strokeWidth":"1.5","strokeLinecap":"round","strokeLinejoin":"round"}]}]}],["$","article",null,{"children":[["$","header",null,{"className":"flex flex-col","children":[["$","h1",null,{"className":"mt-6 text-4xl font-bold tracking-tight text-zinc-800 sm:text-5xl dark:text-zinc-100","children":"Moderne Backend-Architekturen mit Spring, Quarkus und Kotlin"}],["$","time",null,{"dateTime":"2024-08-26","className":"order-first flex items-center text-base text-zinc-400 dark:text-zinc-500","children":[["$","span",null,{"className":"h-4 w-0.5 rounded-full bg-zinc-200 dark:bg-zinc-500"}],["$","span",null,{"className":"ml-3","children":"26. August 2024"}]]}]]}],["$","div",null,{"className":"mt-8 prose dark:prose-invert","data-mdx-content":true,"children":[["$","p",null,{"children":"In der Welt der Backend-Entwicklung haben sich die Anforderungen an moderne Systeme grundlegend verändert. Statt monolithischer Anwendungen entwickeln wir heute verteilte Systeme, die skalierbar, resilient und ressourceneffizient sein müssen. Nach Jahren der Entwicklung mit verschiedenen Frameworks haben sich für mich vor allem Spring Boot, Quarkus und die Programmiersprache Kotlin als die idealen Tools erwiesen."}],"\n",["$","p",null,{"children":"Die Entscheidung für das richtige Framework und die passende Sprache hat langfristige Auswirkungen auf Entwicklungsgeschwindigkeit, Wartbarkeit und betriebliche Effizienz. Nach intensiver Erfahrung mit beiden Ansätzen möchte ich meine Erkenntnisse teilen."}],"\n",["$","h2",null,{"children":"Spring Boot: Der etablierte Standard"}],"\n",["$","p",null,{"children":"Spring Boot hat die Java-Entwicklung revolutioniert und ist heute der De-facto-Standard für Enterprise-Anwendungen. Der größte Vorteil liegt in seinem umfassenden Ökosystem und der ausgereiften Dokumentation."}],"\n",["$","p",null,{"children":"Hier ein Beispiel für einen einfachen REST-Controller mit Spring Boot:"}],"\n",["$","pre",null,{"className":"language-java","children":["$","code",null,{"className":"language-java","children":[["$","span",null,{"className":"token annotation punctuation","children":"@RestController"}],"\n",["$","span",null,{"className":"token annotation punctuation","children":"@RequestMapping"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token string","children":"\"/api/products\""}],["$","span",null,{"className":"token punctuation","children":")"}],"\n",["$","span",null,{"className":"token keyword","children":"public"}]," ",["$","span",null,{"className":"token keyword","children":"class"}]," ",["$","span",null,{"className":"token class-name","children":"ProductController"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n\n ",["$","span",null,{"className":"token keyword","children":"private"}]," ",["$","span",null,{"className":"token keyword","children":"final"}]," ",["$","span",null,{"className":"token class-name","children":"ProductService"}]," productService",["$","span",null,{"className":"token punctuation","children":";"}],"\n\n ",["$","span",null,{"className":"token keyword","children":"public"}]," ",["$","span",null,{"className":"token class-name","children":"ProductController"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token class-name","children":"ProductService"}]," productService",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n ",["$","span",null,{"className":"token keyword","children":"this"}],["$","span",null,{"className":"token punctuation","children":"."}],"productService ",["$","span",null,{"className":"token operator","children":"="}]," productService",["$","span",null,{"className":"token punctuation","children":";"}],"\n ",["$","span",null,{"className":"token punctuation","children":"}"}],"\n\n ",["$","span",null,{"className":"token annotation punctuation","children":"@GetMapping"}],"\n ",["$","span",null,{"className":"token keyword","children":"public"}]," ",["$","span",null,{"className":"token class-name","children":"List"}],["$","span",null,{"className":"token generics","children":[["$","span",null,{"className":"token punctuation","children":"<"}],["$","span",null,{"className":"token class-name","children":"Product"}],["$","span",null,{"className":"token punctuation","children":">"}]]}]," ",["$","span",null,{"className":"token function","children":"getAllProducts"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n ",["$","span",null,{"className":"token keyword","children":"return"}]," productService",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"findAllProducts"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n ",["$","span",null,{"className":"token punctuation","children":"}"}],"\n\n ",["$","span",null,{"className":"token annotation punctuation","children":"@GetMapping"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token string","children":"\"/{id}\""}],["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token keyword","children":"public"}]," ",["$","span",null,{"className":"token class-name","children":"ResponseEntity"}],["$","span",null,{"className":"token generics","children":[["$","span",null,{"className":"token punctuation","children":"<"}],["$","span",null,{"className":"token class-name","children":"Product"}],["$","span",null,{"className":"token punctuation","children":">"}]]}]," ",["$","span",null,{"className":"token function","children":"getProductById"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token annotation punctuation","children":"@PathVariable"}]," ",["$","span",null,{"className":"token class-name","children":"Long"}]," id",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n ",["$","span",null,{"className":"token keyword","children":"return"}]," productService",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"findProductById"}],["$","span",null,{"className":"token punctuation","children":"("}],"id",["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"map"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token class-name","children":"ResponseEntity"}],["$","span",null,{"className":"token operator","children":"::"}],["$","span",null,{"className":"token function","children":"ok"}],["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"orElse"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token class-name","children":"ResponseEntity"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"notFound"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"build"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n ",["$","span",null,{"className":"token punctuation","children":"}"}],"\n\n ",["$","span",null,{"className":"token annotation punctuation","children":"@PostMapping"}],"\n ",["$","span",null,{"className":"token annotation punctuation","children":"@ResponseStatus"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token class-name","children":"HttpStatus"}],["$","span",null,{"className":"token punctuation","children":"."}],"CREATED",["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token keyword","children":"public"}]," ",["$","span",null,{"className":"token class-name","children":"Product"}]," ",["$","span",null,{"className":"token function","children":"createProduct"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token annotation punctuation","children":"@RequestBody"}]," ",["$","span",null,{"className":"token annotation punctuation","children":"@Valid"}]," ",["$","span",null,{"className":"token class-name","children":"ProductRequest"}]," request",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n ",["$","span",null,{"className":"token keyword","children":"return"}]," productService",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"createProduct"}],["$","span",null,{"className":"token punctuation","children":"("}],"request",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n ",["$","span",null,{"className":"token punctuation","children":"}"}],"\n\n ",["$","span",null,{"className":"token annotation punctuation","children":"@PutMapping"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token string","children":"\"/{id}\""}],["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token keyword","children":"public"}]," ",["$","span",null,{"className":"token class-name","children":"ResponseEntity"}],["$","span",null,{"className":"token generics","children":[["$","span",null,{"className":"token punctuation","children":"<"}],["$","span",null,{"className":"token class-name","children":"Product"}],["$","span",null,{"className":"token punctuation","children":">"}]]}]," ",["$","span",null,{"className":"token function","children":"updateProduct"}],["$","span",null,{"className":"token punctuation","children":"("}],"\n ",["$","span",null,{"className":"token annotation punctuation","children":"@PathVariable"}]," ",["$","span",null,{"className":"token class-name","children":"Long"}]," id",["$","span",null,{"className":"token punctuation","children":","}],"\n ",["$","span",null,{"className":"token annotation punctuation","children":"@RequestBody"}]," ",["$","span",null,{"className":"token annotation punctuation","children":"@Valid"}]," ",["$","span",null,{"className":"token class-name","children":"ProductRequest"}]," request",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n ",["$","span",null,{"className":"token keyword","children":"return"}]," ",["$","span",null,{"className":"token class-name","children":"ResponseEntity"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"ok"}],["$","span",null,{"className":"token punctuation","children":"("}],"productService",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"updateProduct"}],["$","span",null,{"className":"token punctuation","children":"("}],"id",["$","span",null,{"className":"token punctuation","children":","}]," request",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n ",["$","span",null,{"className":"token punctuation","children":"}"}],"\n\n ",["$","span",null,{"className":"token annotation punctuation","children":"@DeleteMapping"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token string","children":"\"/{id}\""}],["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token annotation punctuation","children":"@ResponseStatus"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token class-name","children":"HttpStatus"}],["$","span",null,{"className":"token punctuation","children":"."}],"NO_CONTENT",["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token keyword","children":"public"}]," ",["$","span",null,{"className":"token keyword","children":"void"}]," ",["$","span",null,{"className":"token function","children":"deleteProduct"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token annotation punctuation","children":"@PathVariable"}]," ",["$","span",null,{"className":"token class-name","children":"Long"}]," id",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n productService",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"deleteProduct"}],["$","span",null,{"className":"token punctuation","children":"("}],"id",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n ",["$","span",null,{"className":"token punctuation","children":"}"}],"\n",["$","span",null,{"className":"token punctuation","children":"}"}],"\n"]}]}],"\n",["$","p",null,{"children":"Spring Boot überzeugt durch seine intuitive Konfiguration und die starke Dependency Injection. Mit Annotations lassen sich komplexe Funktionen mit wenig Code realisieren. Besonders wertvoll sind Features wie:"}],"\n",["$","ul",null,{"children":["\n",["$","li",null,{"children":"Spring Data JPA für vereinfachten Datenbankzugriff"}],"\n",["$","li",null,{"children":"Spring Security für umfassende Absicherung"}],"\n",["$","li",null,{"children":"Spring Cloud für Microservice-Architektur"}],"\n"]}],"\n",["$","p",null,{"children":"Der größte Nachteil von Spring Boot ist sein Ressourcenhunger. Die Startup-Zeit und der Speicherverbrauch können für bestimmte Anwendungsfälle problematisch sein."}],"\n",["$","h2",null,{"children":"Quarkus: Das Cloud-Native Java-Framework"}],"\n",["$","p",null,{"children":"Quarkus wurde von Grund auf für die Cloud-Native-Welt konzipiert. Als jüngeres Framework bringt es frische Ansätze und beeindruckende Performance-Werte mit."}],"\n",["$","p",null,{"children":"Ein analoger REST-Controller in Quarkus:"}],"\n",["$","pre",null,{"className":"language-java","children":["$","code",null,{"className":"language-java","children":[["$","span",null,{"className":"token annotation punctuation","children":"@Path"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token string","children":"\"/api/products\""}],["$","span",null,{"className":"token punctuation","children":")"}],"\n",["$","span",null,{"className":"token annotation punctuation","children":"@Produces"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token class-name","children":"MediaType"}],["$","span",null,{"className":"token punctuation","children":"."}],"APPLICATION_JSON",["$","span",null,{"className":"token punctuation","children":")"}],"\n",["$","span",null,{"className":"token annotation punctuation","children":"@Consumes"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token class-name","children":"MediaType"}],["$","span",null,{"className":"token punctuation","children":"."}],"APPLICATION_JSON",["$","span",null,{"className":"token punctuation","children":")"}],"\n",["$","span",null,{"className":"token keyword","children":"public"}]," ",["$","span",null,{"className":"token keyword","children":"class"}]," ",["$","span",null,{"className":"token class-name","children":"ProductResource"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n\n ",["$","span",null,{"className":"token annotation punctuation","children":"@Inject"}],"\n ",["$","span",null,{"className":"token class-name","children":"ProductService"}]," productService",["$","span",null,{"className":"token punctuation","children":";"}],"\n\n ",["$","span",null,{"className":"token annotation punctuation","children":"@GET"}],"\n ",["$","span",null,{"className":"token keyword","children":"public"}]," ",["$","span",null,{"className":"token class-name","children":"List"}],["$","span",null,{"className":"token generics","children":[["$","span",null,{"className":"token punctuation","children":"<"}],["$","span",null,{"className":"token class-name","children":"Product"}],["$","span",null,{"className":"token punctuation","children":">"}]]}]," ",["$","span",null,{"className":"token function","children":"getAllProducts"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n ",["$","span",null,{"className":"token keyword","children":"return"}]," productService",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"findAllProducts"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n ",["$","span",null,{"className":"token punctuation","children":"}"}],"\n\n ",["$","span",null,{"className":"token annotation punctuation","children":"@GET"}],"\n ",["$","span",null,{"className":"token annotation punctuation","children":"@Path"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token string","children":"\"/{id}\""}],["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token keyword","children":"public"}]," ",["$","span",null,{"className":"token class-name","children":"Response"}]," ",["$","span",null,{"className":"token function","children":"getProductById"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token annotation punctuation","children":"@PathParam"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token string","children":"\"id\""}],["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token class-name","children":"Long"}]," id",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n ",["$","span",null,{"className":"token keyword","children":"return"}]," productService",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"findProductById"}],["$","span",null,{"className":"token punctuation","children":"("}],"id",["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"map"}],["$","span",null,{"className":"token punctuation","children":"("}],"product ",["$","span",null,{"className":"token operator","children":"->"}]," ",["$","span",null,{"className":"token class-name","children":"Response"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"ok"}],["$","span",null,{"className":"token punctuation","children":"("}],"product",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"build"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"orElse"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token class-name","children":"Response"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"status"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token class-name","children":["Response",["$","span",null,{"className":"token punctuation","children":"."}],"Status"]}],["$","span",null,{"className":"token punctuation","children":"."}],"NOT_FOUND",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"build"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n ",["$","span",null,{"className":"token punctuation","children":"}"}],"\n\n ",["$","span",null,{"className":"token annotation punctuation","children":"@POST"}],"\n ",["$","span",null,{"className":"token keyword","children":"public"}]," ",["$","span",null,{"className":"token class-name","children":"Response"}]," ",["$","span",null,{"className":"token function","children":"createProduct"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token class-name","children":"ProductRequest"}]," request",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n ",["$","span",null,{"className":"token class-name","children":"Product"}]," created ",["$","span",null,{"className":"token operator","children":"="}]," productService",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"createProduct"}],["$","span",null,{"className":"token punctuation","children":"("}],"request",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n ",["$","span",null,{"className":"token keyword","children":"return"}]," ",["$","span",null,{"className":"token class-name","children":"Response"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"status"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token class-name","children":["Response",["$","span",null,{"className":"token punctuation","children":"."}],"Status"]}],["$","span",null,{"className":"token punctuation","children":"."}],"CREATED",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"entity"}],["$","span",null,{"className":"token punctuation","children":"("}],"created",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"build"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n ",["$","span",null,{"className":"token punctuation","children":"}"}],"\n\n ",["$","span",null,{"className":"token annotation punctuation","children":"@PUT"}],"\n ",["$","span",null,{"className":"token annotation punctuation","children":"@Path"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token string","children":"\"/{id}\""}],["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token keyword","children":"public"}]," ",["$","span",null,{"className":"token class-name","children":"Response"}]," ",["$","span",null,{"className":"token function","children":"updateProduct"}],["$","span",null,{"className":"token punctuation","children":"("}],"\n ",["$","span",null,{"className":"token annotation punctuation","children":"@PathParam"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token string","children":"\"id\""}],["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token class-name","children":"Long"}]," id",["$","span",null,{"className":"token punctuation","children":","}],"\n ",["$","span",null,{"className":"token class-name","children":"ProductRequest"}]," request",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n ",["$","span",null,{"className":"token class-name","children":"Product"}]," updated ",["$","span",null,{"className":"token operator","children":"="}]," productService",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"updateProduct"}],["$","span",null,{"className":"token punctuation","children":"("}],"id",["$","span",null,{"className":"token punctuation","children":","}]," request",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n ",["$","span",null,{"className":"token keyword","children":"return"}]," ",["$","span",null,{"className":"token class-name","children":"Response"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"ok"}],["$","span",null,{"className":"token punctuation","children":"("}],"updated",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"build"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n ",["$","span",null,{"className":"token punctuation","children":"}"}],"\n\n ",["$","span",null,{"className":"token annotation punctuation","children":"@DELETE"}],"\n ",["$","span",null,{"className":"token annotation punctuation","children":"@Path"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token string","children":"\"/{id}\""}],["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token keyword","children":"public"}]," ",["$","span",null,{"className":"token class-name","children":"Response"}]," ",["$","span",null,{"className":"token function","children":"deleteProduct"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token annotation punctuation","children":"@PathParam"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token string","children":"\"id\""}],["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token class-name","children":"Long"}]," id",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n productService",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"deleteProduct"}],["$","span",null,{"className":"token punctuation","children":"("}],"id",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n ",["$","span",null,{"className":"token keyword","children":"return"}]," ",["$","span",null,{"className":"token class-name","children":"Response"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"noContent"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"build"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n ",["$","span",null,{"className":"token punctuation","children":"}"}],"\n",["$","span",null,{"className":"token punctuation","children":"}"}],"\n"]}]}],"\n",["$","p",null,{"children":"Was Quarkus besonders auszeichnet:"}],"\n",["$","ul",null,{"children":["\n",["$","li",null,{"children":"Supersonic Subatomic Java: Extrem schnelle Startup-Zeiten"}],"\n",["$","li",null,{"children":"Deutlich niedrigerer Speicherverbrauch"}],"\n",["$","li",null,{"children":"Native Kompilierung mit GraalVM"}],"\n",["$","li",null,{"children":"Live Coding mit nahezu sofortiger Feedback-Schleife"}],"\n"]}],"\n",["$","p",null,{"children":"Ein Dienst, der mit Spring Boot mehrere Sekunden zum Starten benötigt, kann mit Quarkus in Millisekunden hochfahren. Das macht einen enormen Unterschied für Serverless-Anwendungen und Containerumgebungen."}],"\n",["$","h2",null,{"children":"Kotlin: Die moderne JVM-Sprache"}],"\n",["$","p",null,{"children":"Während Java 17+ viele moderne Features mitbringt, bietet Kotlin noch weitergehende Vorteile. Die Sprache wurde von JetBrains entwickelt und kombiniert funktionale und objektorientierte Konzepte auf elegante Weise."}],"\n",["$","p",null,{"children":"Hier ein Beispiel eines Datenmodells und Repositories in Kotlin:"}],"\n",["$","pre",null,{"className":"language-kotlin","children":["$","code",null,{"className":"language-kotlin","children":[["$","span",null,{"className":"token comment","children":"// Datenmodell mit Kotlin data class"}],"\n",["$","span",null,{"className":"token keyword","children":"data"}]," ",["$","span",null,{"className":"token keyword","children":"class"}]," ",["$","span",null,{"className":"token function","children":"Product"}],["$","span",null,{"className":"token punctuation","children":"("}],"\n ",["$","span",null,{"className":"token annotation builtin","children":"@Id"}]," ",["$","span",null,{"className":"token keyword","children":"val"}]," id",["$","span",null,{"className":"token operator","children":":"}]," Long",["$","span",null,{"className":"token operator","children":"?"}]," ",["$","span",null,{"className":"token operator","children":"="}]," ",["$","span",null,{"className":"token keyword","children":"null"}],["$","span",null,{"className":"token punctuation","children":","}],"\n ",["$","span",null,{"className":"token keyword","children":"val"}]," name",["$","span",null,{"className":"token operator","children":":"}]," String",["$","span",null,{"className":"token punctuation","children":","}],"\n ",["$","span",null,{"className":"token keyword","children":"val"}]," description",["$","span",null,{"className":"token operator","children":":"}]," String",["$","span",null,{"className":"token punctuation","children":","}],"\n ",["$","span",null,{"className":"token keyword","children":"val"}]," price",["$","span",null,{"className":"token operator","children":":"}]," BigDecimal",["$","span",null,{"className":"token punctuation","children":","}],"\n ",["$","span",null,{"className":"token keyword","children":"val"}]," category",["$","span",null,{"className":"token operator","children":":"}]," Category",["$","span",null,{"className":"token punctuation","children":","}],"\n ",["$","span",null,{"className":"token keyword","children":"val"}]," attributes",["$","span",null,{"className":"token operator","children":":"}]," Map",["$","span",null,{"className":"token operator","children":"<"}],"String",["$","span",null,{"className":"token punctuation","children":","}]," String",["$","span",null,{"className":"token operator","children":">"}]," ",["$","span",null,{"className":"token operator","children":"="}]," ",["$","span",null,{"className":"token function","children":"emptyMap"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":","}],"\n ",["$","span",null,{"className":"token keyword","children":"val"}]," available",["$","span",null,{"className":"token operator","children":":"}]," Boolean ",["$","span",null,{"className":"token operator","children":"="}]," ",["$","span",null,{"className":"token boolean","children":"true"}],["$","span",null,{"className":"token punctuation","children":","}],"\n ",["$","span",null,{"className":"token annotation builtin","children":"@CreatedDate"}]," ",["$","span",null,{"className":"token keyword","children":"val"}]," createdAt",["$","span",null,{"className":"token operator","children":":"}]," LocalDateTime ",["$","span",null,{"className":"token operator","children":"="}]," LocalDateTime",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"now"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":","}],"\n ",["$","span",null,{"className":"token annotation builtin","children":"@LastModifiedDate"}]," ",["$","span",null,{"className":"token keyword","children":"val"}]," updatedAt",["$","span",null,{"className":"token operator","children":":"}]," LocalDateTime ",["$","span",null,{"className":"token operator","children":"="}]," LocalDateTime",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"now"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],"\n",["$","span",null,{"className":"token punctuation","children":")"}],"\n\n",["$","span",null,{"className":"token comment","children":"// Repository-Interface mit Kotlin-Sprachfeatures"}],"\n",["$","span",null,{"className":"token keyword","children":"interface"}]," ProductRepository ",["$","span",null,{"className":"token operator","children":":"}]," JpaRepository",["$","span",null,{"className":"token operator","children":"<"}],"Product",["$","span",null,{"className":"token punctuation","children":","}]," Long",["$","span",null,{"className":"token operator","children":">"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n\n ",["$","span",null,{"className":"token keyword","children":"fun"}]," ",["$","span",null,{"className":"token function","children":"findByCategory"}],["$","span",null,{"className":"token punctuation","children":"("}],"category",["$","span",null,{"className":"token operator","children":":"}]," Category",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token operator","children":":"}]," List",["$","span",null,{"className":"token operator","children":"<"}],"Product",["$","span",null,{"className":"token operator","children":">"}],"\n\n ",["$","span",null,{"className":"token keyword","children":"fun"}]," ",["$","span",null,{"className":"token function","children":"findByAvailableTrue"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token operator","children":":"}]," List",["$","span",null,{"className":"token operator","children":"<"}],"Product",["$","span",null,{"className":"token operator","children":">"}],"\n\n ",["$","span",null,{"className":"token keyword","children":"fun"}]," ",["$","span",null,{"className":"token function","children":"findByPriceLessThan"}],["$","span",null,{"className":"token punctuation","children":"("}],"maxPrice",["$","span",null,{"className":"token operator","children":":"}]," BigDecimal",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token operator","children":":"}]," List",["$","span",null,{"className":"token operator","children":"<"}],"Product",["$","span",null,{"className":"token operator","children":">"}],"\n\n ",["$","span",null,{"className":"token comment","children":"// Extension Function für komplexere Abfragen"}],"\n ",["$","span",null,{"className":"token keyword","children":"fun"}]," ",["$","span",null,{"className":"token function","children":"findAvailableByCategory"}],["$","span",null,{"className":"token punctuation","children":"("}],"category",["$","span",null,{"className":"token operator","children":":"}]," Category",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token operator","children":":"}]," List",["$","span",null,{"className":"token operator","children":"<"}],"Product",["$","span",null,{"className":"token operator","children":">"}]," ",["$","span",null,{"className":"token operator","children":"="}],"\n ",["$","span",null,{"className":"token function","children":"findAll"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token keyword","children":"where"}],["$","span",null,{"className":"token punctuation","children":"("}],"Product",["$","span",null,{"className":"token operator","children":"::"}],"available",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"isTrue"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"and"}],["$","span",null,{"className":"token punctuation","children":"("}],"Product",["$","span",null,{"className":"token operator","children":"::"}],"category",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"isEqualTo"}],["$","span",null,{"className":"token punctuation","children":"("}],"category",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":")"}],"\n\n ",["$","span",null,{"className":"token comment","children":"// Nutzt Kotlin Coroutines für nicht-blockierende Operationen"}],"\n ",["$","span",null,{"className":"token annotation builtin","children":"@Async"}],"\n ",["$","span",null,{"className":"token keyword","children":"suspend"}]," ",["$","span",null,{"className":"token keyword","children":"fun"}]," ",["$","span",null,{"className":"token function","children":"findProductsByNameContaining"}],["$","span",null,{"className":"token punctuation","children":"("}],"namePart",["$","span",null,{"className":"token operator","children":":"}]," String",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token operator","children":":"}]," Flow",["$","span",null,{"className":"token operator","children":"<"}],"Product",["$","span",null,{"className":"token operator","children":">"}],"\n",["$","span",null,{"className":"token punctuation","children":"}"}],"\n"]}]}],"\n",["$","p",null,{"children":"Die Vorteile von Kotlin sind vielfältig:"}],"\n",["$","ul",null,{"children":["\n",["$","li",null,{"children":"Null-Safety durch das Typsystem"}],"\n",["$","li",null,{"children":"Prägnanterer Code (30-40% weniger Code als Java)"}],"\n",["$","li",null,{"children":"Erweiterte Funktionen wie Coroutines für asynchrone Programmierung"}],"\n",["$","li",null,{"children":"Hervorragende Interoperabilität mit bestehendem Java-Code"}],"\n"]}],"\n",["$","p",null,{"children":"Besonders das Feature der Erweiterungsfunktionen erlaubt es, bestehende Klassen um neue Funktionalität zu erweitern, ohne sie zu modifizieren:"}],"\n",["$","pre",null,{"className":"language-kotlin","children":["$","code",null,{"className":"language-kotlin","children":[["$","span",null,{"className":"token comment","children":"// Eine Erweiterungsfunktion für die String-Klasse"}],"\n",["$","span",null,{"className":"token keyword","children":"fun"}]," String",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"toSlug"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token operator","children":"="}]," ",["$","span",null,{"className":"token keyword","children":"this"}],["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"lowercase"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"replace"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token function","children":"Regex"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token string-literal singleline","children":["$","span",null,{"className":"token string","children":"\"[^a-z0-9]+\""}]}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":","}]," ",["$","span",null,{"className":"token string-literal singleline","children":["$","span",null,{"className":"token string","children":"\"-\""}]}],["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"replace"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token function","children":"Regex"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token string-literal singleline","children":["$","span",null,{"className":"token string","children":"\"^-|-$\""}]}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":","}]," ",["$","span",null,{"className":"token string-literal singleline","children":["$","span",null,{"className":"token string","children":"\"\""}]}],["$","span",null,{"className":"token punctuation","children":")"}],"\n\n",["$","span",null,{"className":"token comment","children":"// Verwendung"}],"\n",["$","span",null,{"className":"token keyword","children":"val"}]," title ",["$","span",null,{"className":"token operator","children":"="}]," ",["$","span",null,{"className":"token string-literal singleline","children":["$","span",null,{"className":"token string","children":"\"Spring Boot mit Kotlin und JPA\""}]}],"\n",["$","span",null,{"className":"token keyword","children":"val"}]," slug ",["$","span",null,{"className":"token operator","children":"="}]," title",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"toSlug"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token comment","children":"// \"spring-boot-mit-kotlin-und-jpa\""}],"\n"]}]}],"\n",["$","h2",null,{"children":"Reaktive Programmierung mit Spring WebFlux und Quarkus Reactive"}],"\n",["$","p",null,{"children":"Moderne Backend-Systeme müssen oft tausende von gleichzeitigen Verbindungen effizient verarbeiten. Reaktive Programmierung ist hier der Schlüssel."}],"\n",["$","p",null,{"children":"Hier ein Beispiel eines reaktiven Services mit Spring WebFlux und Kotlin:"}],"\n",["$","pre",null,{"className":"language-kotlin","children":["$","code",null,{"className":"language-kotlin","children":[["$","span",null,{"className":"token annotation builtin","children":"@Service"}],"\n",["$","span",null,{"className":"token keyword","children":"class"}]," ",["$","span",null,{"className":"token function","children":"ReactiveProductService"}],["$","span",null,{"className":"token punctuation","children":"("}],"\n ",["$","span",null,{"className":"token keyword","children":"private"}]," ",["$","span",null,{"className":"token keyword","children":"val"}]," productRepository",["$","span",null,{"className":"token operator","children":":"}]," ReactiveProductRepository\n",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n ",["$","span",null,{"className":"token keyword","children":"fun"}]," ",["$","span",null,{"className":"token function","children":"getAllProducts"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token operator","children":":"}]," Flux",["$","span",null,{"className":"token operator","children":"<"}],"Product",["$","span",null,{"className":"token operator","children":">"}]," ",["$","span",null,{"className":"token operator","children":"="}],"\n productRepository",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"findAll"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],"\n\n ",["$","span",null,{"className":"token keyword","children":"fun"}]," ",["$","span",null,{"className":"token function","children":"getProductById"}],["$","span",null,{"className":"token punctuation","children":"("}],"id",["$","span",null,{"className":"token operator","children":":"}]," Long",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token operator","children":":"}]," Mono",["$","span",null,{"className":"token operator","children":"<"}],"Product",["$","span",null,{"className":"token operator","children":">"}]," ",["$","span",null,{"className":"token operator","children":"="}],"\n productRepository",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"findById"}],["$","span",null,{"className":"token punctuation","children":"("}],"id",["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"switchIfEmpty"}],["$","span",null,{"className":"token punctuation","children":"("}],"Mono",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"error"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token function","children":"NotFoundException"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token string-literal singleline","children":["$","span",null,{"className":"token string","children":"\"Produkt nicht gefunden\""}]}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":")"}],"\n\n ",["$","span",null,{"className":"token keyword","children":"fun"}]," ",["$","span",null,{"className":"token function","children":"createProduct"}],["$","span",null,{"className":"token punctuation","children":"("}],"request",["$","span",null,{"className":"token operator","children":":"}]," ProductRequest",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token operator","children":":"}]," Mono",["$","span",null,{"className":"token operator","children":"<"}],"Product",["$","span",null,{"className":"token operator","children":">"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\n ",["$","span",null,{"className":"token keyword","children":"val"}]," product ",["$","span",null,{"className":"token operator","children":"="}]," ",["$","span",null,{"className":"token function","children":"Product"}],["$","span",null,{"className":"token punctuation","children":"("}],"\n name ",["$","span",null,{"className":"token operator","children":"="}]," request",["$","span",null,{"className":"token punctuation","children":"."}],"name",["$","span",null,{"className":"token punctuation","children":","}],"\n description ",["$","span",null,{"className":"token operator","children":"="}]," request",["$","span",null,{"className":"token punctuation","children":"."}],"description",["$","span",null,{"className":"token punctuation","children":","}],"\n price ",["$","span",null,{"className":"token operator","children":"="}]," request",["$","span",null,{"className":"token punctuation","children":"."}],"price",["$","span",null,{"className":"token punctuation","children":","}],"\n category ",["$","span",null,{"className":"token operator","children":"="}]," request",["$","span",null,{"className":"token punctuation","children":"."}],"category\n ",["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token keyword","children":"return"}]," productRepository",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"save"}],["$","span",null,{"className":"token punctuation","children":"("}],"product",["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token punctuation","children":"}"}],"\n\n ",["$","span",null,{"className":"token keyword","children":"fun"}]," ",["$","span",null,{"className":"token function","children":"processInventoryUpdates"}],["$","span",null,{"className":"token punctuation","children":"("}],"updates",["$","span",null,{"className":"token operator","children":":"}]," Flux",["$","span",null,{"className":"token operator","children":"<"}],"InventoryUpdate",["$","span",null,{"className":"token operator","children":">"}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token operator","children":":"}]," Flux",["$","span",null,{"className":"token operator","children":"<"}],"Product",["$","span",null,{"className":"token operator","children":">"}]," ",["$","span",null,{"className":"token operator","children":"="}],"\n updates\n ",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"flatMap"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}]," update ",["$","span",null,{"className":"token operator","children":"->"}],"\n productRepository",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"findById"}],["$","span",null,{"className":"token punctuation","children":"("}],"update",["$","span",null,{"className":"token punctuation","children":"."}],"productId",["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"flatMap"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}]," product ",["$","span",null,{"className":"token operator","children":"->"}],"\n ",["$","span",null,{"className":"token keyword","children":"val"}]," updated ",["$","span",null,{"className":"token operator","children":"="}]," product",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"copy"}],["$","span",null,{"className":"token punctuation","children":"("}],"\n available ",["$","span",null,{"className":"token operator","children":"="}]," update",["$","span",null,{"className":"token punctuation","children":"."}],"available",["$","span",null,{"className":"token punctuation","children":","}],"\n updatedAt ",["$","span",null,{"className":"token operator","children":"="}]," LocalDateTime",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"now"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token punctuation","children":")"}],"\n productRepository",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"save"}],["$","span",null,{"className":"token punctuation","children":"("}],"updated",["$","span",null,{"className":"token punctuation","children":")"}],"\n ",["$","span",null,{"className":"token punctuation","children":"}"}],"\n ",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"onErrorResume"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}]," Mono",["$","span",null,{"className":"token punctuation","children":"."}],["$","span",null,{"className":"token function","children":"empty"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"}"}],"\n ",["$","span",null,{"className":"token punctuation","children":"}"}],"\n",["$","span",null,{"className":"token punctuation","children":"}"}],"\n"]}]}],"\n",["$","p",null,{"children":"Der reaktive Ansatz ermöglicht:"}],"\n",["$","ul",null,{"children":["\n",["$","li",null,{"children":"Höhere Skalierbarkeit mit weniger Ressourcen"}],"\n",["$","li",null,{"children":"Bessere Fehlertoleranz und Resilience"}],"\n",["$","li",null,{"children":"Event-Driven-Architektur für Echtzeit-Anwendungen"}],"\n"]}],"\n",["$","h2",null,{"children":"Performance-Vergleich und Anwendungsfälle"}],"\n",["$","p",null,{"children":"Nach meinen Benchmark-Tests ergeben sich folgende typische Werte:"}],"\n",["$","table",null,{"children":[["$","thead",null,{"children":["$","tr",null,{"children":[["$","th",null,{"children":"Metrik"}],["$","th",null,{"children":"Spring Boot (JVM)"}],["$","th",null,{"children":"Quarkus (JVM)"}],["$","th",null,{"children":"Quarkus (Native)"}]]}]}],["$","tbody",null,{"children":[["$","tr",null,{"children":[["$","td",null,{"children":"Startup-Zeit"}],["$","td",null,{"children":"2-4 Sekunden"}],["$","td",null,{"children":"0.8-1.5 Sekunden"}],["$","td",null,{"children":"0.015-0.05 Sekunden"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":"RAM-Verbrauch"}],["$","td",null,{"children":"~350-500 MB"}],["$","td",null,{"children":"~150-250 MB"}],["$","td",null,{"children":"~50-120 MB"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":"Throughput"}],["$","td",null,{"children":"Hoch"}],["$","td",null,{"children":"Sehr hoch"}],["$","td",null,{"children":"Hoch"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":"Latenz unter Last"}],["$","td",null,{"children":"Gut"}],["$","td",null,{"children":"Sehr gut"}],["$","td",null,{"children":"Sehr gut"}]]}]]}]]}],"\n",["$","p",null,{"children":"Typische Anwendungsfälle:"}],"\n",["$","ul",null,{"children":["\n",["$","li",null,{"children":[["$","strong",null,{"children":"Spring Boot"}],": Große Enterprise-Anwendungen, komplexe Geschäftslogik, umfangreiche Teams"]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Quarkus"}],": Microservices, Serverless-Funktionen, ressourcenbeschränkte Umgebungen"]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Kotlin"}],": Für beide Frameworks ideal, besonders vorteilhaft bei komplexen Domänenmodellen"]}],"\n"]}],"\n",["$","h2",null,{"children":"Praxisnahe Microservice-Architektur"}],"\n",["$","p",null,{"children":"In meinen Projekten setze ich oft auf eine Kombination:"}],"\n",["$","pre",null,{"children":["$","code",null,{"children":"┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐\n│ API Gateway │ │ Auth Service │ │ Config Server │\n│ (Spring Cloud) │────▶│ (Quarkus+Kotlin)│ │ (Spring Boot) │\n└─────────────────┘ └─────────────────┘ └─────────────────┘\n │ │ │\n ▼ ▼ ▼\n┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐\n│ Product Service │ │ Inventory Svc │ │ Order Service │\n│ (Spring+Kotlin) │───▶│ (Quarkus Native)│────▶│ (Spring+Kotlin) │\n└─────────────────┘ └─────────────────┘ └─────────────────┘\n │ │ │\n └──────────────────────┼────────────────────────┘\n ▼\n ┌─────────────────┐\n │ Event Bus │\n │ (Kafka) │\n └─────────────────┘\n"}]}],"\n",["$","p",null,{"children":"Ich setze Spring Boot für komplexe Services mit umfangreicher Geschäftslogik ein, während Quarkus (besonders in der Native-Variante) für hochperformante Dienste mit vielen parallelen Anfragen zum Einsatz kommt."}],"\n",["$","h2",null,{"children":"Fazit und Ausblick"}],"\n",["$","p",null,{"children":"Nach mehr als fünf Jahren Entwicklungserfahrung mit diesen Technologien kann ich sagen: Es gibt nicht das eine perfekte Framework oder die eine perfekte Sprache. Vielmehr kommt es darauf an, die Stärken jeder Technologie für den jeweiligen Anwendungsfall zu nutzen."}],"\n",["$","ul",null,{"children":["\n",["$","li",null,{"children":[["$","strong",null,{"children":"Spring Boot"}]," bleibt das robuste Fundament für komplexe Enterprise-Anwendungen"]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Quarkus"}]," setzt neue Maßstäbe für Cloud-Native-Anwendungen"]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Kotlin"}]," bringt Produktivität und Sicherheit in die Java-Welt"]}],"\n"]}],"\n",["$","p",null,{"children":"Meine persönliche Präferenz liegt bei der Kombination aus Kotlin mit Spring Boot für größere Dienste und Quarkus Native für leichtgewichtige Mikroservices. Diese Kombination bietet optimale Entwicklungsproduktivität bei gleichzeitig hervorragender Laufzeitperformance."}],"\n",["$","p",null,{"children":"Die Zukunft wird noch stärker durch Cloud-Native-Technologien geprägt sein. WebAssembly und noch effizientere Kompilierungstechniken werden die Grenzen zwischen verschiedenen Programmiersprachen weiter verwischen. Mit Kotlin und modernen Frameworks wie Spring Boot und Quarkus sind wir bestens für diese Entwicklung gerüstet."}]]}]]}]]}]}]}]}]}]}]],null],null]},["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children","articles","children","backend","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","styles":null}],null]},["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children","articles","children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","styles":null}],null]},[["$","html",null,{"lang":"en","className":"h-full antialiased","suppressHydrationWarning":true,"children":["$","body",null,{"className":"flex h-full bg-zinc-50 dark:bg-black","children":["$","$L5",null,{"children":["$","div",null,{"className":"flex w-full","children":["$","div",null,{"className":"relative min-h-screen","children":[["$","div",null,{"className":"fixed inset-0 bg-white ring-1 ring-zinc-100 dark:bg-zinc-900 dark:ring-zinc-300/20"}],["$","div",null,{"className":"relative","children":["$","$L6",null,{"children":["$","div",null,{"className":"flex flex-col min-h-screen","children":[["$","main",null,{"className":"flex-1 px-4 sm:px-6 lg:px-8 py-8","children":["$","div",null,{"className":"mx-auto max-w-2xl lg:max-w-5xl","children":["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L4",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":["$","div",null,{"className":"sm:px-8 flex h-full items-center pt-16 sm:pt-32","children":["$","div",null,{"className":"mx-auto w-full max-w-7xl lg:px-8","children":["$","div",null,{"className":"relative px-4 sm:px-8 lg:px-12","children":["$","div",null,{"className":"mx-auto max-w-2xl lg:max-w-5xl","children":["$","div",null,{"className":"flex flex-col items-center","children":[["$","p",null,{"className":"text-base font-semibold text-teal-500 dark:text-teal-400","children":"404"}],["$","h1",null,{"className":"mt-4 text-4xl font-bold tracking-tight text-zinc-800 sm:text-5xl dark:text-zinc-100","children":"Seite nicht gefunden"}],["$","p",null,{"className":"mt-4 text-base text-zinc-600 dark:text-zinc-400","children":"Entschuldigung, die gesuchte Seite konnte nicht gefunden werden."}],["$","div",null,{"className":"mt-8 flex space-x-4","children":[["$","$L2",null,{"className":"inline-flex items-center gap-2 justify-center rounded-md py-2 px-3 text-sm outline-offset-2 transition active:transition-none bg-zinc-800 font-semibold text-zinc-100 hover:bg-zinc-700 active:bg-zinc-800 active:text-zinc-100/70 dark:bg-zinc-700 dark:hover:bg-zinc-600 dark:active:bg-zinc-700 dark:active:text-zinc-100/70 transition-all duration-300 hover:scale-105","href":"/","children":"Zurück zur Startseite"}],["$","$L2",null,{"className":"inline-flex items-center gap-2 justify-center rounded-md py-2 px-3 text-sm outline-offset-2 transition active:transition-none bg-zinc-50 font-medium text-zinc-900 hover:bg-zinc-100 active:bg-zinc-100 active:text-zinc-900/60 dark:bg-zinc-800/50 dark:text-zinc-300 dark:hover:bg-zinc-800 dark:hover:text-zinc-50 dark:active:bg-zinc-800/50 dark:active:text-zinc-50/70 transition-all duration-300 hover:scale-105","href":"/projects","children":"Projekte entdecken"}]]}],["$","p",null,{"className":"mt-12 text-sm text-zinc-500 dark:text-zinc-500","children":["Du suchst etwas Bestimmtes? Schreib mir gerne eine"," ",["$","a",null,{"href":"mailto:christianc.pana@icloud.com","className":"text-teal-500 underline hover:text-teal-600 dark:text-teal-400 dark:hover:text-teal-300","children":"E-Mail"}],"."]}]]}]}]}]}]}],"notFoundStyles":[],"styles":null}]}]}],["$","footer",null,{"className":"mt-32 flex-none","children":["$","div",null,{"className":"sm:px-8","children":["$","div",null,{"className":"mx-auto w-full max-w-7xl lg:px-8","children":["$","div",null,{"className":"border-t border-zinc-100 pt-10 pb-16 dark:border-zinc-700/40","children":["$","div",null,{"className":"relative px-4 sm:px-8 lg:px-12","children":["$","div",null,{"className":"mx-auto max-w-2xl lg:max-w-5xl","children":["$","div",null,{"className":"flex flex-col items-center justify-between gap-6 md:flex-row","children":[["$","div",null,{"className":"flex flex-wrap justify-center gap-x-6 gap-y-1 text-sm font-medium text-zinc-800 dark:text-zinc-200","children":[["$","$L2",null,{"href":"/about","className":"transition hover:text-sky-500 dark:hover:text-sky-400","children":"Über mich"}],["$","$L2",null,{"href":"/projects","className":"transition hover:text-sky-500 dark:hover:text-sky-400","children":"Projekte"}],["$","$L2",null,{"href":"/uses","className":"transition hover:text-sky-500 dark:hover:text-sky-400","children":"Hardware"}]]}],["$","p",null,{"className":"text-sm text-zinc-400 dark:text-zinc-500","children":["© ",2025," Christian Pana. All rights reserved."]}]]}]}]}]}]}]}]}]]}]}]}]]}]}]}]}]}],null],null],[[["$","link","0",{"rel":"stylesheet","href":"./_next/static/css/7cfd9be33ea86463.css","precedence":"next","crossOrigin":"$undefined"}]],"$L7"]]]] 7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Moderne Backend-Architekturen mit Spring, Quarkus und Kotlin - Christian Pana"}],["$","meta","3",{"name":"description","content":"Wie ich hochskalierbare und wartbare Microservice-Architekturen mit Java-Frameworks entwickle. Eine Analyse der Vor- und Nachteile von Spring Boot vs. Quarkus und warum Kotlin die Java-Welt revolutioniert."}],["$","link","4",{"rel":"alternate","type":"application/rss+xml","href":"https://softflow.dev/feed.xml"}],["$","link","5",{"rel":"icon","href":"/favicon.ico","type":"image/x-icon","sizes":"4096x4096"}]] 1:null