Quartz定时任务配置参数的含义

quartz. job-store-type

指定Quartz调度器的数据存储方式,储存方式有以下几种:
① RAM:使用RAMJobStore存储任务数据,任务数据存储在内存中,适用于单节点环境。
② JDBC:使用JDBCJobStore存储任务数据,任务数据存储在关系型数据库中,适用于多节点环境。
③ JNDI:使用JNDIJobStore存储任务数据,任务数据存储在JNDI中,适用于多节点环境。
④ Quartz Scheduler API:使用Quartz Scheduler API存储任务数据,任务数据存储在内存中,适用于单节点环境。
其中,RAMJobStore和JDBCJobStore是最常用的两种数据存储方式。RAMJobStore适用于单节点环境,具有快速、简单、易用的特点,但是不支持集群模式和持久化存储;JDBCJobStore适用于多节点环境,具有可靠、稳定、可扩展的特点,但是需要配置数据库和数据源。


quartz. initialize-schema

指定Quartz调度器在启动时是否需要初始化数据存储库,需要注意的是,initialize-schema属性只有在使用JDBCJobStore时才有效。如果使用RAMJobStore或其他数据存储方式,则不需要配置该属性。取值方式有以下几种:
① true:表示Quartz调度器在启动时需要初始化数据存储库,即创建必要的表和索引。
② false:表示Quartz调度器在启动时不需要初始化数据存储库,即不会创建任何表和索引。
③ always:表示Quartz调度器每次启动时都会初始化数据存储库,即每次启动都会创建必要的表和索引。
④ embedded:表示Quartz调度器会在启动时使用嵌入式模式初始化数据存储库,即创建必要的表和索引,并将数据存储在内存中。
在实际应用中,可以根据实际需求和数据存储库的状态来选择合适的initialize-schema属性值。如果数据存储库是全新的或者之前没有创建过Quartz调度器的表和索引,则可以选择true或always;如果数据存储库已经存在Quartz调度器的表和索引,则可以选择false,以避免重复创建和覆盖数据。如果需要快速、简单地部署Quartz调度器,并且不需要持久化存储数据,则可以选择embedded模式。


quartz. auto-startup

用于指定Quartz调度器在启动时是否自动启动定时任务。取值方式如下:
① true:表示Quartz调度器在启动时自动启动定时任务。
② false:表示Quartz调度器在启动时不自动启动定时任务,需要手动调用start()方法启动定时任务。
需要注意的是,auto-startup属性只控制Quartz调度器在启动时是否自动启动定时任务,不影响已经添加到调度器中的任务。即使auto-startup属性为false,已经添加到调度器中的任务仍然可以正常执行。


quartz. startup-delay

用于指定Quartz调度器启动后延迟多长时间开始执行定时任务。该参数可以设置为一个时间间隔,例如1s、5m、10h等。使用startup-delay参数可以避免Quartz调度器启动时立即执行定时任务,从而减少启动时的负载和资源消耗。同时,也可以通过设置适当的延迟时间来确保Quartz调度器和相关资源已经完全初始化和准备就绪,以避免启动时出现异常和错误。


quartz.overwrite-existing-jobs

用于指定Quartz调度器在添加任务时是否覆盖已经存在的同名任务,取值方式如下:
① true:表示Quartz调度器在添加任务时会覆盖已经存在的同名任务。
② false:表示Quartz调度器在添加任务时不会覆盖已经存在的同名任务,会抛出ObjectAlreadyExistsException异常。


quartz.properties.org.quartz.scheduler.instanceName

用于指定Quartz调度器的实例名称。该属性可以设置为任意字符串,用于区分不同的Quartz调度器实例。使用instanceName属性可以方便地管理多个Quartz调度器实例,避免不同实例之间的混淆和冲突。例如,在一个分布式系统中,可以为每个节点的Quartz调度器设置不同的instanceName,以避免节点之间的任务冲突和重复执行。需要注意的是,instanceName属性必须是唯一的,不能与其他Quartz调度器实例的instanceName属性重复。如果重复了,则会导致Quartz调度器无法启动或执行任务。


quartz.properties.org.quartz.scheduler.instanceId

用于指定Quartz调度器的实例ID,取值方式如下:
① 任意参数:该属性可以设置为任意整数,用于区分不同的Quartz调度器实例。使用instanceId属性可以方便地管理多个Quartz调度器实例,避免不同实例之间的混淆和冲突。例如,在一个分布式系统中,可以为每个节点的Quartz调度器设置不同的instanceId,以避免节点之间的任务冲突和重复执行。
② AUTO:如果属性设置为Auto,则Quartz调度器会自动为每个实例分配一个唯一的instanceId,Quartz调度器会根据当前时间和随机数生成一个唯一的instanceId。


quartz.properties.org.quartz.jobStore.class

