J'ai eu ce problème:Comment convertir une chaîne CRON en ScheduleExpression en Java?
J'ai un champ de texte,
Il devrait y avoir une expression de CRON écrit, et plus tard sauvé.
Maintenant, je besoin d'une méthode pour convertir la chaîne CRON (voici quelques exemples au hasard: http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/crontrigger.html) java ScheduleExpression (http://docs.oracle.com/javaee/6/api/javax/ejb/ScheduleExpression.html)
Mais, je ne sais pas comment le faire ...
J'ai un système d'exécution basé sur le minuteur, qui fonctionne seulement sur des jours, des semaines et des mois, mais maintenant je dois implémenter les modèles CRON, afin que les exécutions puissent être exécutées sur une période de temps spécifique ...
un petit code, juste pour me soutenir:
@Resource
private TimerService timerService;
@Timeout
public void execute(Timer timer) {
Script s = (Script) timer.getInfo();
execute(s, true);
System.out.println("Timer Service : " + s.getScriptId());
System.out.println("Current Time : " + new Date());
System.out.println("Next Timeout : " + timer.getNextTimeout());
System.out.println("Time Remaining : " + timer.getTimeRemaining());
System.out.println("____________________________________________");
Date today = new Date();
if (s.getTimerSetup().getEndDate() <= today.getTime()) {
stopTimer(s);
}
}
@Override
public void startTimer(Script s) {
if (s.getTimerSetup().getTimerRepeat().equals("0")) {
return;
}
s.setStatus(true);
em.merge(s);
em.flush();
if (s.getTimerSetup().getEndDate() > System.currentTimeMillis()) {
long timeOut = 1L;
String timerRepeat = s.getTimerSetup().getTimerRepeat();
if (timerRepeat.equals("1")) {// day
timeOut = 1000L * 60L * 60L * 24L;
} else if (timerRepeat.equals("2")) {// week
timeOut = 1000L * 60L * 60L * 24L * 7L;
} else if (timerRepeat.equals("3")) {// month
timeOut = 1000L * 60L * 60L * 24L * 30L;
} else {
return; //Here is the part where the cron string is detected
}
long initialTimeOut = s.getTimerSetup().getStartDate() - System.currentTimeMillis();
if (initialTimeOut < 0) {
long initCheck = initialTimeOut * -1;
while (initCheck > timeOut) {
initCheck -= timeOut;
}
initialTimeOut = timeOut - initCheck;
}
Boolean found = false;
if (timerService.getAllTimers().size() == 0) {
System.out.println("Started the timer for the script: " + s.getFileName());
timerService.createTimer(initialTimeOut, timeOut, s);
} else {
for (Timer timer : timerService.getAllTimers()) {
if (((Script) timer.getInfo()).getScriptId() == s.getScriptId()) {
System.out.println("This script's timer was already started!");
found = true;
}
}
if (!found) {
System.out.println("Started the timer for the script: " + s.getFileName());
timerService.createTimer(initialTimeOut, timeOut, s);
found = true;
}
}
} else {
System.out.println("The script's end date has expired");
}
}
J'ai marqué l'endroit où la chaîne cron est détectée (dans l'instruction if) Et j'ai besoin maintenant de transformer la chaîne en ScheduleExpression.
Et ensuite de l'exécuter avec les minuteurs normaux. (mais cela vient plus tard :))
S'il vous plaît aider. Merci d'avance.
pourquoi ne pas utiliser [quartz] (http://www.quartz-scheduler.org/) – Frank
Parce que je ne sais pas ce :) – newbie
vous devriez en apprendre davantage sur le Web app et quartz plus tard! – Frank