Подтвердить что ты не робот

Разница между * и? в Spring @Scheduled (cron = "....." )

Я рассматривал пример загрузки Spring для планирования задач (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 * * ?")

выполните то же самое. Так в чем разница между * и?

4b9b3361

Ответ 1

asterix обозначает все возможные значения. вопросительные знаки должны использоваться для нестандартного значения

* ( "все значения" ) - используется для выбора всех значений в поле. Например, "в минутном поле означает *" каждую минуту ".

? (" нет конкретного значения ") - полезно, когда вам нужно указать что-то в одно из двух полей, в которых допускается символ, но не Другие. Например, если я хочу, чтобы мой триггер срабатывал в определенный день месяца (скажем, 10-го), но неважно, в какой день недели, что случается, я бы поставил" 10 "в поле" день месяца "и"?" в день недели. Для пояснения см. Примеры ниже.

Скопировано из tutorial

Ответ 2

Учебник устарел. Символ ? означает точно, чем *. Начиная с 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);
}

Итак, если ?, то *.