J'ai fait une classe avec une méthode à l'intérieur qui doit fonctionner toutes les 5 secondes. Ils ressemblent à ceci: Le problème est que cela s'appelle une seule fois au début et plus jamais. P> p>
4 Réponses :
Je viens de créer une application de démarrage de printemps à partir du printemps Initializr et cela fonctionne parfaitement. Vous pouvez vérifier le code suivant: dépendances: p> sortie: p> Mise à jour:
Il fonctionne également avec configuration séparée: p>
Les autres réponses à cette question indiquent que, en général, le @schedulled code> fonctionne. Mais il a quelques limitations - un tel intervalle de temps pourrait être donné que des millisecondes uniquement ou comme une expression cron. Et ce n'est pas toujours convivial. J'ai opté pour écrire mon propre planificateur personnalisé. Il nécessite un peu plus de travail que d'utiliser une annotation, mais fournit plus de flexibilité, telle que l'ajout de plusieurs instances de coureur, en choisissant un certain nombre de threads et fournir un intervalle de temps dans un format lisible par l'homme tel que "5m" pendant 5 minutes ou "3h" Pendant 3 heures, etc. Vous pouvez vérifier l'explication détaillée ici . Je l'ai trouvé plus pratique d'utiliser que le ressort fourni
@schedulled code> fonction. La bibliothèque est disponible en tant que artefact maven a > (y compris le code source et Javadoc) et sur Github (aussi avec Code source et javadoc) également dans le code source, il existe un exemple de travail de tâches planifiées en cours d'exécution (voir package "com.mgnt.lifecycle.management.backgroundRunner.exemple"). P>
J'ai découvert que dans le projet, il existe une autre tâche planifiée qui dure si longtemps qu'elle bloque tous les autres. Maintenant, j'essaie de savoir pourquoi il est si lent ... p>
Créez une classe pour des configurations et créez une autre classe pour le planificateur.
N'oubliez pas de marquer la classe du planificateur comme composant de ressort à l'aide de @Component
avec botte à ressort
Essayez d'ajouter
@enablesCHEDULING CODE> sur le fichier code> Main code> Spring boot java et supprimez de
myClass code>
Une chose à faire est que vous ne lisez jamais une exception d'aucune sorte d'évacuation de la méthode planifiée - cela arrêtera votre planificateur.