Il est tout à fait possible d'utiliser l'API Timer de Java afin de gérer une plannification de tâches avec Spring.
Pour cela, la première étape est de créer un Bean qui possèdera une méthode qui représentera la tâche en question :
public class JobTest {
public void lancementProgramme (){
System.out.println (" Lancement " );
}
}
|
Ce bean doit bien evidemment être défini dans le contexte Spring :
< bean id = " tachePlannifie " class = " com.developpez.spring.Tache " >
< / bean >
|
Ce Bean peut être configurer via Spring comme n'importe quel Bean afin d'avoir accès par exemple à une base de données, ou autre. Notons par la même occasion que cet objet est un simple POJO et n'est aucunement lié à un framework spécifique.
Ce Bean n'hérite d'aucune classe, n'implémente aucune interface et il n'y a pas de standard défini en ce qui concerne le nom de la méthode qui représente la tâche.
L'étape suivant est de définir un Bean qui va justement faire la liaison entre un gestionnaire de tâches et notre précedent Bean afin de spécifier quelle méthode doit justement être utilisée :
< bean id = " tachePlannifieTask " class = " org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean " >
< property name = " targetObject " > < ref bean = " tachePlannifie " / > < / property >
< property name = " targetMethod " > < value > lancementProgramme< / value > < / property >
< / bean >
|
Maintenant qu'on a définit "Quoi faire", il est nécessaire de spécifier "Quand le faire". Pour cela, il faut utiliser une classe ScheduledTimerTask :
< bean id = " tachePlannifieScheduledTask " class = " org.springframework.scheduling.timer.ScheduledTimerTask " >
< property name = " delay " value = " 60000 " / >
< property name = " period " value = " 600000 " / >
< property name = " timerTask " >
< ref bean = " tachePlannifieTask " / >
< / property >
< / bean >
|
Ici, une minutes d'attente ( 60 000 millisecondes ) avant le premièr lancement sera réalisée, et ensuite la tâche sera relancée toutes les 10 minutes ( 600 000 millisecondes ).
Une fois que le quand et le quoi sont défini, il est nécessaire de provoquer le lancement de cette tâche, et cela est géré par le TimerFactoryBean :
< bean id = " timerFactory " class = " org.springframework.scheduling.timer.TimerFactoryBean " >
< property name = " scheduledTimerTasks " >
< list >
< ref bean = " tachePlannifieScheduledTask " / >
< / list >
< / property >
< / bean >
|
Cette fabrique possède une propriété scheduledTimerTasks de type liste de ScheduledTimerTask. Elle permet donc de gérer plusieurs tâches plannifiées.
|