Quartz框架完成定时任务

Quartz 框架重要的组成部分:
一、Scheduler 调度器
二、Trigger 触发器 包括SimpleTrigger和CronTrigger
三、JobDetail 执行任务

一、加入Quartz相关依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

二、编写要实现定时任务的类
编写一个类实现Job接口重写里面的execute方法

public class PrintWordsJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        String printTime = new SimpleDateFormat("yy-MM-dd HH-mm-ss").format(new Date());
        System.out.println("自定义任务开始: " + printTime + ", 执行工作:" + new Random().nextInt(100));
    }
}

2、编写实现定时任务的类
1、创建一个定时任务调度器(用来负责定时任务的执行)
2、创建一个定时任务具体执行的实例对象,设置相关参数(具体执行的任务)
3、创建定时任务触发器(用来控制具体的定时任务多长周期执行一次)
4、具体执行定时任务通过start方法执行

public static void main(String[] args) throws SchedulerException, InterruptedException {
    // 1、创建调度器Scheduler
    SchedulerFactory schedulerFactory = new StdSchedulerFactory();
    Scheduler scheduler = schedulerFactory.getScheduler();

    // 2、创建JobDetail实例,并与PrintWordsJob类绑定(Job执行内容)
    JobDetail jobDetail = JobBuilder.newJob(PrintWordsJob.class)
                                    .withIdentity("任务One", "组织One").build();
                                    
    // 3、构建Trigger实例,每隔1s执行一次
    Trigger trigger = TriggerBuilder.newTrigger().withIdentity("扳机One", "扳机组织One")
            .startNow()//立即生效,标志着何时生效
            .withSchedule(SimpleScheduleBuilder.simpleSchedule()
            //每隔1s执行一次
            .withIntervalInSeconds(5)
            .repeatForever()).build();//一直执行

    //4、执行
    scheduler.scheduleJob(jobDetail, trigger);
    System.out.println("开始执行定时任务:--.--");
    scheduler.start();

    //睡眠
    TimeUnit.SECONDS.sleep(15);
    scheduler.shutdown();
    System.out.println("固定时长后进行睡眠");
}

三、额外参数设置:
对应二中的第二步:

四、参数解释:
1、JobDetail:JobDeatil绑定指定的Job ,每次Scheduler调度执行一个Job的时候,首先会拿到对应的Job并创建其实例,再去执行Job中的execute()的内容,任务执行结束后,关联的Job对象实例会被释放,且会被JVM GC清除。 防止多线程下发生并发问题;
2、JobExecutionContext:保存着执行JobDeatil时所携带的参数信息

3、JobDateMap 是继承自Map中间保存数据的格式采用的是Key value ;
4、Trigger:触发器 会通知Scheduler具体执行任务的时间;
new Trigger().startAt():表示触发器首次被触发的时间;
new Trigger().endAt():表示触发器结束触发的时间;

五、通过特殊的Trigger触发器模型:
// 3、构建Trigger实例,每隔1s执行一次

Date startDate = new Date();
    startDate.setTime(startDate.getTime() + 5000);
    Date endDate = new Date();
    endDate.setTime(startDate.getTime() + 5000);
    CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "triggerGroup1")
            .usingJobData("Cron", "Cron类型的触发器")
            .startNow()//立即生效
            .startAt(startDate)
            .endAt(endDate)
            .withSchedule(CronScheduleBuilder.cronSchedule("* 30 10 ? * 1/5 2018"))
            .build();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值