Planification de l'exécution des tâches une seule fois à l'aide de l'espace de noms de la tâche Spring
Je suis la mise en place d'une des tâches planifiées régime au printemps, à l'aide de la tâche de l'espace de noms.
Je veux calendrier la plupart des tâches à feu, selon une expression cron, et certains de feu juste une fois, un délai après le démarrage, et plus jamais ensuite (c'est à dire ce paramètre repeatCount
à 0
sur un SimpleTriggerBean permettrait d'atteindre).
Est-il possible d'atteindre ce niveau dans la tâche de l'espace de noms, ou dois-je revenir à la définition de haricots pour mes déclencheurs?
source d'informationauteur Karl Johansson
Vous devez vous connecter pour publier un commentaire.
Si vous avez un coup d'oeil à la La tâche de l'espace de noms XSDvous verrez qu'il y a seulement trois différents types de configuration:
fixed-delay
fixed-rate
etcron
.Et si vous regardez le code source de ScheduledTasksBeanDefinitionParservous verrez que pas plus d'un de ces valeurs sont évaluées. Voici la partie pertinente:
Il n'existe aucun moyen de combiner ces attributs. En bref: l'espace de noms ne vous y arrivez.
Si vous n'avez pas besoin d'un retard initial, vous pouvez le faire fonctionner "juste une fois" au démarrage comme suit:
(Bien sûr, si vous pensez que votre code va s'exécuter pour plus de 3E8 ansvous pouvez avoir besoin d'une approche différente...)
Si vous avez besoin d'un délai initial, vous pouvez le configurer comme suit (je suis en essais avec le Printemps 3.1.1) - ce ne nécessite pas de dépendances supplémentaires et vous n'avez pas à écrire votre propre déclencheur, mais vous n'avez pas à configurer le
PeriodicTrigger
fournis par Printemps:Printemps 3.2 apparaît à l'appui de la "initial-retard" attribut directement, mais je n'ai pas testé; je suppose cela fonctionne:
Mon travail exemple:
Cela fonctionne et c'est beaucoup plus facile que les autres réponses.