Loading

Quartz(2):JobDetail、JobExectionContext、JobDataMap的介绍

一.

JobDetail可以为Job实例设置属性、jobDataMap属性等

JobExectionContext:Job的execute方法的参数,它记录了job的信息和Quartz相关的运行环境

JobDataMap:(1)进行任务调度室,JobDataMap存储在JobExectionContext中

      (2)JobDataMap实现了java.util.Map接口

      (3)Job实现类中添加setter方法对应的JobDataMap的键值,JobFactory实现类在初始化job实例对象时会自动调用这些setter方法

二.

Job类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/**
 * 需要实现Job接口
 */
public class HelloJob implements Job {
 
    //Job实现类中添加setter方法对应的JobDataMap的键值,JobFactory实现类在初始化job实例对象时会自动调用这些setter方法
    private Integer account;
    private String name;
 
    public void setAccount(Integer account) {
        this.account = account;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime time = LocalDateTime.now();
        String localTime = df.format(time);
        System.out.println("数据库备份时间:"+localTime);
 
        JobKey key = jobExecutionContext.getJobDetail().getKey();
 
        //通过JobExecutionContext类,我们可以在任务执行时获取Job本身的一些信息
        System.out.println("任务:"+key.getGroup()+":"+key.getName());  //获取任务组和任务名称
        System.out.println(jobExecutionContext.getJobDetail().getJobClass()); //获取Job的Class
 
        //获取任务数据的参数值
        JobDataMap dataMap = jobExecutionContext.getJobDetail().getJobDataMap();
        dataMap.forEach((x,y)-> System.out.println(x+":"+y));
 
        //Trigger和JobDetail类似,也可以传递dataMap(TriggerDataMap)
        //但是,如果遇到同名的key,trigger中的usingJobData会覆盖JobDetail中的usingJobData
        TriggerKey triggerKey = jobExecutionContext.getTrigger().getKey();
        System.out.println("触发器:"+triggerKey.getGroup()+":"+triggerKey.getName());
 
        //当前任务的执行时间
        System.out.println("当前任务执行时间:"+jobExecutionContext.getFireTime());
 
        //当前类的成员变量值
        System.out.println("成员变量:"+account+":"+name);
    }
}

  main方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public static void main(String[] args) throws SchedulerException {
        //调度器(Scheduler)
        //从工厂中获取
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
 
        //任务数据
        JobDataMap map = new JobDataMap();
        map.put("account",123456);
        map.put("name","张三");
 
        //任务实例(JobDetail)
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("job1", "group1"//参数一:任务名称 参数二:任务组
                .usingJobData(map)  //传递JobDataMap
                .build();
 
        //触发器(Trigger)
        SimpleTrigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("trigger1", "group1")
                .startNow()//立即启用
                .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(5))  //每5秒执行一次
                .build();
        //关联触发器和任务  按照触发器的条件执行任务
        scheduler.scheduleJob(jobDetail,trigger);
        //启动
        scheduler.start();
    }

  运行结果:

 

posted @   秋风飒飒吹  阅读(689)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示