最近项目中因为要连接许多硬件设备,硬件服务于我们的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); } }
好了 简单的定时策略就做成了