栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot2.3整合Quartz实现简单定时任务

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot2.3整合Quartz实现简单定时任务

1. 概述

Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单而强大的机制。更多介绍,请参阅Quartz官网

1.1. 核心概念

Job
表示任务,是一个接口,只有一个方法

void execute(JobExecutionContext context);

开发一个新任务时,只需要实现该接口就能运行任务
JobDetail
任务描述,在每次执行实例时都重新创建一个job实例,不直接接受一个job实例,而是通过接受一个job实现类
Trigger
触发器,主要有SimpleTrigger和CronTrigger两个子类,当仅触发一次或者以固定时间间隔周期执行时,使用SimpleTrigger。CronTrigger通过cron表达式,定义出各种复杂时间规则的调度方案
Scheduler
调度器,代表Quartz的一个独立运行容器,Trigger和JobDetail需要注册到Scheduler中。

2. 核心依赖

新建一个springboot项目,引入核心依赖


    org.springframework.boot
    spring-boot-starter-quartz


    org.springframework.boot
    spring-boot-starter-web

3. 编写任务实现

cron表达式实现

public class CronJob extends QuartzJobBean {

    private static final Logger logger = LoggerFactory.getLogger(CronJob.class);

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        logger.info("执行当前任务开始,时间为:{}", LocalDateTime.now());
    }
}

时间间隔实现

public class SimpleJob extends QuartzJobBean {

    private static final Logger logger = LoggerFactory.getLogger(SimpleJob.class);

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        logger.info("start job...当前时间为:{}", LocalDateTime.now());
        try {
            Thread.sleep(3000);
            logger.info(context.getScheduler().getSchedulerInstanceId());
            logger.info("task name is {}", context.getJobDetail().getKey().getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        logger.info("end job...当前时间为:{}", LocalDateTime.now());
    }
}
4. 配置类

将任务实现类注册到schedule中

@Configuration
public class ScheduleConfig {

    @Bean
    public JobDetail simpleJobDetail() {
        return JobBuilder.newJob(SimpleJob.class).withIdentity("simpleJobDetail").storeDurably().build();
    }

    @Bean
    public Trigger simpleTrigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(20).repeatForever();
        return TriggerBuilder.newTrigger()
                .forJob(simpleJobDetail())
                .withIdentity("simpleTrigger")
                .withSchedule(scheduleBuilder)
                .build();
    }

    @Bean
    public JobDetail cronJobDetail() {
        return JobBuilder.newJob(CronJob.class).withIdentity("cronJobDetail").storeDurably().build();
    }

    @Bean
    public Trigger cronTrigger() {
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/30 * * * * ?");
        return TriggerBuilder.newTrigger()
                .forJob(cronJobDetail())
                .withIdentity("cronTrigger")
                .withSchedule(scheduleBuilder)
                .build();
    }
}
5. 验证

启动项目,验证结果

2021-11-01 17:54:44.485  INFO 21104 --- [eduler_Worker-3] com.xlhj.boot.job.SimpleJob              : start job...当前时间为:2021-11-01T17:54:44.485
2021-11-01 17:54:47.489  INFO 21104 --- [eduler_Worker-3] com.xlhj.boot.job.SimpleJob              : NON_CLUSTERED
2021-11-01 17:54:47.490  INFO 21104 --- [eduler_Worker-3] com.xlhj.boot.job.SimpleJob              : task name is simpleJobDetail
2021-11-01 17:54:47.490  INFO 21104 --- [eduler_Worker-3] com.xlhj.boot.job.SimpleJob              : end job...当前时间为:2021-11-01T17:54:47.490
2021-11-01 17:55:00.016  INFO 21104 --- [eduler_Worker-4] com.xlhj.boot.job.CronJob                : 执行当前任务开始,时间为:2021-11-01T17:55:00.016
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/390257.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号