Springboot Quartz 配置方式

package com.gblfy.cmiip.modular.quartz.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

import javax.sql.DataSource;
import java.util.Properties;

/**
 * 定时任务配置
 * 
 * @author gblfy
 */
@Configuration
public class ScheduleConfig
{
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource)
    {
        SchedulerFactoryBean factory = new SchedulerFactoryBean();
        factory.setDataSource(dataSource);

        // quartz参数
        Properties prop = new Properties();
        //调度标识名 集群中每一个实例都必须使用相同的名称
        prop.put("org.quartz.scheduler.instanceName", "CmiipScheduler");
        //调度器实例编号自动生成,每个实例不能不能相同
        prop.put("org.quartz.scheduler.instanceId", "AUTO");

        // 线程池配置
        //实例化ThreadPool时,使用的线程类为SimpleThreadPool(一般使用SimpleThreadPool即可满足几乎所有用户的需求)
        prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
        //并发个数,指定线程数,至少为1(无默认值)(一般设置为1-100之间的的整数合适)
        prop.put("org.quartz.threadPool.threadCount", "20");
        //设置线程的优先级(最大为java.lang.Thread.MAX_PRIORITY 10,最小为Thread.MIN_PRIORITY 1,默认为5)
        prop.put("org.quartz.threadPool.threadPriority", "5");

        // 数据库方式 JobStore配置
        prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
        //持久化方式配置数据驱动,ORACLE数据
        prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.oracle.OracleDelegate");

        //开启分布式部署,集群
        prop.put("org.quartz.jobStore.isClustered", "true");

        //分布式节点有效性检查时间间隔,单位:毫秒,默认值是15000
        prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000");
        prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1");
        prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "false");

        //容许的最大作业延长时间,最大能忍受的触发超时时间,如果超过则认为"失误",不敢再内存中还是数据中都要配置
        prop.put("org.quartz.jobStore.misfireThreshold", "12000");
        //quartz相关数据表前缀名
        prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
        factory.setQuartzProperties(prop);

        //调度标识名 集群中每一个实例都必须使用相同的名称
        factory.setSchedulerName("CmiipScheduler");
        // 延时启动
        factory.setStartupDelay(1);
        factory.setApplicationContextSchedulerContextKey("applicationContextKey");
        // 可选,QuartzScheduler
        // 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了
        factory.setOverwriteExistingJobs(true);
        // 设置自动启动,默认为true
        factory.setAutoStartup(true);

        return factory;
    }
}

spring:
  # quartz 调度器配置
  quartz:
    job-store-type: jdbc #数据持久化方式,可选值:MEMORY、JDBC
    auto-startup: true   #初始化后是否自动启动计划程序,默认为  true
    overwrite-existing-jobs: true #配置的作业是否应覆盖现有的作业定义
    scheduler-name: CmiipScheduler # 计划程序的名称
    startup-delay: 10s #初始化完成后启动计划程序的延迟时间,默认为 0 秒
    wait-for-jobs-to-complete-on-shutdown: false # 关闭时是否等待正在运行的作业完成

    #对于 Quartz 自带的配置,即可以使用 quartz 自己的 quartz.properties 配置文件进行配置,也可以直接配置在 properties 属性下,它是一个 map
    #quartz 完整配置:https://wangmaoxiong.blog.csdn.net/article/details/105057405#quartz.properties%20%E4%B8%8E%20QuartzProperties%20%E9%85%8D%E7%BD%AE%E9%80%89%E9%A1%B9
    properties:
      org:
        quartz:
          jobStore:
            #如果不需要将调度命令(例如添加和删除triggers)绑定到其他事务,那么可以通过使用 JobStoreTX 管理事务
            class: org.quartz.impl.jdbcjobstore.JobStoreTX
            #设置数据库驱动代理,StdJDBCDelegate 是一个使用 JDBC 代码来执行其工作的代理. 其他代理可以在"org.quartz.impl.jdbcjobstore“包或其子包中找到
            driverDelegateClass: org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
            #通知 JobStore 使用的表前缀
            tablePrefix: QRTZ_
            misfireThreshold: 12000
            #是否加入集群
            isClustered: true
            ##容许的最大作业延长时间
            clusterCheckinInterval: 20000
            maxMisfiresToHandleAtATime: 1
            txIsolationLevelSerializable: false
          threadPool:
            class: org.quartz.simpl.SimpleThreadPool  #quartz 使用的线程池类型,org.quartz.spi.ThreadPool
            threadCount: 20   #线程池中的线程总个数,表示最多可以同时执行的个任务/作业个数
            threadPriority: 5   #线程优先级
            threadsInheritContextClassLoaderOfInitializingThread: true #线程继承初始化线程的上下文类加载器
          scheduler:
            #quartz 调度器实例名称,相当于微服务架构中的微服务名称,instanceId 相当于微服务多实例时的节点 id
            #如果指定了 spring.quartz.scheduler-name 属性,则优先以它为准,此时 instanceName 不会生效.
            instanceName: CmiipScheduler
            #实例id设置为自动获取,集群下的所有调度器实例id 必须为唯一.
            instanceId: AUTO
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:上身试试 返回首页