Comment créer des processus d'arrière-plan au printemps webapp?
Je veux exécuter des processus d'arrière-plan en parallèle avec mon spring-mvc web-application. J'ai besoin d'un moyen de démarrer automatiquement sur le contexte de chargement. Processus d'arrière-plan est une classe qui implémente Runnable
.
Est-spring-mvc a quelques équipements pour qui?
OriginalL'auteur Vladimir | 2009-12-21
Vous devez vous connecter pour publier un commentaire.
Le printemps est une tâche globale d'exécution de cadre. Voir la la partie pertinente de la documentation.
Je suggère d'avoir un Printemps de haricots dans votre contexte, qui, lorsqu'il est initialisé, soumet votre arrière-plan
Runnable
à unSimpleAsyncTaskExecutor
bean. C'est l'approche la plus simple, que vous pouvez faire de plus en plus complexes et capables que vous voyez l'ajustement.OriginalL'auteur skaffman
Je voudrais aller de l'avant et de regarder l'ordonnancement des tâches de la documentation liée par skaffman, mais il y a aussi un moyen plus simple si tout ce que vous voulez vraiment faire est de tirer un thread d'arrière-plan à l'initialisation du contexte de temps.
C'est une bonne question, l'arrêt peut être difficile. Idéalement, vous aimeriez faire un
interrupt()
suivie par unjoin()
. Malheureusement, je ne crois pas que vous pouvez avoir deuxdestroy-method
s, donc le mieux que vous pourriez faire est dedestroy-method="interrupt"
. Pour un bon comportement à l'arrêt, je recommande la mise en œuvre de Cycle de vie ou SmartLifecycleMise en œuvre d'un printemps de l'interface n'est pas dans l'esprit de l'original de mes réponse, bien sûr.
Le printemps offre désormais la
@Async
annotation pour vous y aider. voir la documentation ici: docs.printemps.io/printemps/docs/en cours/printemps-cadre de la référence/...OriginalL'auteur washley
Comme une autre option, on peut maintenant utiliser le Printemps les capacités de planification. Avec le Printemps, 3 ou plus, il a un cron comme annotation qui permet de planifier des tâches à exécuter avec une simple annotation d'une méthode. Il est également respectueux avec permettra à l'autowiring.
Cet exemple planifie une tâche pour toutes les 2 minutes avec une première attente (au démarrage) de 30 secondes. La prochaine tâche sera exécutée à 2 minutes après la méthode est terminée! Si vous souhaitez l'exécuter toutes les 2 minutes exactement, l'utilisation fixedInterval à la place.
Assurez-vous d'ajouter @EnableAsync
@EnableScheduling à votre classe d'Application pour activer cette fonctionnalité.
OriginalL'auteur Lucas Holt