{"id":136,"date":"2024-01-06T09:23:07","date_gmt":"2024-01-06T08:23:07","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=136"},"modified":"2024-01-08T09:28:15","modified_gmt":"2024-01-08T08:28:15","slug":"die-scheduled-annotation-in-spring","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=136","title":{"rendered":"Die @Scheduled-Annotation in Spring"},"content":{"rendered":"\n<p>Die Spring Framework ist eine weit verbreitete Plattform f\u00fcr die Entwicklung von Java-Anwendungen, insbesondere f\u00fcr die Entwicklung von Enterprise-Anwendungen. Eine der vielen n\u00fctzlichen Funktionen, die Spring bietet, ist die M\u00f6glichkeit, geplante Aufgaben oder wiederkehrende Aufgaben in einer Anwendung zu definieren und auszuf\u00fchren. Dies wird durch die @Scheduled-Annotation erm\u00f6glicht, die Teil des Spring-Frameworks ist. In diesem Artikel werden wir uns eingehend mit der @Scheduled-Annotation befassen und untersuchen, wie sie in Spring-Anwendungen verwendet werden kann.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Einf\u00fchrung in die @Scheduled-Annotation<\/h2>\n\n\n\n<p>Die @Scheduled-Annotation ist eine M\u00f6glichkeit, geplante Aufgaben in Spring-Anwendungen zu definieren und auszuf\u00fchren. Diese Aufgaben k\u00f6nnen regelm\u00e4\u00dfig zu bestimmten Zeitpunkten, in festen Zeitintervallen oder nach einem festen Zeitplan ausgef\u00fchrt werden. Die Verwendung der @Scheduled-Annotation ist eine effektive M\u00f6glichkeit, Aufgaben wie Datenbankwartung, Berichtsgenerierung, Synchronisierung von Daten und andere zeitgesteuerte Abl\u00e4ufe in Ihrer Anwendung zu automatisieren.<\/p>\n\n\n\n<p>Um die @Scheduled-Annotation zu verwenden, m\u00fcssen Sie zun\u00e4chst sicherstellen, dass die Spring-Annotationen in Ihrer Anwendung aktiviert sind. Dies geschieht normalerweise durch die Konfiguration der Komponentenscan-Basispakete in Ihrer Spring-Anwendung.<\/p>\n\n\n\n<p>Hier ist ein einfaches Beispiel f\u00fcr die Verwendung der @Scheduled-Annotation:<\/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\"><span class=\"hljs-keyword\">import<\/span> org.springframework.scheduling.annotation.Scheduled;\n<span class=\"hljs-keyword\">import<\/span> org.springframework.stereotype.Component;\n\n@Component\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ScheduledTask<\/span> <\/span>{\n\n    @Scheduled(fixedRate = <span class=\"hljs-number\">10000<\/span>) <span class=\"hljs-comment\">\/\/ Diese Methode wird alle 10 Sekunden ausgef\u00fchrt<\/span>\n    public <span class=\"hljs-keyword\">void<\/span> performTask() {\n        <span class=\"hljs-comment\">\/\/ Ihre Aufgaben hier<\/span>\n        System.out.println(<span class=\"hljs-string\">\"Geplante Aufgabe wird ausgef\u00fchrt...\"<\/span>);\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>In diesem Beispiel haben wir eine Klasse <code>ScheduledTask<\/code>, die die @Scheduled-Annotation verwendet, um die Methode <code>performTask<\/code> alle 10 Sekunden auszuf\u00fchren. Beachten Sie, dass die Klasse mit der @Component-Annotation gekennzeichnet ist, um sicherzustellen, dass sie von Spring verwaltet und erkannt wird.<\/p>\n\n\n\n<p>Lassen Sie uns nun tiefer in die verschiedenen Aspekte der @Scheduled-Annotation eintauchen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Die verschiedenen Attribute der @Scheduled-Annotation<\/h2>\n\n\n\n<p>Die @Scheduled-Annotation bietet verschiedene Attribute, mit denen Sie die Ausf\u00fchrung Ihrer geplanten Aufgaben steuern k\u00f6nnen. Hier sind einige der wichtigsten Attribute:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>fixedRate<\/code>: Dieses Attribut gibt an, wie oft die geplante Methode ausgef\u00fchrt werden soll, unabh\u00e4ngig davon, wann sie gestartet wurde. Zum Beispiel wird eine Methode mit <code>@Scheduled(fixedRate = 5000)<\/code> alle 5 Sekunden ausgef\u00fchrt, ungeachtet der Dauer der vorherigen Ausf\u00fchrung.<\/li>\n\n\n\n<li><code>fixedDelay<\/code>: Mit diesem Attribut k\u00f6nnen Sie die Verz\u00f6gerung zwischen dem Ende einer Ausf\u00fchrung und dem Start der n\u00e4chsten Ausf\u00fchrung steuern. Wenn Sie beispielsweise <code>@Scheduled(fixedDelay = 10000)<\/code> verwenden, wird die Methode alle 10 Sekunden nach Abschluss der vorherigen Ausf\u00fchrung aufgerufen.<\/li>\n\n\n\n<li><code>initialDelay<\/code>: Dieses Attribut erm\u00f6glicht es Ihnen, eine anf\u00e4ngliche Verz\u00f6gerung f\u00fcr die Ausf\u00fchrung Ihrer geplanten Aufgabe festzulegen. Wenn Sie <code>@Scheduled(initialDelay = 5000, fixedRate = 10000)<\/code> verwenden, wird die Methode nach einer anf\u00e4nglichen Verz\u00f6gerung von 5 Sekunden ausgef\u00fchrt und dann alle 10 Sekunden.<\/li>\n\n\n\n<li><code>cron<\/code>: Dieses Attribut erm\u00f6glicht die Verwendung von Cron-Ausdr\u00fccken, um den genauen Zeitplan f\u00fcr die Ausf\u00fchrung Ihrer Methode anzugeben. Zum Beispiel k\u00f6nnen Sie <code>@Scheduled(cron = \"0 0 * * * ?\")<\/code> verwenden, um die Methode jeden Tag um Mitternacht auszuf\u00fchren.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Verwendung von Cron-Ausdr\u00fccken<\/h2>\n\n\n\n<p>Cron-Ausdr\u00fccke sind eine leistungsstarke M\u00f6glichkeit, den genauen Zeitplan f\u00fcr die Ausf\u00fchrung Ihrer geplanten Aufgaben festzulegen. Sie sind flexibel und erm\u00f6glichen es Ihnen, Aufgaben zu bestimmten Zeitpunkten oder in bestimmten Zeitintervallen auszuf\u00fchren. Hier sind einige Beispiele f\u00fcr h\u00e4ufig verwendete Cron-Ausdr\u00fccke:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>* * * * * ?<\/code>: Dieser Ausdruck f\u00fchrt die Aufgabe jede Sekunde aus.<\/li>\n\n\n\n<li><code>0 0 * * * ?<\/code>: Dieser Ausdruck f\u00fchrt die Aufgabe t\u00e4glich um Mitternacht aus.<\/li>\n\n\n\n<li><code>0 0\/5 * * * ?<\/code>: Dieser Ausdruck f\u00fchrt die Aufgabe alle 5 Minuten aus.<\/li>\n\n\n\n<li><code>0 0 0 1 * ?<\/code>: Dieser Ausdruck f\u00fchrt die Aufgabe am ersten Tag jedes Monats aus.<\/li>\n<\/ul>\n\n\n\n<p>Die Verwendung von Cron-Ausdr\u00fccken erfordert m\u00f6glicherweise einige Kenntnisse dar\u00fcber, wie Cron funktioniert, aber sie bieten eine granulare Kontrolle \u00fcber den Zeitplan Ihrer geplanten Aufgaben.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Aktivieren der @Scheduled-Annotation in Spring<\/h2>\n\n\n\n<p>Damit die @Scheduled-Annotation in Ihrer Spring-Anwendung funktioniert, m\u00fcssen Sie sicherstellen, dass Sie die entsprechenden Konfigurationen aktivieren. Hier sind die Schritte, um die @Scheduled-Annotation zu aktivieren:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>F\u00fcgen Sie die <code>@EnableScheduling<\/code>-Annotation zu Ihrer Hauptkonfigurationsklasse hinzu. Diese Annotation aktiviert die Verarbeitung der @Scheduled-Annotationen in Ihrer Anwendung.<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> org.springframework.context.annotation.Configuration;\n<span class=\"hljs-keyword\">import<\/span> org.springframework.scheduling.annotation.EnableScheduling;\n\n@Configuration\n@EnableScheduling\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">AppConfig<\/span> <\/span>{\n    <span class=\"hljs-comment\">\/\/ Konfiguration Ihrer Anwendung hier<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><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<ol class=\"wp-block-list\" start=\"2\">\n<li>Stellen Sie sicher, dass Ihre geplante Klasse mit der @Component-Annotation gekennzeichnet ist oder in den gescannten Paketen Ihrer Anwendung enthalten ist. Dadurch wird sichergestellt, dass Spring die Klasse erkennt und ihre geplanten Methoden ausf\u00fchrt.<\/li>\n\n\n\n<li>Konfigurieren Sie die geplanten Aufgaben mit den gew\u00fcnschten Attributen, wie in den vorherigen Beispielen gezeigt.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Anmerkungen zur Verwendung der @Scheduled-Annotation<\/h2>\n\n\n\n<p>Bevor Sie die @Scheduled-Annotation in Ihrer Anwendung verwenden, sollten Sie einige wichtige \u00dcberlegungen ber\u00fccksichtigen:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Thread-Pooling<\/strong>: Die Ausf\u00fchrung von geplanten Aufgaben erfolgt in einem eigenen Thread-Pool, den Spring verwaltet. Dies bedeutet, dass geplante Aufgaben parallel zu anderen Teilen Ihrer Anwendung ausgef\u00fchrt werden k\u00f6nnen. Stellen Sie sicher, dass Ihre geplanten Aufgaben threadsicher sind und keine Dateninkonsistenzen verursachen.<\/li>\n\n\n\n<li><strong>Performance<\/strong>: Das regelm\u00e4\u00dfige Ausf\u00fchren von geplanten Aufgaben kann die Leistung Ihrer Anwendung beeintr\u00e4chtigen, insbesondere wenn die Aufgaben ressourcenintensiv sind. Stellen Sie sicher, dass Ihre Aufgaben effizient sind und die Ressourcen Ihres Systems angemessen nutzen.<\/li>\n\n\n\n<li><strong>Fehlertoleranz<\/strong>: Wenn eine geplante Aufgabe fehlschl\u00e4gt, wird Spring standardm\u00e4\u00dfig keine Fehlerprotokollierung durchf\u00fchren oder die Aufgabe erneut ausf\u00fchren. Sie m\u00fcssen m\u00f6glicherweise eigene Mechanismen zur Fehlerprotokollierung und -behandlung implementieren, um sicherzustellen, dass Ihre geplanten Aufgaben robust sind.<\/li>\n\n\n\n<li><strong>Zeitzonen<\/strong>: Stellen Sie sicher, dass Sie die Zeitzonen richtig behandeln, insbesondere wenn Sie Cron-Ausdr\u00fccke verwenden. Die Standardzeitzonen k\u00f6nnen zu unerwartetem Verhalten f\u00fchren, wenn sie nicht ordnungsgem\u00e4\u00df konfiguriert sind.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Beispiel einer realen Anwendung<\/h2>\n\n\n\n<p>Um die Verwendung der @Scheduled-Annotation in einer realen Anwendung zu veranschaulichen, betrachten wir ein einfaches Beispiel: die Aktualisierung von Produktdaten in einem E-Commerce-System.<\/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\"><span class=\"hljs-keyword\">import<\/span> org.springframework.scheduling.annotation.Scheduled;\n<span class=\"hljs-keyword\">import<\/span> org.springframework.stereotype.Component;\n\n@Component\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ProductUpdater<\/span> <\/span>{\n\n    @Scheduled(cron = <span class=\"hljs-string\">\"0 0 2 * * ?\"<\/span>) <span class=\"hljs-comment\">\/\/ Diese Methode wird t\u00e4glich um 2 Uhr morgens ausgef\u00fchrt<\/span>\n    public <span class=\"hljs-keyword\">void<\/span> updateProductData() {\n        <span class=\"hljs-comment\">\/\/ Code zum Aktualisieren der Produktdaten von Lieferanten<\/span>\n        System.out.println(<span class=\"hljs-string\">\"Produktdaten werden aktualisiert...\"<\/span>);\n    }\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>updateProductData<\/code> t\u00e4glich um 2 Uhr morgens ausgef\u00fchrt, um die Produktdaten von Lieferanten zu aktualisieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Die @Scheduled-Annotation in Spring bietet eine einfache und leistungsstarke M\u00f6glichkeit, geplante Aufgaben in Ihrer Anwendung zu definieren und auszuf\u00fchren. Mit den verschiedenen Attributen und der M\u00f6glichkeit zur Verwendung von Cron-Ausdr\u00fccken k\u00f6nnen Sie Aufgaben pr\u00e4zise steuern und automatisieren.<\/p>\n\n\n\n<p>Es ist jedoch wichtig, die Auswirkungen von geplanten Aufgaben auf die Leistung, die Fehlertoleranz und die Zeitzonen zu ber\u00fccksichtigen, um sicherzustellen, dass Ihre Anwendung zuverl\u00e4ssig und effizient bleibt. Mit der richtigen Planung und Implementierung k\u00f6nnen Sie die @Scheduled-Annotation effektiv nutzen, um zeitgesteuerte Abl\u00e4ufe in Ihrer Spring-Anwendung zu realisieren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Spring Framework ist eine weit verbreitete Plattform f\u00fcr die Entwicklung von Java-Anwendungen, insbesondere f\u00fcr die Entwicklung von Enterprise-Anwendungen. Eine der vielen n\u00fctzlichen Funktionen, die Spring bietet, ist die M\u00f6glichkeit, geplante Aufgaben oder wiederkehrende Aufgaben in einer Anwendung zu definieren und auszuf\u00fchren. Dies wird durch die @Scheduled-Annotation erm\u00f6glicht, die Teil des Spring-Frameworks ist. In diesem [&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-136","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\/136","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=136"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/136\/revisions"}],"predecessor-version":[{"id":137,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/136\/revisions\/137"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}