Java基于Quartz的定时任务调度服务(一)
生活随笔
收集整理的這篇文章主要介紹了
Java基于Quartz的定时任务调度服务(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Quartz的基本用法
一 Quartz的簡單介紹
Quartz 是 OpenSymphony 開源組織在任務調度領域的一個開源項目,完全基于 Java 實現,一個優秀的開源調度框架,其特點是:強大的調度能力.靈活的應用方式,分布式和集群的能. 官網:http://www.quartz-scheduler.org
Quartz的核心元素
- Scheduler:任務調度器,是實際執行任務調度的控制器
- Trigger:觸發器,用于定義任務調度的時間規則,有SimpleTrigger,CronTrigger等,其中SimpleTrigger定義時間規則簡單的任務,CronTrigger通過設置Cron表達式定義復雜時間規則的任務
- JobDetail:用來描述Job實現類及其它相關的靜態信息,如Job/Group名字、關聯監聽器等信息
- Job是一個接口,只有一個方法void execute(JobExecutionContext context),自定義任務只需要實現該方法即可
二 簡單使用
- 新建一個Maven項目,新建完成后,修改pom.xml文件,添加Quartz依賴
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>4.1.6.RELEASE</version></dependency> - 新建Job1,Job2兩個類,兩個類都實現Job接口,并實現executef方法
package quartzDemo.quartz;import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;public class Job1 implements Job {public void execute(JobExecutionContext context) throws JobExecutionException {JobKey jobKey = context.getJobDetail().getKey();System.out.println(String.format("%s: JobGroup:%s JobName:%s", DateTimeHelper.Now(), jobKey.getGroup(), jobKey.getName()));JobDataMap dataMap = context.getMergedJobDataMap();
//
// String jobData = dataMap.getString("JobDetailData");
// String triggerData = dataMap.getString("TriggerData");
//
// System.out.println(String.format("JobDataMap: jobData:%s triggerData:%s", jobData, triggerData));}}
package quartzDemo.quartz;import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;public class Job2 implements Job{public void execute(JobExecutionContext context) throws JobExecutionException {JobKey jobKey = context.getJobDetail().getKey();System.out.println(String.format("%s: JobGroup:%s JobName:%s", DateTimeHelper.Now(), jobKey.getGroup(), jobKey.getName()));}}
- 在App.java中新建兩個方法,分別初始化job1和job2,并且在main方法中將兩個job添加到Scheduler,如下
package quartzDemo.quartz;import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;/*** @author QIUYANJUN*/
public class App {public static void main(String[] args) {String job2cronExpression = "0/5 * * * * ? ";JobModel job1 = InitSimpleJob();JobModel job2 = InitCronJob(job2cronExpression);SchedulerFactory factory = new StdSchedulerFactory();Scheduler scheduler;try {scheduler = factory.getScheduler();scheduler.start();scheduler.scheduleJob(job1.getJobDetail(), job1.getTrigger());scheduler.scheduleJob(job2.getJobDetail(), job2.getTrigger());System.out.println(DateTimeHelper.Now());} catch (SchedulerException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** SimpleJob初始化* @return*/private static JobModel InitSimpleJob() {JobKey jobKey = JobKey.jobKey("job1", "group1");JobDetail jobDetail = JobBuilder.newJob(Job1.class).withIdentity(jobKey).withDescription("first quartz job").usingJobData("JobDetailData", "Hello JobDetail").build();Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").withDescription("first quartz trigger").usingJobData("TriggerData", "Hello Trigger").startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).withRepeatCount(3)).build();return new JobModel(jobDetail, trigger);}/*** CronJob初始化* * @param cronExpression Cron表達式* @return*/private static JobModel InitCronJob(String cronExpression) {JobKey jobKey = JobKey.jobKey("job2", "group1");JobDetail jobDetail = JobBuilder.newJob(Job2.class).withIdentity(jobKey).withDescription("second quartz job").usingJobData("JobDetailData", "Hello JobDetail").build();Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger2", "group1").withDescription("second quartz trigger").usingJobData("TriggerData", "Hello Trigger").startNow()// .endAt(DateTimeHelper.AddSecond(50)).withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).build();return new JobModel(jobDetail, trigger);}
}
- 其他需要用到的類
package quartzDemo.quartz;import org.quartz.JobDetail;
import org.quartz.Trigger;public class JobModel {private JobDetail jobDetail;private Trigger trigger;public JobDetail getJobDetail() {return jobDetail;}public void setJobDetail(JobDetail jobDetail) {this.jobDetail = jobDetail;}public Trigger getTrigger() {return trigger;}public void setTrigger(Trigger trigger) {this.trigger = trigger;}public JobModel() {}public JobModel(JobDetail jobDetail, Trigger trigger) {super();this.jobDetail = jobDetail;this.trigger = trigger;}
}
package quartzDemo.quartz;import java.text.SimpleDateFormat;
import java.util.Date;public class DateTimeHelper {private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:MM:ss");public static String Now() {Date date = new Date();return simpleDateFormat.format(date);}public static Date AddSecond(int second) {Date date = new Date();date.setTime(date.getTime() + second * 1000);return date;}public static String Format(Date date, String pattern) {if (!pattern.isEmpty()) {pattern = "yyyy-MM-dd HH:MM:ss";}simpleDateFormat = new SimpleDateFormat(pattern);return simpleDateFormat.format(date);}
}
- 最后,運行App.java中的mian方法,查看輸出,如下
轉載于:https://www.cnblogs.com/ShuiMu/articles/9578631.html
總結
以上是生活随笔為你收集整理的Java基于Quartz的定时任务调度服务(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求校园乐队题材电影
- 下一篇: Python学习笔记3——三大结构:顺序