Y a-t-il un moyen de démarrer ou d'arrêter une tâche planifiée à l'aide des tâches planifiées du ressort initialisé à l'aide d'un fichier de contexte ou d'une annotation @schedulée? P>
Je voudrais démarrer la tâche si nécessaire et l'arrêter lorsque la tâche n'est plus nécessaire pour être exécutée. P>
Si cela n'est pas possible, toute alternative à injecter des variables de ressort à un thread? p>
4 Réponses :
avoir la méthode code> @schedulled code> Recherchez une variable détenue dans Si vous souhaitez également pouvoir déclencher la tâche à volonté, référez la méthode de la tâche à partir d'un contrôleur; De cette façon, vous pouvez le tirer à volonté. De plus, si c'est une tâche à exécution plus longue, créez une deuxième méthode annotée Application CODE> Etat ou SERVLECONTEXT CODE> ou d'une valeur stockée dans la DB. Si la valeur est vraie, procédez à la tâche; Si faux, ne commencez pas. Cette configuration contrôlera la course planifiée. P>
@Async code> et appelez cette méthode à partir de votre contrôleur afin qu'elle fonctionne dans son propre thread. P>
Lorsque vous dites "ne démarrez pas", cela ne peut pas être fait, le printemps exécutera la fonction toutes les x secondes. Il n'y a pas de mécanisme "de départ".
Je voulais dire quitter la méthode, ou faire quelque chose d'autre afin que la fonction d'entreprise de la méthode ne soit pas exécutée.
Eh bien, je pense que la méthode continuera à exécuter la fonction même si elle sort. J'espère qu'il y a une meilleure solution.
Je cherche aussi à avoir une main sur quelque chose d'appartien à TimerASTASK # Annuler ()
Voici un exemple de démarrage / arrêt d'une méthode planifiée dans la chaussure à ressort. Vous pouvez utiliser de telles API:
http: localhost: 8080 / Démarrer strong> - pour le démarrage de la méthode planifiée avec un taux fixe 5000 MS
http: localhost: 8080 / stop fort> - pour arrêter la méthode planifiée
Arrêt des haricots enregistrés @schedulés n'est pas une fonctionnalité standard car l'accès à eux est privé dans le Si vous avez besoin de gérer le temps, vous devez les enregistrer par programme ( org.springframework.scheduling.annotation.scheduledannotationBeanpostProcesseur code>. p>.
trusgertask code>): voir la documentation sur org.springframework.scheduling.annotation.schedulingconfigurier code>. Dans le type org.springframework.scheduling.config.triggertask code> Il y a la méthode qui renvoie le type de org.springframework.scheduling.trigger code>. Là, vous pouvez gérer le prochain temps d'exécution. P>
trusgertask code> S pourrait être des haricots en cas d'enregistrement programmatique. P>
Wow! Sauvé ma journée!
Il y a un moyen assez simple de le faire (démarche de printemps 2.3.12.Release). J'ai une règle que toutes mes classes de travail doivent mettre en œuvre exécutable code> et exécuter la méthode ont @schedulled code> annotation. Méthode Continuer CODE> renvoie un nouvel objet ScheduledTask CODE> OBJET qui peut être suspendu. Veuillez noter que postprocessbeforetruction code> supprime les tâches planifiées "suspendues" de la carte interne, nous devons donc créer une nouvelle en appelant post-processadinitialisation code>
Vous pouvez trouver comment Arrêtez, démarrez et liste Tâches planifiées.