2、Job 类实现 JDM 参数的 Setter 方法 , 实例化时自动绑定参数
HelloJob:
// 实例化时自动绑定 JDM key对应的值private String msg;public void setMsg(String msg) {this.msg = msg;}// 获取 JDMSystem.out.println(Trigger JDM : " + msg);问题:上文中 JobDetail 和 Trigger 中的 JDM 的 key 均为 "msg" , 那此 msg 是哪一个?
E.g:遇到同名key , Trigger 会覆盖 JobDetail 的值 , 所以 msg 为 Trigger JDM 的值 。
1.6 Job 状态有状态 Job:多次调用 Job 期间 , 公用同一个 JDM 。
有状态 Job:多次调用 Job 期间 , 每次新建一个新的 JDM 。
1、有无状态 Job 区别案例
预期:无状态 count 输出永远为 1 , 有状态 count 输出累加 。
HelloSchedulerDemo:
// JobDeatil 添加一个 JDM , 用做计数器.usingJobData("count",0)无状态 HelloJob:
package com.sugar.quartz.utils;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import java.text.SimpleDateFormat;import java.util.Date;/** * 功能描述: 任务类 * * @author XiaoNianXin * @date 2021/12/13 20:52 */public class HelloJob implements Job {// 实例化时自动绑定 JDM key对应的值private String msg;private Integer count;public void setMsg(String msg) {this.msg = msg;}public void setCount(Integer count) {this.count = count;}@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {// 获取当前时间,并格式化Date date = new Date();SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateSrting = format.format(date);// 获取 JDMSystem.out.println("---------------------------------------------------");System.out.println("Trigger JDM : " + msg);System.out.println("Count : " + count);// 更新 JobDetail JDM 的 countcount++;context.getJobDetail().getJobDataMap().put("count",count);// 业务功能模拟System.out.println("开始备份数据库,时间:" + dateSrting);// 其他内容System.out.println("Job 运行时间:" + context.getJobRunTime());System.out.println("Job 当前运行时间:" + context.getFireTime());System.out.println("Job 下次运行时间:" + context.getNextFireTime());System.out.println("---------------------------------------------------");}}有状态 HelloJob:
// 任务类加上下面注解 , 多次调用 Job , 会持久化 Job , JDM 的数据会被保存 , 供下次使用@PersistJobDataAfterExecution1.7 TriggerTrigger 常用:SimpleTrigger、CronTrigger 。
JobKey:Job 实例标识 , 触发器触发时 , 执行 JobKey 对应任务 。
StartTime:第一次触发时间 。
EndTime:终止触发时间 。
1、Trigger 获取参数案例
HelloSchedulerTriggerDemo:
package com.sugar.quartz.utils;import org.quartz.*;import org.quartz.impl.StdSchedulerFactory;import java.util.Date;/** * 功能描述: 定时器配置2 * * @author XiaoNianXin * @date 2021/12/13 21:08 */public class HelloSchedulerTriggerDemo {public static void main(String[] args) throws SchedulerException {// 任务开始时间推迟 3 s,结束时间推迟 10 sDate startData = https://www.isolves.com/it/cxkf/kj/2021-12-22/new Date();startData.setTime(startData.getTime() + 3000);Date endData = new Date();endData.setTime(endData.getTime() + 10000);// 1、调度器 - 从工厂获取调度实例Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();// 2、任务实例 - 执行的任务对象JobDetail job = JobBuilder.newJob(helloJobTrigger.class).withIdentity("job1", "group1") // 任务名称,组名称.usingJobData("msg","JDM使用 - Detail")// JDM 传递参数.build();// 3、触发器 - 控制执行次数和执行时间Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1") // 同上.startNow() // 立刻启动.startAt(startData).endAt(endData).build();// 调度器关联触发器,并启动scheduler.scheduleJob(job,trigger);scheduler.start();}}helloJobTrigger:
package com.sugar.quartz.utils;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.quartz.PersistJobDataAfterExecution;import java.text.SimpleDateFormat;import java.util.Date;/** * 功能描述: 任务类2 * * @author XiaoNianXin * @date 2021/12/13 20:52 */@PersistJobDataAfterExecutionpublic class helloJobTrigger implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {// 获取当前时间,并格式化Date date = new Date();SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateSrting = format.format(date);// 业务功能模拟System.out.println("---------------------------------------------------");System.out.println("开始备份数据库,时间:" + dateSrting);// 获取 JobKey,StartTime,EndTimeSystem.out.println("JobKey : " + context.getTrigger().getJobKey());System.out.println("StartTime : " + format.format(context.getTrigger().getStartTime()));System.out.println("EndTime : " + format.format(context.getTrigger().getEndTime()));System.out.println("---------------------------------------------------");}}// 运行结果---------------------------------------------------开始备份数据库,时间:2021-12-13 23:25:06JobKey : group1.job1StartTime : 2021-12-13 23:25:06EndTime : 2021-12-13 23:25:13---------------------------------------------------
推荐阅读
- Linux之mv命令
- 之前有网贷已经还清影响征信吗?
- JAVA并发之ReentrantLock原理解析
- 交换机与本地计算机FTP服务端之间的文件互传功能
- Java基础系列-final、finally关键字
- 福建红茶的种类,红茶种类大全
- 前端新手必备常用JavaScript方法函数大全
- netty系列之:性能为王!创建多路复用http2服务器
- shell练习之分析netstat结果
- Java设计模式之观察者模式
