Comment créer Objet de Déclenchement par programmation?
Je suis à l'aide de Printemps Planificateur quartz, mais je ne suis pas à l'aide d'un fichier XML. Je veux créer l'ensemble de la configuration par programmation.
J'ai écrit le code suivant.
package com.eaportal.service.impl;
import java.text.ParseException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.quartz.JobDetail;
import org.springframework.scheduling.SchedulingException;
import org.springframework.scheduling.quartz.CronTriggerBean;
import org.springframework.scheduling.quartz.JobDetailBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import com.eaportal.service.intfc.AuctionWinnerService;
public class NormalAuctionWinnerServiceImpl1 implements AuctionWinnerService {
@SuppressWarnings("deprecation")
public void declareWinner(int auctionId, Map<String, Object> parameterMap) {
System.out.println("INSIDE DECLARE WINNER METHOD.");
/** STEP 1 : INSTANTIATE TASK CLASS **/
NormalAuctionWinnerTask1 runMeTask = new NormalAuctionWinnerTask1();
System.out.println("FINISHED STEP 1");
/** STEP 2 : INSTANTIATE JOB DETAIL CLASS AND SET ITS PROPERTIES **/
Map<String,Object> jobDataAsMap = new HashMap<String,Object>();
jobDataAsMap.put("runMeTask",runMeTask);
JobDetailBean jdb = new JobDetailBean();
jdb.setJobClass(NormalAuctionWinnerTask1.class);
jdb.setJobDataAsMap(jobDataAsMap);
System.out.println("FINISHED STEP 2");
/** STEP 3 : INSTANTIATE CRON TRIGGER AND SET ITS PROPERTIES **/
CronTriggerBean ctb = new CronTriggerBean();
Date d1 = new Date();
Date d2 = new Date();
d2.setMinutes(d1.getMinutes()+10);
ctb.setStartTime(d1);
ctb.setEndTime(d2);
ctb.setJobDetail(jdb);
try {
ctb.setCronExpression("59 * * * * ? *");
} catch (ParseException e) {
e.printStackTrace();
}
/** STEP 4 : INSTANTIATE SCHEDULER FACTORY BEAN AND SET ITS PROPERTIES **/
SchedulerFactoryBean sfb = new SchedulerFactoryBean();
sfb.setJobDetails(new JobDetail[]{jdb});
try {
sfb.start();
} catch (SchedulingException e) {
e.printStackTrace();
}
}
}
Le code fonctionne sauf le trigger ne se déclenche coz je n'ai pas défini.
Ici, le problème est dans la configuration XML, nous avons les "déclencheurs" de la propriété de schedulerFactoryBean et nous utilisons liste pour configurer les déclencheurs.
Mais je ne suis pas en mesure de définir la propriété même de la programmation.
Il y a un setTriggers méthode dans SchedulerFactoryBean qui accepte un tableau de Déclencher
mais comment créer c'est le problème.
Je suis sur il pour les 4 dernières heures toujours pas de signe de succès.
Quelqu'un peut m'aider ici?
Grâce
Il y a bien une petite différence. Celui-ci utilise du printemps de soutien pour le Quartz et l'autre ne l'est pas. J'ai essayé ta suggestion Ralph yest pour les autres ques, mais il n'y a pas d'erreur dans le fichier journal. Donc je suis passé à Ressort du support, mais maintenant, je suis occupé avec celui-ci. Pouvez-vous me dire si ma démarche est correcte pour le code ci-dessus? Si vous pouvez me dire comment faire pour définir les déclencheurs de la propriété qui sera grande.
OriginalL'auteur Thanos | 2011-01-27
Vous devez vous connecter pour publier un commentaire.
J'ai été capable de le faire avec le Printemps de la Planification-Cadre avec succès.
Je comprends que c'est un très vieux post, mais comme le contenu de cette rubrique est assez rare, il devrait y avoir une meilleure idée de la mettre ici.
Le problème majeur dans le code du premier post, c'est que le
afterPropertiesSet()
n'a pas été invoqué à la fois sur lesJobDetail
objet ainsi que laCronTrigger
objet. LeafterProperties
fonction effectue un traitement sur les valeurs saisies avant le cron est prêt à être exécuté.Aussi, j'ai utilisé le
MethodInvokingJobDetailFactoryBean
au lieu de l'ordinairejobDetail
objet qu'il me donne plus de flexibilité sur la fonction d'être appelé par cron, dans la classe donnée.Voici mon code:
afterProperties()
est important et il peut être compris à partir de laafterProperties
mise en œuvre deSchedulerFactoryBean
qui est comme suit:Comme vous pouvez le remarquer, toutes les tâches telles que l'obtention du planificateur et de l'inscription de l'emploi avec les déclencheurs est effectuée dans le cadre de cette fonction.
OriginalL'auteur Abhishek Jain
Le principal problème qui doit être, que vous avez besoin pour planifier le travail:
Et je ne sais pas comment c'est pour le Printemps Quarz Haricots, mais c'est normal Quarz Emplois et de Déclenchement doit avoir un nom et un groupe! Et peut vous avez besoin pour commencer le planificateur:
scheduler.start();
J'ai modifié ton code un peu qu'il fonctionne sans ressort, et partent tous les trucs qui n'est pas nécessaire, pour démontrer comment cela fonctionne:
package test;
OriginalL'auteur Ralph