web-dev-qa-db-ja.com

*と?の違い春に@Scheduled(cron = ".....")

私はタスクをスケジュールするためのSpring Bootの例( https://spring.io/guides/gs/scheduling-tasks/ )を見て、いくつかのドキュメント( https: //javahunter.wordpress.com/2011/05/05/cronscheduler-in-spring/ )そして、*と?ほとんど同じ意味で使用されます。

たとえば、行

@Scheduled(cron = "0 15 10 ? * *")

そして

@Scheduled(cron = "0 15 10 * * ?")

まったく同じことをします。 *と*の違いは何ですか?

26
Jordan

アスタリスクはすべての可能な値を表します。非特定の値には疑問符を使用する必要があります

*( "すべての値")-フィールド内のすべての値を選択するために使用されます。たとえば、分フィールドの「」は*「毎分」を意味します。

? (「特定の値なし」)-文字が許可されている2つのフィールドのいずれかで何かを指定する必要があるが、もう一方は指定できない場合に便利です。たとえば、月の特定の日(たとえば、10日)にトリガーを起動したいが、何の曜日かは気にしない場合は、曜日に「10」を入力します月のフィールド、および「?」曜日フィールド。詳細については、以下の例を参照してください。

チュートリアル からコピー

5
Jens

チュートリアルが古くなっています。記号_?_は、正確にが_*_と同じであることを意味します。 Spring 3.1.2.RELEASE以降、呼び出し階層は次のとおりです。

コンストラクタCronTrigger(String)は、コンストラクタCronSequenceGenerator(String)を呼び出し、コンストラクタparse(String)は、setDays(BitSet bits, String field, int max)を呼び出します。その実装は明確です。

_private void setDays(BitSet bits, String field, int max) {
    if (field.contains("?")) {
        field = "*";
    }
    setNumberHits(bits, field, 0, max);
}
_

したがって、_?_の場合、_*_になります。

31
Luchostein