Quartz的简单记录

Quartz

spring boot中使用

 <!--SpringBoot集成QuartZ-->
 <dependency>
 	<groupId>org.springframework.boot</groupId>
 	<artifactId>spring-boot-starter-quartz</artifactId>
 </dependency>

==注意:==如果要重写quartz的配置文件,只需要在类路径下写quartz.properties文件

  1. 执行任务的类需要实现``Job或者Job的子类QuartzJobBean`进行业务操作

    • 如果在该方法中实现调用其它service中的方法,需要通过applicationContext上下文注入该bean
  2. 使用调度器调度任务

    • JobBuilder.newJob ->JobDetail

    • TriggerBuilder.newTrigger ->CronTrigger

    • scheduler.scheduleJob(jobDetail, cronTrigger);

//其它方法:
//暂停触发器
 scheduler.pauseTrigger(new TriggerKey(jobName, defaultGroup));
// 移除触发器中的任务
scheduler.unscheduleJob(new TriggerKey(jobName, defaultGroup));
// 删除任务
scheduler.deleteJob(new JobKey(jobName, defaultGroup));

多线程下保证schedule是同一个

@Component
public class TaskSchedulerFactory {
    protected final Logger log = LoggerFactory.getLogger(TaskSchedulerFactory.class);
    private volatile Scheduler scheduler;

    /**
     * 获得scheduler实例
     */
    public Scheduler getScheduler() {
        Scheduler s = scheduler;
        if (s == null) {
            synchronized (this) {
                s = scheduler;
                if (s == null) {
                    // 双重检查
                    try {
                        SchedulerFactory sf = new StdSchedulerFactory();
                        s = scheduler = sf.getScheduler();
                    } catch (Exception e) {
                        log.error("Get scheduler error :" + e.getMessage(), e);
                    }
                }
            }
        }

        return s;
    }
}

quartz.properties

org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 20
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true

org.quartz.jobStore.misfireThreshold: 60000

org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore

org.quartz.scheduler.skipUpdateCheck: true
##===============================================================
##配置文件不是必须的,Quartz对配置项都是有默认值的,当需要自定义的时候,
##可以在classpath路径下放一个quartz.properties文件,Quartz的StdSchedulerFactory
##在启动时会自动加载该配置文件。
##===============================================================
#
#
##===============================================================
##配置主调度程序的属性
##===============================================================
#org.quartz.scheduler.instanceName = DefaultQuartzScheduler
#org.quartz.scheduler.rmi.export = false
#org.quartz.scheduler.rmi.proxy = false
#org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
##当检查某个Trigger应该触发时,默认每次只Acquire一个Trigger,(为什么要有Acquire的过程呢?是为了防止多线程访问的情况下,
##同一个Trigger被不同的线程多次触发)。尤其是使用JDBC JobStore时,一次Acquire就是一个update语句,尽可能一次性的多获取
##几个Trigger,一起触发,当定时器数量非常大的时候,这是个非常有效的优化。当定时器数量比较少时,触发不是极为频繁时,
##这个优化的意义就不大了。
#org.quartz.scheduler.batchTriggerAcquisitionMaxCount=50
#
##===============================================================
##配置线程池的属性
##===============================================================
#org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
##线程池里的线程数,默认值是10,当执行任务会并发执行多个耗时任务时,要根据业务特点选择线程池的大小。
#org.quartz.threadPool.threadCount = 4
#org.quartz.threadPool.threadPriority = 5
#org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
#
##===============================================================
##配置JobStore的属性
##===============================================================
#org.quartz.jobStore.misfireThreshold = 60000
#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值