{"id":266,"date":"2024-03-06T20:31:10","date_gmt":"2024-03-06T19:31:10","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=266"},"modified":"2024-03-08T20:39:04","modified_gmt":"2024-03-08T19:39:04","slug":"caching-ueber-annotationen-in-spring-boot-anwendungen","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=266","title":{"rendered":"Caching \u00fcber Annotationen in Spring-Boot-Anwendungen"},"content":{"rendered":"\n<p>Spring Boot ist ein beliebtes Framework f\u00fcr die Entwicklung von Java-basierten Webanwendungen. Eine der Herausforderungen in Webanwendungen besteht darin, Daten effizient zu verarbeiten und gleichzeitig die Antwortzeiten zu optimieren. Hier kommen Caching-Annotationen ins Spiel, eine leistungsstarke Funktion von Spring, die die Anwendungsleistung durch die Zwischenspeicherung von Ergebnissen verbessert. In diesem Artikel werden wir uns ausf\u00fchrlich mit der Nutzung von Caching-Annotationen in Spring Boot Webanwendungen befassen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Was ist Caching?<\/h2>\n\n\n\n<p>Caching ist eine Technik, bei der h\u00e4ufig verwendete Daten oder Ergebnisse zwischengespeichert werden, um den Zugriff darauf zu beschleunigen. Anstatt die Daten bei jedem Aufruf erneut zu berechnen oder aus der Datenbank abzurufen, werden sie im Cache gespeichert, um schneller darauf zugreifen zu k\u00f6nnen. Dies ist besonders n\u00fctzlich, wenn es um teure Berechnungen oder aufw\u00e4ndige Datenbankabfragen geht.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Die Rolle von Caching-Annotationen in Spring Boot<\/h2>\n\n\n\n<p>Spring bietet eine effiziente M\u00f6glichkeit, Caching in Anwendungen zu integrieren, und zwar durch die Verwendung von Caching-Annotationen. Diese Annotationen erm\u00f6glichen es, Caching-Operationen zu deklarieren und den Cache-Mechanismus zu steuern. In Spring Boot stehen verschiedene Annotationen zur Verf\u00fcgung, darunter <code>@Cacheable<\/code>, <code>@CachePut<\/code>, und <code>@CacheEvict<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. <code>@Cacheable<\/code><\/h3>\n\n\n\n<p>Die <code>@Cacheable<\/code>-Annotation wird verwendet, um Methodenaufrufe zu kennzeichnen, deren Ergebnisse zwischengespeichert werden sollen. Wenn eine mit <code>@Cacheable<\/code> annotierte Methode aufgerufen wird, \u00fcberpr\u00fcft Spring zuerst den Cache. Falls die Ergebnisse bereits im Cache vorhanden sind, werden sie direkt zur\u00fcckgegeben, ohne dass die Methode ausgef\u00fchrt wird. Andernfalls wird die Methode ausgef\u00fchrt, und das Ergebnis wird im Cache gespeichert.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@Cacheable(<span class=\"hljs-string\">\"books\"<\/span>)\n<span class=\"hljs-keyword\">public<\/span> Book findBookById(Long id) {\n    <span class=\"hljs-comment\">\/\/ Logik zur Abfrage eines Buches aus der Datenbank<\/span>\n    <span class=\"hljs-keyword\">return<\/span> bookRepository.findById(id).orElse(<span class=\"hljs-keyword\">null<\/span>);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><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>In diesem Beispiel wird die Methode <code>findBookById<\/code> durch die <code>@Cacheable<\/code>-Annotation gekennzeichnet. Der Cache mit dem Namen &#8222;books&#8220; wird verwendet, um die Ergebnisse dieser Methode zu speichern.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. <code>@CachePut<\/code><\/h3>\n\n\n\n<p>Im Gegensatz zu <code>@Cacheable<\/code> erzwingt die <code>@CachePut<\/code>-Annotation die Ausf\u00fchrung der Methode und speichert das Ergebnis im Cache. Dies ist n\u00fctzlich, wenn Sie sicherstellen m\u00f6chten, dass die neuesten Daten immer im Cache vorhanden sind.<\/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\">@CachePut(<span class=\"hljs-string\">\"books\"<\/span>)\n<span class=\"hljs-keyword\">public<\/span> Book updateBook(Book book) {\n    <span class=\"hljs-comment\">\/\/ Logik zur Aktualisierung eines Buches in der Datenbank<\/span>\n    <span class=\"hljs-keyword\">return<\/span> bookRepository.save(book);\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>In diesem Beispiel wird die Methode <code>updateBook<\/code> durch die <code>@CachePut<\/code>-Annotation gekennzeichnet. Das Ergebnis wird im Cache mit dem Namen &#8222;books&#8220; gespeichert, unabh\u00e4ngig davon, ob der Cache zuvor vorhanden war oder nicht.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. <code>@CacheEvict<\/code><\/h3>\n\n\n\n<p>Die <code>@CacheEvict<\/code>-Annotation wird verwendet, um den Cache zu leeren, entweder vollst\u00e4ndig oder nur f\u00fcr bestimmte Eintr\u00e4ge. Dies ist n\u00fctzlich, wenn Sie sicherstellen m\u00f6chten, dass der Cache aktualisiert wird, wenn Daten ge\u00e4ndert werden.<\/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\">@CacheEvict(value = <span class=\"hljs-string\">\"books\"<\/span>, key = <span class=\"hljs-string\">\"#id\"<\/span>)\npublic <span class=\"hljs-keyword\">void<\/span> deleteBook(Long id) {\n    <span class=\"hljs-comment\">\/\/ Logik zum L\u00f6schen eines Buches aus der Datenbank<\/span>\n    bookRepository.deleteById(id);\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<p>In diesem Beispiel wird die Methode <code>deleteBook<\/code> durch die <code>@CacheEvict<\/code>-Annotation gekennzeichnet. Der Eintrag im Cache mit dem Schl\u00fcssel <code>id<\/code> im Cache &#8222;books&#8220; wird gel\u00f6scht.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Konfiguration des Caching in Spring Boot<\/h2>\n\n\n\n<p>Damit die Caching-Annotationen in Spring Boot effektiv genutzt werden k\u00f6nnen, muss die Anwendung entsprechend konfiguriert sein. Dies erfolgt in der Regel in der Hauptklasse der Anwendung, die die <code>@SpringBootApplication<\/code>-Annotation tr\u00e4gt.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@SpringBootApplication\n@EnableCaching\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">SpringBootCachingExampleApplication<\/span> <\/span>{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> void main(String&#91;] args) {\n        SpringApplication.run(SpringBootCachingExampleApplication<span class=\"hljs-class\">.<span class=\"hljs-keyword\">class<\/span>, <span class=\"hljs-title\">args<\/span>);\n    }\n}<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><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>Die <code>@EnableCaching<\/code>-Annotation aktiviert das Caching in der gesamten Anwendung. Spring Boot verwendet standardm\u00e4\u00dfig einen einfachen Cache-Manager, der auf der In-Memory-Caching-Bibliothek basiert. Sie k\u00f6nnen jedoch auch andere Cache-Manager wie Ehcache oder Redis verwenden, indem Sie die entsprechenden Abh\u00e4ngigkeiten hinzuf\u00fcgen und die Konfiguration anpassen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Best Practices f\u00fcr die Verwendung von Caching-Annotationen<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Sorgf\u00e4ltige Auswahl des Cache-Namens<\/strong>: Der Cache-Name sollte aussagekr\u00e4ftig und eindeutig sein, um Verwechslungen zu vermeiden. Es ist ratsam, separate Cache-Namen f\u00fcr verschiedene Arten von Daten oder Operationen zu verwenden.<\/li>\n\n\n\n<li><strong>Behandlung von Ausnahmen<\/strong>: Bei der Verwendung von Caching-Annotationen ist es wichtig, die m\u00f6glichen Ausnahmen zu ber\u00fccksichtigen. Wenn eine Methode eine Ausnahme ausl\u00f6st, wird der Cache m\u00f6glicherweise nicht korrekt aktualisiert. Sie k\u00f6nnen dies durch die Verwendung der <code>@CacheEvict<\/code>-Annotation in einem <code>@AfterThrowing<\/code>-Advice abfangen.<\/li>\n\n\n\n<li><strong>Abw\u00e4gung zwischen Cache-Gr\u00f6\u00dfe und Speicherverbrauch<\/strong>: Der Cache-Manager verwendet Speicher, um die zwischengespeicherten Daten zu halten. Es ist wichtig, die Gr\u00f6\u00dfe des Caches und den Speicherverbrauch zu \u00fcberwachen, um Leistungsprobleme zu vermeiden.<\/li>\n\n\n\n<li><strong>Ber\u00fccksichtigung von TTL (Time-To-Live) und TTI (Time-To-Idle)<\/strong>: Einige Cache-Manager erm\u00f6glichen die Konfiguration von TTL und TTI f\u00fcr Cache-Eintr\u00e4ge. Diese Einstellungen steuern, wie lange ein Eintrag im Cache g\u00fcltig ist, unabh\u00e4ngig davon, ob die Anwendung darauf zugreift oder nicht.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Die Verwendung von Caching-Annotationen in Spring Boot Webanwendungen bietet eine effiziente M\u00f6glichkeit, die Leistung zu verbessern, indem h\u00e4ufig verwendete Daten zwischengespeichert werden. Die <code>@Cacheable<\/code>, <code>@CachePut<\/code> und <code>@CacheEvict<\/code>-Annotationen erm\u00f6glichen eine feine Kontrolle \u00fcber den Cache-Mechanismus. Durch die sorgf\u00e4ltige Konfiguration und Ber\u00fccksichtigung von Best Practices k\u00f6nnen Entwickler die Vorteile des Cachings nutzen und gleichzeitig sicherstellen, dass die Anwendung korrekt und effizient arbeitet.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Spring Boot ist ein beliebtes Framework f\u00fcr die Entwicklung von Java-basierten Webanwendungen. Eine der Herausforderungen in Webanwendungen besteht darin, Daten effizient zu verarbeiten und gleichzeitig die Antwortzeiten zu optimieren. Hier kommen Caching-Annotationen ins Spiel, eine leistungsstarke Funktion von Spring, die die Anwendungsleistung durch die Zwischenspeicherung von Ergebnissen verbessert. In diesem Artikel werden wir uns ausf\u00fchrlich [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-266","post","type-post","status-publish","format-standard","hentry","category-spring"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/266","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=266"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/266\/revisions"}],"predecessor-version":[{"id":267,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/266\/revisions\/267"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=266"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=266"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}