web-dev-qa-db-ja.com

SpringCronスケジューラーの「パターンの無効化」

私のアプリケーションは、プロパティファイルからいくつかのcronパターンをロードします。このような_@Scheduled_アノテーションを使用しています:

@Scheduled(cron = "${config.cronExpression:0 0 11,23 * * *}")

ここで、いくつかのタスクを無効にしたいのですが、最も簡単な解決策は、実行されないcronパターンを入力することです。これを行うために、過去の特定の日にのみ実行されるcron式を使用することを考えました。ただし、残念ながら、Spring cron式では、過去の年または日付を追加することはできません。

決して実行されないパターンはありますか?

14
eztam

Javadocによると、Spring 5.1.0の時点で、 @Scheduled アノテーションはcron式として「-」を受け入れてcronトリガーを無効にすることができます。

特別な値「-」は、無効なcronトリガーを示します。これは主に、$ {...}プレースホルダーによって解決される外部指定の値を対象としています。

17
M. Justin

Cron式の場合は、以下を使用してcronを2099で実行できます。

59 59 23 31 12 ? 2099

しかし、春のスケジューラーは入力として1年かかりません。これは私がそれを長期間延期することを発見したものです。以下はうるう年となる2月29日に実行されます。

0 0 0 29 2 ?
3
vsingh

Spring 5.1.0より前(SpringBoot <2.1)でスタックしている場合、唯一のオプションは、たとえば@ConditionalOnProperty("my.scheduleproperty.active")アノテーションを使用して、@ScheduledメソッドでBean /サービスを完全に無効にすることです。プロパティを設定しない(またはfalseに設定する)

1
icyerasor