Quartz任務調度框架的簡單應用
阿新 • • 發佈:2018-01-12
private tar pre detail throws sleep pro get ()
首先創建Maven項目並添加依賴
1 <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --> 2 <dependency> 3 <groupId>org.quartz-scheduler</groupId> 4 <artifactId>quartz</artifactId> 5 <version>2.2.3</version> 6</dependency> 7 <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop --> 8 <dependency> 9 <groupId>org.slf4j</groupId> 10 <artifactId>slf4j-nop</artifactId> 11 <version>1.7.7</version> 1213 </dependency>
創建一個需要執行的任務取名為HelloJob.java
public class HelloJob implements Job { /*用來傳值 private String message; private Float FloatJobValue; private Double DoubleTriggerValue; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Float getFloatJobValue() { return FloatJobValue; } public void setFloatJobValue(Float FloatJobValue) { this.FloatJobValue = FloatJobValue; } public Double getDoubleTriggerValue() { return DoubleTriggerValue; } public void setDoubleTriggerValue(Double DoubleTriggerValue) { this.DoubleTriggerValue = DoubleTriggerValue; }*/ public void execute(JobExecutionContext context) throws JobExecutionException { // TODO Auto-generated method stub // 打印當前的執行時間 try { Thread.sleep(5000L); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Date date = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("Current Exec Time Is:" + sf.format(date)); // 編寫具體的業務邏輯 // ① System.out.println("Hello World"); // ② /* * JobKey key = context.getJobDetail().getKey(); * System.out.println("My name and group are:" + key.getName() + ":" + * key.getGroup()); TriggerKey trkey = context.getTrigger().getKey(); * System.out.println("My name and group are:" + trkey.getName() + ":" + * trkey.getGroup()); //JobDataMap dataMap = * context.getMergedJobDataMap(); //JobDataMap tdataMap = * context.getTrigger().getJobDataMap(); String Msg = * dataMap.getString("message"); Float jobFloatValue = * dataMap.getFloat("FloatJobValue"); //String triggerMsg = * dataMap.getString("message"); Double triggerDoubleValue = * dataMap.getDouble("DoubleTriggerValue"); * //System.out.println("JobMsg is:"+jobMsg); * System.out.println("jobFloatValue is:"+FloatJobValue); * System.out.println("Msg is:"+message); * System.out.println("triggerDoubleValue is:"+DoubleTriggerValue); */ // ③ /*Trigger currentTrigger = context.getTrigger(); System.out.println("Start Time Is:" + sf.format(currentTrigger.getStartTime())); System.out.println("End Time Is:" + sf.format(currentTrigger.getEndTime())); JobKey jobKey = currentTrigger.getJobKey(); System.out.println("JobKey info---jobName:" + jobKey.getName() + "jobGroup:" + jobKey.getGroup());*/ } }
HelloScheduler.java
1 public class HelloScheduler { 2 public static void main(String[] args) throws SchedulerException, InterruptedException { 3 // 打印當前的執行時間 4 Date date = new Date(); 5 SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 6 System.out.println("Current Time Is:" + sf.format(date)); 7 // 創建一個JobDetail實例,將該實例與HelloJob Class綁定 8 JobDetail jobDetail = JobBuilder.newJob(HelloJob.class) 9 .withIdentity("myJob") 10 /*.usingJobData("message", "hello myJob1") 11 .usingJobData("FloatJobValue", 3.14F)*/ 12 .build(); 13 //獲取距離當前時間4秒後的時間 14 date.setTime(date.getTime()+4000L); 15 //獲取距離當前時間6秒後的時間 16 Date endDate = new Date(); 17 endDate.setTime(endDate.getTime() + 6000); 18 /*System.out.println("jobDetail‘s name:" + jobDetail.getKey().getName()); 19 System.out.println("jobDetail‘s group:" + jobDetail.getKey().getGroup()); 20 System.out.println("jobDetail‘s jobClass:" + jobDetail.getJobClass().getName());*/ 21 // 創建一個trigger實例,定義該Job立即執行,並且每隔兩秒鐘重復執行一次,直到永遠 22 //距離當前時間4秒鐘後首次執行,之後每隔兩秒鐘 23 //SimpleTrigger 24 /*SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder.newTrigger() 25 .usingJobData("message", "hello myTrigger1") 26 .usingJobData("DoubleTriggerValue",2.0D) 27 .withIdentity("myTrigger", "group1") 28 //設置開始時間結束時間,優先於執行次數 29 .startAt(date) 30 .endAt(endDate) 31 //每兩秒鐘執行一次 32 .withSchedule( 33 SimpleScheduleBuilder 34 .simpleSchedule() 35 .withIntervalInSeconds(2) 36 .withRepeatCount(3) 37 .repeatForever()) 38 .build();*/ 39 40 // CronTrigger 41 CronTrigger trigger = (CronTrigger) TriggerBuilder 42 .newTrigger() 43 .withIdentity("myTrigger", "group1") 44 // 設置開始時間結束時間,優先於執行次數 45 //.startAt(date).endAt(endDate) 46 // 每兩秒鐘執行一次 47 .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?")) 48 .build(); 49 //1.2017年內每天10點15分觸發一次 50 // 0 15 10 ? * * 2017 51 //2.每天的14點整至14點59分55秒,以及18點整至18點59分55秒,每5秒鐘觸發一次 52 //0/5 * 14,18 * * ? 53 //3.每月周一至周五的10點15分觸發一次 54 //0 15 10 ? * 2-6 55 //4.每月最後一天的10點15分觸發一次 56 //0 15 10 L * ? 57 //5.每月第三個周五的10點15分觸發一次 58 //0 15 10 ? * 6#3 59 // 創建scheduler實例 60 SchedulerFactory sfact = new StdSchedulerFactory(); 61 Scheduler scheduler = sfact.getScheduler(); 62 scheduler.start(); 63 System.out.println("Scheduled time is :"+sf.format(scheduler.scheduleJob(jobDetail, trigger))); 64 //scheduler執行兩秒後掛起 65 /*Thread.sleep(2000L); 66 scheduler.shutdown(false); 67 System.out.println("scheduler is shut down?" + scheduler.isShutdown());*/ 68 /* scheduler.standby(); 69 Thread.sleep(3000L); 70 scheduler.start();*/ 71 } 72 }
配置文件quartz.properties
org.quartz.scheduler.instanceName: DefaultQuartzScheduler org.quartz.scheduler.rmi.export: false org.quartz.scheduler.rmi.proxy: false org.quartz.scheduler.wrapJobExecutionInUserTransaction: false org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount: 10 org.quartz.threadPool.threadPriority: 5 #0-9 org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true org.quartz.jobStore.misfireThreshold: 60000 org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore
Quartz任務調度框架的簡單應用