Je voudrais essayer d'utiliser l'annotation @Schedule de la manière suivante:
public class MyTestServlet extends HttpServlet {
private static JcanLogger LOG = JcanLoggerFactory.getLogger(ServiceTestServlet.class);
@EJB CronService cronService;
public void service(HttpServletRequest req, HttpServletResponse resp) throws .... {
....
cronService.iLive();
}
---
@Local // because the ejb is in a servlet (there is no other jvm)
public interface CronService {
public void iLive();
public void runsEveryMinute();
}
---
@Singleton
public class CronServiceBean implements CronService {
private static final JcanLogger LOG = JcanLoggerFactory.getLogger(CronServiceBean.class);
@Schedule(minute="*")
public void runsEveryMinute() {
LOG.info(" runs EveryMinute ");
}
public void iLive() {
LOG.info("iLive");
}
---
LOG
...
CronServiceBean:34 ] iLive
Sur la base du journal, le CronService fonctionne bien, mais la tâche planifiée "runsEveryMinute" ne fonctionne pas.
Comment cela devrait-il fonctionner en utilisant une tâche planifiée EJB?
Selon le Javadoc pour le @Schedule
annotation, les valeurs par défaut sont:
*
pour tous les champs sauf l'heure, la minute et la seconde; et0
pour les heures, les minutes et les secondes, par défaut.En spécifiant minute="*"
et laissant l'heure à sa valeur par défaut de 0
, il demande que le minuteur s'exécute toutes les minutes après minuit pendant une heure (c.-à-d. 00:00, 00:01, 00:02, ..., 00:59), puis ne recommence pas avant le lendemain. Utilisez plutôt:
@Schedule(hour="*", minute="*")
Pour exécuter toutes les quelques secondes (par exemple, 10
secondes), vous pouvez utiliser une syntaxe semblable à cron :
@Schedule(hour = "*", minute = "*", second = "*/10", persistent = false)
Par défaut, le planificateur conserve les événements. Réglage persistent = false
les empêchera de s'accumuler avec le temps, si vous le souhaitez.
Veuillez trouver les détails suivants pour la configuration du planificateur.
(1) Pour exécuter toutes les 1 min
@Schedule(hour = "*", minute = "*/1", persistent = false)
(2) Pour exécuter toutes les 5 minutes
@Schedule(hour = "*", minute = "*/5", persistent = false)
(3) Pour exécuter toutes les 30 secondes
@Schedule(hour = "*", minute = "*", second = "*/30", persistent = false)
(4) Pour courir tous les jours à 6h00
@Schedule(hour = "6", minute = "0", second = "0", persistent = false)
(5) Pour fonctionner tous les vendredis à 14h00
@Schedule(dayOfWeek = "Fri", hour = "14", persistent = false)
(6) Pour courir le premier jour de chaque mois à 5h00
@Schedule(dayOfMonth="1", hour = "5", persistent = false)
J'espère que ces informations vous aideront à configurer le planificateur selon vos besoins.