Im Spring -Framework kann die Timing -Aufgabe über @Schedule implementiert werden. Durch die von der Attributbeschreibung von Cron beschriebenen Regeln nennt der Frühling diese Methode.
Spring hat Timing -Aufgaben einfach und grob implementiert, warum Quarz verwenden?
Wenn Sie jetzt viele zeitgesteuerte Aufgaben haben, sind die Regeln beispielsweise unterschiedlich:
Abhängigkeit von Maven
<De vorhöhe> <gruppe> org.quartz-Planer </GroupId> <artifactId> quarz </artifactId> <version> 2.2.1 </Version> </abhängig> <abhängigkeit> <GroupID> org.quartz-Planer </Groupid> <artifactid> quarkz-Jobs </artifactid> </artifactId> </artifactid> </artifactid> </artifactid> </ussion> </artifactid> </ussion> </artifactId> </artifactid> </artifactId> </artifact-
Das Folgende ist der Quellcode des Bootdo Open Source Learning Frameworks
Ich habe nicht alle Felder benutzt, die Idee ist, zuerst die DB abzufragen.
In die folgenden zwei Objekte einkapseln
Wenn die Auslöserbedingung erfüllt ist, wird die Klasse basierend auf der festgelegten BeanClass gefunden (org.quartz.job muss implementiert werden). Zu diesem Zeitpunkt können die Daten im JobDetailer abgerufen und die spezifische Geschäftslogik ausgeführt werden.
@ComponentPublic Class WelcomeJob implementiert Job {@Override public void execute (JobExecutionContext arg0) löscht JobExecutionException {// Ihre Geschäftslogik}} ausTabellenstruktur
CREATE TABLE `sys_task` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `cronExpression` varchar(255) DEFAULT NULL COMMENT 'cron expression', `methodName` varchar(255) DEFAULT NULL COMMENT 'The method name of the task call', `isConcurrent` varchar(255) DEFAULT NULL COMMENT 'Is the task stateful', `description` varchar (255) Standard -Null -Kommentar 'Task Beschreibung', "UpdateBy` varchar (64) Standardnull -Kommentar 'Updator'," Beanclass` varchar (255) Standardnull -Kommentar ', welcher Klasse "Aufgabe", "Jobstatus", "Task -Coup", "tob -tat", "varchar" erstellt "erstellt". varchar (255) Standard -Null -Kommentar 'Task Gruppierung "," Aktualisiertes Datentime -Standard -Null -Kommentar "Update Time", "createBy` varchar (64) Standardnull -Kommentar' Creator", "SpringBean" varchar (255) Standardnull -Null -Kommentar "Spring Bean", "Jobname" varchar (255). Auto_increment = 3 Standard charSet = utf8 row_format = compact;
Konfigurationsklasse
Import Java.io.ioException; import Java.util.properties; import org.quartz.scheduler; import org.springframework.bean.factory.annotation.autowired; org.springframework.context.annotation.bean; import org.springframework.context.annotation com.txgl.common.quartz.factory.jobfactory; @ConfigurationPublic Class QuartzConfigration {@autowired JobFactory JobFactory; @Bean Public SchedulerFactoryBean SchedulerFactoryBean () {SchedulerFactoryBean SchedulerFactoryBean = new SchedulerFactoryBean (); try {planeLerFactoryBean.setoverwriteExistingJobs (true); SchedulerFactoryBean.setQuartzProperties (QuartzProperties ()); SchedulerFactoryBean.setjobfactory (JobFactory); } catch (ioException e) {e.printstacktrace (); } return SchedulerFactoryBean; } // quartz.Properties @Bean Public Properties QuartzProperties () löscht ioException {PropertiesFactoryBean PropertiesFactoryBean = New PropertiesFactoryBean (); PropertiesFactoryBean.setLocation (neue classpatResource ("/config/quartz.properties")); PropertiesFactoryBean.afterProperTieStieSet (); Return PropertiesFactoryBean.getObject (); } // Schedule @Bean (name = "Scheduler") public Scheduler Scheduler () {return SchedulerFactoryBean (). GetScheduler (); }}Der Code von QuartzManager ist der Schlüssel, um auf Aufgaben zu arbeiten, indem Scheduler injiziert wird
Java.util.ArrayList; import Java.util.List; import Java.util.set; import org.apache.log4j.logger; org.quartz.job; import org.quartz.jobbuilder; import org.quartz.jobdetail; import org.quartz.jobexecutioncontext; org.quartz.triggerbuilder; import org.quartz.triggerKey; import org.quartz.impl.matchers.groupMatcher; org.springframework.Scheduling.quartz.SchedulerFactoryBean; import org.springframework.stereotype.Service; import org.springframework com.bootdo.common.quartz.factory. *; import com.bootdo.common.utils.springContextHolder; // Private SchedulerFactoryBean SchedulerFactoryBean // = SpringContextHolder.getbean (SchedulerFactoryBean.class); // @autowired // @qualifier ("SchedulerFactoryBean") // private SchedulerFactoryBean SchedulerFactoryBean; @Autowired Private Scheduler Scheduler; / ** * Aufgabe hinzufügen * * @param planjob * @throws enderException */ public void addjob (planjob Job) {try {// eine Jobdetail -Instanz erstellen, die Job -Implementierungsklasse binden // Geben Sie den Namen des Jobs an, den Namen der Gruppe, und binden Sie die Jobklasse <? erweitert Job> JobClass = (Klasse <? Erweitert Job>) (class.Forname (job.getBeanClass ()). newInstance () .getClass ()); JobDetail JobDetail = Jobbuilder.newjob (JobClass) .WithIdential (Job.getJobName (), Job.getJobGroup () // Aufgabenname und Gruppenformular des Taskschlüssels .build (); // Definieren Sie die Versand -Trigger -Regel // Verwenden Sie die Corntrigger -Regel Trigger Trigger = TriggerBuilder.Newtrigger (). Mit Identität (Job.GetjobName (), Job.getJobGroup () // Trigger -Schlüssel .Startat (DateBuilder.Futuredate (1, IntervalUnit.Second.second.Second)))))) .withSchedule (cronSchedulebuilder.ConSchedule (Job.GetCronexpression ())). startNow (). Build (); // Registrieren Sie den Job und Trigger im Task Scheduler.Schedulejob (JobDetail, Trigger); // starten if (! Planler.isshutdown ()) {{Scheduler.start (); }} catch (Ausnahme e) {e.printstacktrace (); }} // public void addjob (planjob Job) löscht SchedulerException {// if (Job == null ||! planjob.status_running.equals (Job.getJOBStatus ()) {// return; //} /////. Triggerkey = Triggerkey.TiggerKey (Tiob.Tiggerkey () (Jobjobname (),),, Job.GetJobGroup ()); //// Crontrigger Trigger = (Crontrigger) ender.gettrigger (TriggerKey); //// // if (null == Trigger) {// Klasse <? erweitert Job> clazz = planjob.concurrent_is.equals (Job.getisconcurrent ()) //? Quartzjobfactory.class //: quartzjobfactoryDisallowConcurrentexecution.class; //// Jobdetail JobDetail = Jobbuilder.Newjob (Clazz) .withIdentity (Job.getjobname (), job.getjobgroup (). Build (); ////////////////////////////////////////. Jobdetail.getjobdatamap (). .withSchedule (planbuilder) .build (); //// planler.schsplantejob (Jobdetail, Trigger); //} else {// // Trigger existiert bereits die entsprechenden Zeiteinstellungen ///// Cronchedulebuilder planbuilder = croncheduleBuilder.cronedul (cronedulbuilder.cronschonten/cronedule (cronedul./cronedule Trigger nach dem neuen Cronexpression -Ausdruck //// trigger = Trigger.Gettriggerbuilder (). Mit Identität (TriggerKey) .Withschoner (planbuilder) .build (); //// // den Job nach dem neuen Trigger //// planer. Tasks * * @return * @throws SchedulerException */ publiclist <Plojob> getAlljob () löscht SchedulerException {GroupMatcher <jobKey> Matcher = GroupMatcher.anyjobGroup (); Set <jobKey> jobkeys = ender.getjobkeys (Match); LIST <Pedplatonjob> joblist = new ArrayList <Pedplatonjob> (); für (JobKey JobKey: Jobkeys) {Liste <? erweitert Trigger> Triggers = Scheduler.GettriggersOfjob (JobKey); für (Trigger Trigger: Triggers) {planjob Job = new planjob (); Job.setJobName (jobKey.getName ()); Job.setJobGroup (jobKey.getGroup ()); Job.SetDescription ("Trigger:" + trigger.getKey ()); Trigger.triggerState triggerState = ender.gettriggerState (trigger.getKey ()); Job.setJObStatus (TriggerState.name ()); if (Triggerinstanz von Crontrigger) {Crontrigger crontrigger = (crontrigger) Trigger; String cronexpression = crontrigger.getConexpression (); Job.SetCronexpression (cronexpression); } Joblist.Add (Job); }} return joblist; } / ** * Alle laufenden Jobs * * @return * @throws PlanRexception * / publiclist <Plojob> getrunningjob () löscht SchedulerException {list <jobExecutionContext> executejobs = ender.getCurrent executingjobs (); LIST <Pedplatonjob> joblist = new ArrayList <Plojob> (executingJobs.size ()); für (JobExecutionContext ExecutionJOB: ExecutionJobs) {planjob Job = new planjob (); JobDetail JobDetail = ExecutionJob.getJobDetail (); JobKey JobKey = JobDetail.getKey (); Trigger Trigger = ExecutionJob.Gettrigger (); Job.setJobName (jobKey.getName ()); Job.setJobGroup (jobKey.getGroup ()); Job.SetDescription ("Trigger:" + trigger.getKey ()); Trigger.triggerState triggerState = ender.gettriggerState (trigger.getKey ()); Job.setJObStatus (TriggerState.name ()); if (Triggerinstanz von Crontrigger) {Crontrigger crontrigger = (crontrigger) Trigger; String cronexpression = crontrigger.getConexpression (); Job.SetCronexpression (cronexpression); } Joblist.Add (Job); } return eyblist; } / ** * einen Job innehalten * * @param planjob * @throws enderException * / public void pausejob (planjob planjob) löscht Schedulerexception {JobKey jobKey = jobKey.jobKey (planjob.getJobName (), planjob.getJobGroup ()); Scheduler.PauseJob (JobKey); } / ** * Wiederherstellung eines Jobs * * @param planjob * @throws enderException * / public void resumejob (planjob planjob) löscht Schedulerexception {JobKey JobKey = jobKey.jobKey (planjob.getJobname (), planjob.getJobGroup ()); Scheduler.Resumejob (JobKey); } / ** * Löschen Sie einen Job * * @param planjob * @throws SchedulerException * / public void deletejob (planjob planjob) löscht Schedulerexception {JobKey JobKey = jobKey.jobKey (planjob.getjobname (), planjob.getJobGroup (); Scheduler.Deletejob (JobKey); } / ** * Job sofort ausführen * * * @param planjob * @throws SchedulerException * / public void runajobnow (planjob planjob) löscht SchedulerException {JobKey JobKey = JobKey.jobKey (planjob.getjobname (), planjob.getJobGroup ()); Scheduler.triggerjob (JobKey); } / ** * Aktualisieren Sie den Ausdruck der Jobzeit * * @param planjob * @throws enderException * / public void updatejobcron (planjob planjob) löscht Schedulerexception {TriggerKey TriggerKey = TriggerKey.TiggerKey (planjob.getjobname (), planjob.getGerKey (); Crontrigger trigger = (crontrigger) ender.gettrigger (TriggerKey); CronSchedulebuilder planbuilder = cronSchedulebuilder.conSchedule (planjob.getCronexpression ()); Trigger = Trigger.GettriggerBuilder (). Mit Identität (TriggerKey) .withSchedule (planbuilder) .build (); Scheduler.Resplanejob (TriggerKey, Trigger); }}Service -Implementierung
importieren com.bootdo.common.config.constant; import com.bootdo.common.dao.taskdao; import com.bootdo.common.domain com.bootdo.common.service.jobservice; import com.bootdo.common.utils java.util.hashMap; import java.util.list; import Java.util.map; @ServicePublic Class JobServiceImPlements implementiert JobService {@autowired private taskdao takenschsplitterjobmapper; @Autowired QuartzManager QuartzManager; @Override public TaskDo get (Long id) {return taSchScheduleJobMapper.get (id); } @Override öffentliche Liste <Taskdo> Liste (Karte <String, Objekt> Karte) {return taKSchedulejobMapper.List (MAP); } @Override public int count (map <String, Objekt> map) {return taKScheduleJobMapper.Count (MAP); } @Override public int Save (Taskdo taSkSchedulejob) {return taSkSchedulejobmapper.save (taSKSchedulejob); } @Override public int update (Taskdo taSKSchedulejob) {return taSkScheduleJobMapper.Update (taskSchedulejob); } @Override public int remove (long id) {try {taskDo planjob = get (id); quartzManager.deletejob (planjobutils.entityTodata (planjob)); return takenSchedulejobmapper.remove (id); } catch (planeLexception e) {e.printstacktrace (); Rückkehr 0; }} @Override public int batchRemove (long [] ids) {für (long id: ids) {try {taskDo planjob = get (id); quartzManager.deletejob (planjobutils.entityTodata (planjob)); } catch (planeLexception e) {e.printstacktrace (); Rückkehr 0; }} return taSchSchedulejobMapper.BatchRemove (IDS); } @Override public void initSchedule () löst planexception {// die Aufgabeninformationsdaten hier liste <Taskdo> joblist = taskSchedulejobmapper.List (neuer Hashmap <String, Objekt> (16)); für (Taskdo planjob: joblist) {if ("1" .equals (planjob.getJOBStatus ()) {planjob Job = planjobutils.entityTodata (planjob); quartzManager.addjob (Job); }}} @Override public void Changestatus (Long JobID, String cmd) löscht SchedulerException {TaskDo planjob = get (JobID); if (planjob == null) {return; } if (konstant.status_running_stop.equals (cmd)) {quartzManager.deletejob (planjobutils.entityTodata (planjob)); planjob.setjobStatus (planjob.status_not_running); } else {if (! constant.status_running_start.equals (cmd)) {} else {planjob.setjobstatus (planjob.status_running); quartzManager.addjob (planjobutils.entityTodata (planjob)); }} update (planjob); } @Override public void updateCron (Long JobID) löscht SchedulerException {TaskDo planjob = get (JobID); if (planjob == null) {return; } if (planjob.status_running.equals (planjob.getjobstatus ()) {quartzManager.updatejobcron (planjobutils.entitytodata (planjob)); } update (planjob); }}Starten Sie einen Hörer, um Quarz zu initialisieren
import org.springframework.beans.factory.annotation com.bootdo.common.service.jobservice;@component@order (value = 1) public class planjobinitListener implements commandLinerunner {@autowired JobService planjobservice; @Autowired QuartzManager QuartzManager; @Override public void run (String ... arg0) löst Ausnahme {try {planjobservice.initSchedule () aus; } catch (Ausnahme e) {e.printstacktrace (); }}}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.