7
votes

Spring SchedultedTask - Start / Stop Support?

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?

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.

Si cela n'est pas possible, toute alternative à injecter des variables de ressort à un thread?


1 commentaires

Vous pouvez trouver comment Arrêtez, démarrez et liste Tâches planifiées.


4 Réponses :


1
votes

avoir la méthode @schedulled Recherchez une variable détenue dans Application Etat ou SERVLECONTEXT 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.

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 @Async et appelez cette méthode à partir de votre contrôleur afin qu'elle fonctionne dans son propre thread.


4 commentaires

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 ()



4
votes

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 - pour le démarrage de la méthode planifiée avec un taux fixe 5000 MS
http: localhost: 8080 / stop - pour arrêter la méthode planifiée xxx


0 commentaires

3
votes

Arrêt des haricots enregistrés @schedulés n'est pas une fonctionnalité standard car l'accès à eux est privé dans le org.springframework.scheduling.annotation.scheduledannotationBeanpostProcesseur . .

Si vous avez besoin de gérer le temps, vous devez les enregistrer par programme ( trusgertask ): voir la documentation sur org.springframework.scheduling.annotation.schedulingconfigurier . Dans le type org.springframework.scheduling.config.triggertask Il y a la méthode qui renvoie le type de org.springframework.scheduling.trigger . Là, vous pouvez gérer le prochain temps d'exécution.

trusgertask S pourrait être des haricots en cas d'enregistrement programmatique.


1 commentaires

Wow! Sauvé ma journée!



0
votes

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 et exécuter la méthode ont @schedulled annotation. Méthode Continuer renvoie un nouvel objet ScheduledTask OBJET qui peut être suspendu. Veuillez noter que postprocessbeforetruction supprime les tâches planifiées "suspendues" de la carte interne, nous devons donc créer une nouvelle en appelant post-processadinitialisation xxx


0 commentaires