java定时任务工具详解之Quartz
发布时间:2025-12-09 16:54:13
浏览次数:4
Quartz简介
特点:
主要用到的设计模式
- Builder模式
- Factory模式
- 组件模式
- 链式写法
三个核心概念
从Map中直接获取
代码演示:
public class Test {public static void main(String[] args) throws SchedulerException {//创建一个JobDetail实例,将该实例与helloJob类绑定JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).usingJobData("message","No1").usingJobData("float",3.14F).withIdentity("myJob", "group1").build();//创建一个Trigger实例,定义该Job立即执行,并且每隔两秒重复执行一次Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").usingJobData("message","No2").usingJobData("Float",4.3F).startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();//创建一个Scheduler实例StdSchedulerFactory factory = new StdSchedulerFactory();Scheduler scheduler = factory.getScheduler();scheduler.start();//打印当前时间Date date = new Date();SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("第一次时间为"+sf.format(date));scheduler.scheduleJob(jobDetail,trigger);}} public class HelloJob implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {//执行重复的业务方法'Date date = new Date();SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("时间为"+sf.format(date));JobKey key = context.getJobDetail().getKey();System.out.println("name"+key.getName());System.out.println("group"+key.getGroup());JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();JobDataMap triggerDataMap = context.getTrigger().getJobDataMap();System.out.println(jobDataMap.getString("message"));System.out.println(jobDataMap.getFloat("float"));System.out.println(triggerDataMap.getString("message"));System.out.println(triggerDataMap.getFloat("Float"));}}
public class HelloJob implements Job {private String message;private Float Myfloat;private Float ss;public Float getSs() {return ss;}public void setSs(Float ss) {this.ss = ss;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Float getMyfloat() {return Myfloat;}public void setMyfloat(Float myfloat) {Myfloat = myfloat;}@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {//执行重复的业务方法'Date date = new Date();SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("时间为"+sf.format(date));JobKey key = context.getJobDetail().getKey();System.out.println("name"+key.getName());System.out.println("group"+key.getGroup());System.out.println(message);System.out.println(ss);System.out.println(Myfloat);}}
浅谈Trigger
思考:Trigger是什么?
Trigger是Quartz中的触发器,它是用来告诉调度程序作业什么时候触发,即Trigger对象是用来触发执行Job的。
触发器通用属性
SimpleTrigger
作用:在一个指定时间段内执行一次作业任务或是在指定的时间间隔内多次执行作业任务
需要注意的点:
- 重复次数可以为0,正整数或是SimpleTrigger.REPEAT_INDEFINITELY常量值、
- 重复执行间隔必须为0或长整数
- 一旦被指定了endTime参数,那么他会覆盖重复次数参数的效果
public class Test {public static void main(String[] args) throws SchedulerException {//创建一个JobDetail实例,将该实例与helloJob类绑定JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).usingJobData("message", "No1").usingJobData("Myfloat", 3.14F).withIdentity("myJob", "group1").build();//打印当前时间Date date = new Date();SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("第一次时间为" + sf.format(date));Calendar calendar=new GregorianCalendar();calendar.setTime(date);calendar.add(Calendar.SECOND,2);//创建一个Trigger实例,定义该Job立即执行,并且每隔两秒重复执行一次SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").usingJobData("message", "No2").usingJobData("ss", 4.3F).startAt(calendar.getTime()).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).withRepeatCount(2)).build();//创建一个Scheduler实例StdSchedulerFactory factory = new StdSchedulerFactory();Scheduler scheduler = factory.getScheduler();scheduler.start();scheduler.scheduleJob(jobDetail, trigger);}}
CronTrigger
作业:基于日历的作业调度器,而不是像SimpleTrigger那样精确指定时间间隔,比SimpleTrigger更常用。
cron表达式
用于配置CronTrigger实例,是由7个子表达式组成的字符串,描述了时间表的详细信息
格式:[秒][分][小时][日][月][周][年]
- 所有的Scheduler实例应该由SchedulerFactory来创建的
-
StdSchedulerFactory
- 使用一组参数来创建和初始化Quartz调度器
- 配置参数一般存储在quartz.properties中
- 调用getScheduler方法就能创建和初始化调度器对象
注意:
quartz.properties