每天进步一点点--------- quartz定时任务

遇到定时任务相关,专业白嫖B站《【千锋】2020年-Ja-va-Quartz教程》,记录一下学习过程,一天肯定是搞不定的,持续更新吧,最后也发现千峰的好像少一点深度,《2021最新版springboot整合quartz,quartz集群教程》也需要一看。

Maven依赖引入

从maven的仓库可以很简单的查到相关的依赖

        <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.3.2</version>
        </dependency>

在这里插入图片描述

Hello工程

Quatrz最重要的三个概念
(1)调度器 相当于天猫精灵的实体,用于根据给定的定时策略执行给定的定时任务
(2)任务 相当于给天猫精灵下发的指令,比如叫我吃饭,提醒我喝水等
(3)触发器 相当于下发的策略,即 几点
简单的Hello工程如下:

// 继承Job,写任务需要做什么
@Slf4j
public class HelloJob implements Job {

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        JobDetail detail = jobExecutionContext.getJobDetail();
        log.info("job name:{},job group:{},job data:{}",
                detail.getKey().getName(),
                detail.getKey().getGroup(),
                detail.getJobDataMap().getString("data"));
    }
}

调度器和触发器

        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // 调度器
        TriggerBuilder triggerBuilder = TriggerBuilder.newTrigger();  // 触发器  什么时候执行与执行的策略
        Trigger trigger = triggerBuilder.withIdentity("trigger1", "group1").startNow().
                withSchedule(SimpleScheduleBuilder.
                        simpleSchedule().
                        withIntervalInSeconds(2).
                        repeatForever()).build();
        // 将任务加进来
        JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("job04","group04").
                usingJobData("data","testJob04").build();

		// 调度器执行,此处一直没有停止调度器
        scheduler.scheduleJob(job,trigger);
        scheduler.start();

在这里插入图片描述

多种触发器

触发器有很多种,常用的接口如下:
在这里插入图片描述
SimpleTrigger已经在Hello工程中使用:
间隔只有小时、分钟和秒

SimpleScheduleBuilder.
                        simpleSchedule().
                        withIntervalInSeconds(2).
                        repeatForever()

CalendarIntervalTrigger:按照日历执行,仅简单触发器需要些repeatForever或者是否一直执行

CalendarIntervalScheduleBuilder.calendarIntervalSchedule().withIntervalInWeeks(1)

DailyTimeIntervalTrigger

DailyTimeIntervalScheduleBuilder.dailyTimeIntervalSchedule()
                                .startingDailyAt(TimeOfDay.hourAndMinuteOfDay(9,10))
                                .endingDailyAt(TimeOfDay.hourAndMinuteOfDay(9,30))
                                .onDaysOfTheWeek(DateBuilder.MONDAY,DateBuilder.THURSDAY)
                                .withIntervalInHours(2).withRepeatCount(10)

CronTrigger
类似于Linux的crontab定时任务,可以使用注解的方式

并发

(1)同一个任务,间隔时间短,任务执行周期长的时,会重启起一个任务,再次执行这个任务,如果想等本次执行完成,则需要在Job上增加@DisallowConcurrentExecution注解,即同一Job,未执行完时,间隔时间又到时,会等待执行完成后,再次执行
(2)添加很多的任务,都并发,如何防止任务的并发爆炸呢
org.quartz.threadPool.threadCount=50 即最多50个任务,包含所有,即同一Job如果允许并发运行,是可能会超出的

持久化

持久化请参考:https://blog.csdn.net/Elliottx/article/details/78904247

集群

Quartz与@Schedule的比较

(1)Quartz支持集群

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值