博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
quartz 任务调度
阅读量:4993 次
发布时间:2019-06-12

本文共 4706 字,大约阅读时间需要 15 分钟。

 

quartz 

设置参数, 获取参数

在job中使用spring注入的service对象

循环获取所有的job

删除job

@PersistJobDataAfterExecution

@DisallowConcurrentExecution

 

maven 中添加依赖

org.quartz-scheduler
quartz
2.2.1
org.quartz-scheduler
quartz-jobs
2.2.1

quartz 的 API 设计使用 domain-specific language (DSL),  写起来十分的流畅, 可读性高。 写之前先导入类方便IDE联想:

import org.quartz.Scheduler;  import org.quartz.SchedulerException;  import org.quartz.impl.StdSchedulerFactory;  import static org.quartz.JobBuilder.*;  import static org.quartz.TriggerBuilder.*;  import static org.quartz.SimpleScheduleBuilder.*;

 

使用:

@Test    public void test4() throws SchedulerException {        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();        JobDetail job1 = newJob(JobTest1.class)                // 第一个参数name: job名称,job的唯一标志如果一个job未执行完继续使用同名的jobName会报错,                // 第二个参数group:分组名称,用于逻辑处理                .withIdentity("test1", "test1Group").build();        Trigger trigger1 = newTrigger()                .withIdentity("test1", "test1Group")                .usingJobData("name", "scott") //设置参数,在JobTest1类中取用                .usingJobData("gender","male")                .startNow() // 立即执行                .withSchedule(simpleSchedule()     //通过simpleSchedule定时, 有很多种类,比如cron等等                        .withIntervalInSeconds(60)   //每60秒执行一次, 单位可设置为分,时,秒,毫秒                        .withRepeatCount(2)) //  执行次数设置为2次,应为立即执行了一次, 所以实际执行此时是withRepeatCount+1次                .build();        JobDataMap jobDataMap = new JobDataMap();        jobDataMap.put("name", "scott");        JobDetail job2 = newJob(JobTest2.class)                .withIdentity("test2", "test2Group")                .usingJobData(jobDataMap)                .build();        Trigger trigger2 = newTrigger()                .withIdentity("test2", "test2Group")                .startNow()                .withSchedule(simpleSchedule()                        .withIntervalInSeconds(20)                        .repeatForever()) // 奔流到海不复回                .build();        scheduler.scheduleJob(job1, trigger1);        scheduler.scheduleJob(job2, trigger2);        scheduler.start();    }

 

JobTest1代码

package com.quartz;import org.quartz.*;public class JobTest1 implements Job {    @Override    public void execute(JobExecutionContext context) throws JobExecutionException {        JobDataMap jobDataMap = context.getMergedJobDataMap();        String name = jobDataMap.getString("name");  //获取参数        int gender = jobDataMap.getIntValue("gender");        System.out.println(name+gender);    }}

 

 

 

 

JobTest2 的代码:

package com.quartz;import com.service.device.DeviceService;import org.quartz.*;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.context.support.SpringBeanAutowiringSupport;@PersistJobDataAfterExecution@DisallowConcurrentExecutionpublic class JobTest2 implements Job {    @Autowired    private DeviceService deviceService;        @Override    public void execute(JobExecutionContext context) {        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);  //在非spring托管的类中使用spring的对象        Integer result = deviceService.selectIdBydeviceCode("154653468");  //调用service层方法向数据库中查询数据        System.out.println(result);        JobDataMap jobDataMap = context.getMergedJobDataMap();        String name = jobDataMap.getString("name");        System.out.println(name);  //获取设置的参数                SimpleTrigger trigger = (SimpleTrigger) context.getTrigger();        int times = trigger.getTimesTriggered();  //获取当前执行次数        System.out.println("我是job2第"+times+"次运行");    }}

 

循环所有的job, 删除指定job

@Test    public void testQuartz1() {        try {            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();            for (String groupName : scheduler.getJobGroupNames()) {                for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName))) {                    String jobName = jobKey.getName();                    String jobGroup = jobKey.getGroup();                    List
triggers = (List
) scheduler.getTriggersOfJob(jobKey); Date nextFireTime = triggers.get(0).getNextFireTime(); System.out.println(jobName + "第"+times+"次运行, 存在" + jobGroup + "组,距离下次到期时间" + nextFireTime); if(jobName.equalsIgnoreCase("test2")) //删除job scheduler.deleteJob(jobKey); } } } catch (Exception e) { e.printStackTrace(); } }

 

转载于:https://www.cnblogs.com/jxlsblog/p/9980681.html

你可能感兴趣的文章
你的灯还亮着吗阅读笔记之一
查看>>
python介绍
查看>>
Unity-Editor按钮和菜单显示
查看>>
SharePoint InfoPath 保存无法发布问题
查看>>
word2vec:主要概念和流程
查看>>
Java - MyBites 逆向工程
查看>>
104. Maximum Depth of Binary Tree
查看>>
Python--变量作用域
查看>>
2017-2018-1 20155235 《信息安全系统设计基础》第九周学习总结
查看>>
!!和??
查看>>
matlab演奏卡农 Cripple Pachebel's Canon on Matlab
查看>>
apache的MPM机制-prefork
查看>>
js的一些实用的小技巧
查看>>
vue-cli中理不清的assetsSubDirectory 和 assetsPublicPath
查看>>
iOS的UILabel设置居上对齐,居中对齐,居下对齐
查看>>
最流行的android组件大全
查看>>
【Android自定义控件】支持多层嵌套RadioButton的RadioGroup
查看>>
Swift - 内存泄露原因(循环强引用)及解决办法
查看>>
AIDL-Android接口描述语言实现跨进程通讯
查看>>
剑指Offer - 九度1354 - 和为S的连续正数序列
查看>>