Quartz是OpenSymphony開源組織在Job scheduling領域又一個開源項目,它能夠與J2EE與J2SE應用程序相結合也能夠單獨使用。Quartz能夠用來建立簡單或爲運行十個,百個,甚至是好幾萬個Jobs這樣複雜的程序。Jobs能夠作成標準的Java組件或 EJBs。Quartz的最新版本爲Quartz 2.3.0。html
目的:最近在想弄一下不一樣的時間段調度任務,不是以往那樣在相同的間隔調度,而是不一樣的間隔時間,參考了一下Quartz官網和一些前輩的,加上本身總結的改進的方法 java
參考文章:Quartz使用總結
api
Quartz的API: http://www.quartz-scheduler.org/api/2.1.7/index.htmlpost
jar下載地址:http://www.quartz-scheduler.org/downloads/ui
Maven:url
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.1</version> </dependency>
package com.test.util; import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import java.util.ArrayList; import java.util.Date; import java.util.List; import static org.quartz.JobBuilder.newJob; import static org.quartz.TriggerBuilder.newTrigger; /** * @author zhouguanglin * @date 2018/1/6 11:17 */ public class QuartzTest{ private static volatile Scheduler scheduler=null; private static List<Integer> list=new ArrayList<Integer>(); static { list.add(5); list.add(10); list.add(5); list.add(10); } //單列模式建立scheduler public static Scheduler getScheduler(){ if (scheduler==null) { synchronized (QuartzTest.class) { try { if (scheduler==null) { scheduler = StdSchedulerFactory.getDefaultScheduler(); } } catch (SchedulerException e) { e.printStackTrace(); } } } return scheduler; } //任務調度 public static Scheduler getSchedulerTask(String taskName,int time){ Scheduler scheduler=getScheduler(); try { //看是否啓動 if (!scheduler.isStarted()){ scheduler.start(); } //運行一段時間後關閉 Thread.sleep(time*1000); //定義一個Trigger Trigger trigger = newTrigger().withIdentity("trigger", "group") //定義name/group .startAt(new Date(time))//在這個時間以後發生
//這裏還能夠用withwithSchedule()來控制調度狀況 其中添加simpleSchedule()來控制間隔多少執行一次,執行多少次,仍是一直執行
.build(); //定義一個JobDetail JobDetail job = newJob(QuartzTask.class) //定義Job類爲QuartzTask類,這是真正的執行邏輯所在 .withIdentity("job", "group") //定義name/group .usingJobData("name", taskName) //定義屬性 .usingJobData("zhou","zhouguanglin") .build(); //加入這個調度 scheduler.scheduleJob(job, trigger); } catch (Exception e) { e.printStackTrace(); } return scheduler; } public static void main(String[] args) throws SchedulerException, InterruptedException { for (int j=0;j<list.size();j++) { getSchedulerTask("任務:"+j,list.get(j)); } //最後將scheduler關閉 if (!scheduler.isShutdown()) { scheduler.shutdown(); } } }
package com.test.util; import org.quartz.Job; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; /** * @author zhouguanglin * @date 2018/1/6 15:09 */ public class QuartzTask implements Job { public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { //這裏是讀取上下文,獲得其中的東西,只可意會不可言傳,,,就好像Spring的感受差不錯 JobDetail detail = jobExecutionContext.getJobDetail(); String name = detail.getJobDataMap().getString("name"); String zhou=detail.getJobDataMap().getString("zhou"); System.out.println("任務開始。。。-------name:"+name+" zhou:"+zhou); System.out.println(System.currentTimeMillis()); } }
【版本聲明】本文爲博主原創文章,轉載請註明出處spa