私のアプリケーションは、プロパティファイルからいくつかのcronパターンをロードします。このような_@Scheduled
_アノテーションを使用しています:
@Scheduled(cron = "${config.cronExpression:0 0 11,23 * * *}")
ここで、いくつかのタスクを無効にしたいのですが、最も簡単な解決策は、実行されないcronパターンを入力することです。これを行うために、過去の特定の日にのみ実行されるcron式を使用することを考えました。ただし、残念ながら、Spring cron式では、過去の年または日付を追加することはできません。
決して実行されないパターンはありますか?
Javadocによると、Spring 5.1.0の時点で、 @Scheduled
アノテーションはcron式として「-」を受け入れてcronトリガーを無効にすることができます。
特別な値「-」は、無効なcronトリガーを示します。これは主に、$ {...}プレースホルダーによって解決される外部指定の値を対象としています。
Cron式の場合は、以下を使用してcronを2099で実行できます。
59 59 23 31 12 ? 2099
しかし、春のスケジューラーは入力として1年かかりません。これは私がそれを長期間延期することを発見したものです。以下はうるう年となる2月29日に実行されます。
0 0 0 29 2 ?
Spring 5.1.0より前(SpringBoot <2.1)でスタックしている場合、唯一のオプションは、たとえば@ConditionalOnProperty("my.scheduleproperty.active")
アノテーションを使用して、@Scheduled
メソッドでBean /サービスを完全に無効にすることです。プロパティを設定しない(またはfalseに設定する)