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(); } |
运行结果:
标签:
Quartz
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· 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