用于指定Quartz调度器的任务存储方式,取值方式如下:
1.org.quartz.simpl.RAMJobStore:使用内存存储任务数据,适用于轻量级应用。
2.org.quartz.impl.jdbcjobstore.JobStoreTX:使用JDBC存储任务数据,支持事务管理和集群部署。
3.org.quartz.impl.jdbcjobstore.JobStoreCMT:使用JDBC存储任务数据,支持容器管理事务和集群部署。
4.org.quartz.impl.jdbcjobstore.PostgreSQLDelegate:使用PostgreSQL数据库存储任务数据。
5.org.quartz.impl.jdbcjobstore.StdJDBCDelegate:使用标准的JDBC数据库存储任务数据。
6.org.quartz.impl.jdbcjobstore.oracle.OracleDelegate:使用Oracle数据库存储任务数据。
7.org.quartz.impl.jdbcjobstore.weblogic.WebLogicDelegate:使用WebLogic数据库存储任务数据。
8.org.quartz.impl.jdbcjobstore.mssql.MSSQLDelegate:使用Microsoft SQL Server数据库存储任务数据。
9.org.quartz.impl.jdbcjobstore.h2.H2Delegate:使用H2数据库存储任务数据。
10.org.quartz.impl.jdbcjobstore.SQLiteDelegate:使用SQLite数据库存储任务数据。
11.org.quartz.impl.jdbcjobstore.TerracottaJobStore:使用Terracotta存储任务数据,适用于分布式应用。
12.org.springframework.scheduling.quartz.LocalDataSourceJobStore:使用Spring提供的LocalDataSourceJobStore作为任务存储方式,支持事务管理和集群部署。


quartz.properties.org.quartz.jobStore.tablePrefix

用于指定Quartz调度器的任务存储方式所使用的数据库表前缀


quartz.properties.org.quartz.jobStore.isClustered

用于指定Quartz调度器是否为集群模式。该属性可以设置为true或false,用于指定Quartz调度器是否为集群模式。
如果将isClustered属性设置为true,则表示Quartz调度器为集群模式,可以在多个节点上运行。在集群模式下,Quartz调度器会使用数据库表来存储任务数据,并使用数据库锁来保证任务的唯一性和一致性。


quartz.properties.org.quartz.jobStore.misfireThreshold

用于指定Quartz调度器的任务触发器的misfire阈值。该属性可以设置为整数类型的值,用于指定Quartz调度器的任务触发器在misfire时的处理方式。misfireThreshold属性的值表示任务触发器允许的misfire时间,单位为毫秒。如果任务触发器的misfire时间超过了misfireThreshold属性的值,则任务触发器将被认为是misfire,并根据misfire处理策略进行处理。
misfire处理策略有如下几种方式:
① MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY:忽略misfire,继续执行任务触发器的下一次调度。
② MISFIRE_INSTRUCTION_SMART_POLICY:根据任务触发器的类型和状态来智能地处理misfire。例如,如果任务触发器为SimpleTrigger类型,则会根据任务触发器的重复次数和间隔时间来计算下一次调度时间;如果任务触发器为CronTrigger类型,则会根据任务触发器的cron表达式来计算下一次调度时间。
③ MISFIRE_INSTRUCTION_FIRE_ONCE_NOW:立即执行任务触发器的misfire任务,然后继续执行任务触发器的下一次调度。
④ MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT:立即重新调度任务触发器,并使用任务触发器的重复次数来计算下一次调度时间。
⑤ MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT:立即重新调度任务触发器,并使用任务触发器的剩余重复次数来计算下一次调度时间。


quartz.properties.org.quartz.jobStore.clusterCheckinInterval

该属性可以设置为整数类型的值,用于指定Quartz调度器在集群模式下向数据库更新自身状态的时间间隔。需要注意的是,clusterCheckinInterval属性的值应该根据实际的业务场景和集群规模进行设置。如果集群规模较大,则可以适当增加clusterCheckinInterval属性的值,以减少数据库的压力;如果集群规模较小,则可以适当减小clusterCheckinInterval属性的值,以提高调度的精度。


quartz.properties.org.quartz.threadPool

用于指定Quartz调度器的线程池配置。该属性可以设置为一个键值对列表,用于指定Quartz调度器的线程池大小、线程优先级、线程名称前缀等参数。
具体的线程池配置参数包括:
① threadCount:线程池大小,表示Quartz调度器最多可以同时执行的任务数。
② threadPriority:线程优先级,表示Quartz调度器线程的优先级。
③ threadsInheritContextClassLoaderOfInitializingThread:是否继承初始化线程的上下文类加载器。
④ makeThreadsDaemons:是否将Quartz调度器线程设置为守护线程。
⑤ threadNamePrefix:线程名称前缀,用于标识Quartz调度器线程的名称。
需要注意的是,线程池的大小应该根据实际的业务场景和系统资源进行设置。如果系统资源充足,则可以适当增加线程池的大小,以提高任务的并发度;如果系统资源有限,则应该适当减小线程池的大小,以避免系统资源的浪费。


Quartz示例配置

 ## quartz定时任务,采用数据库方式
  quartz:
    job-store-type: jdbc
    initialize-schema: embedded
    #定时任务启动开关,true-开  false-关
    auto-startup: true
    #延迟1秒启动定时任务
    startup-delay: 1s
    #启动时更新己存在的Job
    overwrite-existing-jobs: true
    properties:
      org:
        quartz:
          scheduler:
            instanceName: MyScheduler
            instanceId: AUTO
          jobStore:
            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
            tablePrefix: QRTZ_
            isClustered: true
            misfireThreshold: 12000
            clusterCheckinInterval: 15000
          threadPool:
            class: org.quartz.simpl.SimpleThreadPool
            threadCount: 10
            threadPriority: 5
            threadsInheritContextClassLoaderOfInitializingThread: true

以上是通过yaml文件配置Quartz的示例。


猜你喜欢

转载自blog.csdn.net/m0_37742400/article/details/130742051
今日推荐