QuartZ
Posted hk-zsg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QuartZ相关的知识,希望对你有一定的参考价值。
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap(); // 从JobDetail中获取JobDataMap的数据 String jobDataMessage = jobDataMap.getString("message"); System.out.println("任务数据的参数值:" + jobDataMessage); // 获取Trigger对象中获取JobDataMap的数据 JobDataMap jobDataMap2 = context.getTrigger().getJobDataMap(); String triggerDataMessage = jobDataMap2.getString("message"); System.out.println("触发器数据的参数值:" + triggerDataMessage); //获取trigger的内容 TriggerKey triggerKey=context.getTrigger().getKey(); System.out.println("触发器名称:"+triggerKey.getName()+";触发器组:"+triggerKey.getGroup()); System.out.println("****************"); //获取其他内容 System.out.println("当前任务执行时间:"+sdf.format(context.getFireTime())); System.out.println("下一次任务执行时间:"+sdf.format(context.getNextFireTime()));
官网:www.quartz-scheduler.org
组件模式:最终要的三部分:日任务job,触发器trigger,调度器schedule
所有的任务调度都要通过execute完成
入门案例:
public class HelloJob implements Job @Override public void execute(JobExecutionContext context) throws JobExecutionException // 输出当前时间 Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dataString = sdf.format(date); // 工作内容 System.out.println("正在进行数据库的备份工作,备份数据库的时间是:" + dataString);
public class HelloScheduleDemo public static void main(String[] args) throws Exception // 1.调度器(Scheduler) ,从工厂中获取调度的实例(默认:实例化) Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // 2.任务实例 JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1") // 参数1:任务的名称;参数2:任务组的名称 .build(); // 3.触发器 SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger", "group1")// 参数1:触发器名称;参数2:触发器组的名称 .startNow()// 马上启动触发器 .withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(5)).build(); // 让调度器关联任务和触发器,保证按照触发器定义的条件执行任务 scheduler.scheduleJob(jobDetail, trigger); scheduler.start();
public class HelloScheduleDemo public static void main(String[] args) throws Exception // 1.调度器(Scheduler) ,从工厂中获取调度的实例(默认:实例化) Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // 2.任务实例 JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("job1", "group1") // 参数1:任务的名称;参数2:任务组的名称 .build(); System.out.println("名称:" + jobDetail.getKey().getName()); System.out.println("组的名称:" + jobDetail.getKey().getGroup()); System.out.println("任务类" + jobDetail.getJobClass().getName()); // 3.触发器 SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger", "group1")// 参数1:触发器名称;参数2:触发器组的名称 .startNow()// 马上启动触发器 .withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(5)).build(); // 让调度器关联任务和触发器,保证按照触发器定义的条件执行任务 scheduler.scheduleJob(jobDetail, trigger); scheduler.start();
输出:
名称:job1 组的名称:group1 任务类com.quartz.HelloJob INFO [main] - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. 正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:06:49 正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:06:54 正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:06:59 正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:07:04 正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:07:09 正在进行数据库的备份工作,备份数据库的时间是:2019-09-04 23:07:14
HelloSchedulerDemo.java
HelloJob.java
如果想要获取job的数据,key不能设置和trigger一样
以上是关于QuartZ的主要内容,如果未能解决你的问题,请参考以下文章