2015-05-20 3 views
18

Я смотрел пример Spring Boot для планирования задач (https://spring.io/guides/gs/scheduling-tasks/) и прочитал некоторую документацию (https://javahunter.wordpress.com/2011/05/05/cronscheduler-in-spring/), и я вижу, что * и? используются почти взаимозаменяемо.Разница между * и? в Spring @Scheduled (cron = ".....")

Например, линия

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

и

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

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

ответ

3

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

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

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

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

+0

Извините, но нет :(. '?' Это точно точно так же, как '*' https://stackoverflow.com/questions/30341067/difference-between-and-in-spring-scheduledcron/30789834 # 30789834 – Luchostein

+0

Так как это реализовано :(. Грустно, но это правда: https://stackoverflow.com/questions/30341067/difference-between-and-in-spring-scheduledcron/30341102 – Luchostein

+0

@Luchostein это то же самое для имплантации. Но в случае документации это другое. – Jens

19

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

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

+0

Вы уверены? '?' все еще упоминается в документации http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/support/CronSequenceGenerator.html – user1766169

+0

Это проблема. В документации так говорится, но кода нет. – Luchostein

+1

Это не ошибка, реализация сделки с * и? те же, но с точки зрения намерения конфигурации они немного отличаются. –

Смежные вопросы