最近項目中因為要連接許多硬件設備,硬件服務於我們的server服務是通過socket進行通信,本來有一個默認的定時器策略,於硬件交換數據,
現在有這么一個需求,需要人工維護 server和硬件通信的頻率 ,然后想到了 Quartz;
由於我也是第一次接觸這個框架,邊寫邊學吧,項目是使用的maven進行管理 quartz的版本是2.2.1 因為我發現這個版本被引用的幾率是最高的 ,然后我們也用吧。
<!--定時任務用到的--> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency>
看看用到的類和接口
Schedule 統一的調度接口 多有的定時任務都是受此接口進行控制
JobDetail 這個接口是保存定時任務的,具體的業務任務都將被此接口封裝
Job 任務工作接口 具體實現業務的類都要實現此接口 並且實現他的execute(JobExecutionContext jobExecutionContext)方法
Trigger 定時接口 封裝你的的定時策略
然后貼一下JOB的實現類
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; /** * 具體任務類 * 每個具體執行任務的類 都需要實現job接口 並 復寫執行方法 * Created by Administrator on 2017/3/1. */ public class MyJob implements Job { //計數 Integer num = 0; //被執行的任務 @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { num += 1; System.out.println("執行第" + num + "次任務"); //打印結果都是相同的 說明每次執行任務的job類都是通過反射生成的一個全新的對象 //console--------------------- // 執行第1次任務 // 執行第1次任務 // 執行第1次任務 // 執行第1次任務 // 執行第1次任務 // 執行第1次任務 // 執行第1次任務 } }
然后是調用此jOB
import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import java.text.ParseException; /** * * 任務調度類 * 1、需要先得到一個Schedule實例 * 2、然后創建一個包含任務信息的JobDetail * 3、最后創建一個Trigger管理任務的執行 * Created by Administrator on 2017/3/1. */ public class MyQuartzScheduling { public static void main(String[] args) throws SchedulerException, ParseException { //獲取調度類實例 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); //啟動 scheduler.start(); //初始化包含調度工作的實例 JobDetail jobDetail= JobBuilder.newJob(MyJob.class) //工作名 工作組 .withIdentity("test","group") .build(); // 表達式調度構建器 讓他每兩秒執行一次 CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/2 * * * * ?"); Trigger trigger= TriggerBuilder .newTrigger() //工作名 工作組 .withIdentity("trigger","group") .startNow() .withSchedule(scheduleBuilder) .build(); scheduler.scheduleJob(jobDetail,trigger); } }
好了 簡單的定時策略就做成了