web-dev-qa-db-fra.com

Différence entre * et? au printemps @Programmé (cron = ".....")

J'ai regardé l'exemple de Spring Boot pour planifier des tâches ( https://spring.io/guides/gs/scheduling-tasks/ ) et j'ai lu une partie de la documentation ( https: //javahunter.wordpress.com/2011/05/05/cronscheduler-in-spring/ ) et je vois cela * et? sont utilisés de manière presque interchangeable.

Par exemple, la ligne

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

et

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

faites exactement la même chose. Alors, quelle est la différence entre * et?

26
Jordan

astérix représente toutes les valeurs possibles. les points d'interrogation doivent être utilisés pour une valeur non spécifique

* ("toutes les valeurs") - utilisé pour sélectionner toutes les valeurs dans un champ. Par exemple, "" dans le champ des minutes signifie * "toutes les minutes".

? ("pas de valeur spécifique") - utile lorsque vous devez spécifier quelque chose dans l'un des deux champs dans lesquels le caractère est autorisé, mais pas dans l'autre. Par exemple, si je veux que ma gâchette se déclenche un jour particulier du mois (disons le 10), mais peu importe le jour de la semaine qui se trouve, je mettrais "10" dans le jour de champ de mois et "?" dans le champ jour de la semaine. Voir les exemples ci-dessous pour des éclaircissements.

Copié à partir du tutoriel

5
Jens

Le tutoriel est obsolète. Le symbole ? Signifie exactement identique à *. Depuis Spring 3.1.2.RELEASE, la hiérarchie des appels est la suivante:

Le constructeur CronTrigger(String) appelle le constructeur CronSequenceGenerator(String) qui appelle parse(String) qui appelle setDays(BitSet bits, String field, int max). Sa mise en œuvre est claire:

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

Donc, si ?, Alors *.

31
Luchostein