定时任务调度Quartz总结

前言

配置

pom.xml

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

application

  quartz:
    job-store-type: jdbc
    scheduler-name: SpringBootScheduler
    properties:
      org:
        quartz:
          scheduler:
            instanceName: MyScheduler   #此调度程序的名称,用来在用到多个调度器区分特定的调度器实例
            instanceId: NON_CLUSTERED #这个值必须是在所有调度器实例中是唯一的,尤其是在一个集群当中.想 Quartz 帮你生成这个值的话,可以设置为 AUTO。如果 Quartz 框架是运行在非集群环境中,那么自动产生的值将会是 NON_CLUSTERED
          jobStore:
            class: org.quartz.impl.jdbcjobstore.JobStoreTX
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
            tablePrefix: QRTZ_
            useProperties: false
            misfireThreshold: 60000
          threadPool:
            class: org.quartz.simpl.SimpleThreadPool
            threadCount: 25    #最多可以同时运行25个线程
            threadPriority: 5 #设置工作者的优先级 最高级别为10 ,最低级别为1
            threadsInheritContextClassLoaderOfInitializingThread: true

总结

核心类说明
Scheduler: 调度器,所有的调度都是由他控制
Scheduler即使Quartz的大脑,所有任务都是它来设置
Scheduler包含两个重要组件: JobStore和ThreadPool
JobStore是会来存储运行时的信息的,包含Trigger, Schedler , JobDetail , 业务锁
ThreadPool就是线程池,Quartz有自己的线程池实现,所有任务的都会由线程池执行

SchedulerFactory,顾名思义就是用来创建Scheduler了,有两个实现: DirectSchedulerFactory 和 StdSchedulerFactory,前者可以用来在代码里
定义你自己的Scheduler参数,后者时直接读取classpath下的quartz.properties(不存在就都使用默认值)配置来实例化scheduler.通常来将
我们使用StdulerFactory也就够了

SchedulerFactory 本身是支持创建RMT-stub的,可以用来管理远程scheduler,功能与本地一样

Trigger
1.SimpleTrigger
指定从某一个时间开始,以一定的时间间隔(单位是毫秒)执行的任务,它适合的任务类似于:09:00开始每个一小时,执行一次
他的属性有:
repeatInterval 重复问题
repeatCount 重复次数.实际执行次数是 repeatCount+1,因为在StartTime的时候一定会执行一次

    SimpleScheduleBuilder.simpleSchedule()
            .withIntervalInSeconds(10) //每隔10秒钟执行一次
            .repeatForever() //永远执行
            .build();

    SimpleScheduleBuilder.simpleSchedule()
            .withIntervalInMinutes(3) //每隔3分钟执行一次
            .withRepeatCount(3)  //执行3次
            .build();

CalendarIntervalTrigger
类似于SimpleTigger,指定从某一个时间开始,以一定的时间间隔执行任务,但是不同的是SimpleTigger指定的时间间隔为毫秒,没办法
指定每一个月执行一次(每月的时间间隔不是固定值),而CalendarIntervalTrigger支持的间隔单位为秒,分钟,小时,天,月,年,星期

    CalendarIntervalScheduleBuilder.calendarIntervalSchedule()
            .withIntervalInDays(2) //每2天执行一次
            .build();
    CalendarIntervalScheduleBuilder.calendarIntervalSchedule()
            .withIntervalInWeeks(1)  //每隔一周执行一次
            .build();

DailyTimeIntervalTrigger
指定某天的某个时间段内,以一定的时间间隔执行任务,并且它可以支持指定信息
它适合的任务类似于:指定每天9:00到18:00,每隔70秒钟执行一次,并且只要周一周五执行
它的属性有:
startTimerOfDay 每天开始时间
endTimerOfDay 每天结束时间
daysOfWeek 需要执行的星期
interval 执行间隔
intervalUtil 执行间隔的单位(秒 , 分钟 , 小时 , 天 , 月 , 年 , 星期)
repeatCount 重复次数

CronTrigger
适用于更复杂的任务,它支持类似于Linux Cron的语法,(并且更强大),基本上它覆盖了以上三个Trigger的绝大部分功能(但不是全部)
当然 也更难理解
它的属性只有: Cron表达式,但这个表达式本身就够复杂了

    CronScheduleBuilder.cronSchedule("0 0/2 10-12 * * ?") //每天10点-12点每两分钟执行一次
    .build();

    CronScheduleBuilder.weeklyOnDayAndHourAndMinute(MONDAY,9,30) //等同于 0 30 9 ?  * MON
    .build();
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值