Quartz Scheduler
Spring Boot为使用Quartz调度程序提供了一些便利 ,包括 spring-boot-starter-quartz
“Starter”。如果Quartz可用,Scheduler
则自动配置a(通过SchedulerFactoryBean
抽象)。
自动拾取以下类型的豆并与以下相关联 Scheduler
:
JobDetail
:定义一个特定的Job。JobDetail
可以使用JobBuilder
API 构建实例 。Calendar
。Trigger
:定义何时触发特定作业。
默认情况下,使用内存JobStore
。但是,如果DataSource
应用程序中有bean可用,并且相应地spring.quartz.job-store-type
配置了 属性,则可以配置基于JDBC的存储,如以下示例所示:
1 | spring.quartz.job-store-type=jdbc |
使用JDBC存储时,可以在启动时初始化模式,如以下示例所示:
1 | spring.quartz.jdbc.initialize-schema=always |
默认情况下,使用Quartz库提供的标准脚本检测并初始化数据库。这些脚本删除现有表,在每次重启时删除所有触发器。也可以通过设置
spring.quartz.jdbc.schema
属性来提供自定义脚本 。
要让Quartz使用DataSource
除应用程序main之外的其他东西DataSource
,请声明一个DataSource
bean,用它来注释其@Bean
方法@QuartzDataSource
。这样做可确保 架构初始化和架构初始化DataSource
都使用Quartz特定的SchedulerFactoryBean
。
默认情况下,配置创建的作业不会覆盖已从永久性作业存储读取的已注册作业。要启用覆盖现有作业定义,请设置该spring.quartz.overwrite-existing-jobs
属性。
可以使用spring.quartz
属性和 SchedulerFactoryBeanCustomizer
bean 自定义Quartz Scheduler配置,这允许进行编程SchedulerFactoryBean
自定义。可以使用高级Quartz配置属性进行自定义 spring.quartz.properties.*
。
特别是,
Executor
bean不与调度程序相关联,因为Quartz提供了一种通过配置调度程序的方法spring.quartz.properties
。如果需要自定义任务执行程序,请考虑实现SchedulerFactoryBeanCustomizer
。
作业可以定义setter以注入数据映射属性。也可以以类似的方式注入常规bean,如以下示例所示:
1 | public class SampleJob extends QuartzJobBean { |
任务执行和调度
在Executor
上下文中没有bean的情况下,Spring Boot会自动配置一个 ThreadPoolTaskExecutor
合理的默认值,这些默认值可以自动关联到异步任务执行(@EnableAsync
)和Spring MVC异步请求处理。
如果您
Executor
在上下文中定义了自定义,则常规任务执行(即@EnableAsync
)将透明地使用它,但不会配置Spring MVC支持,因为它需要AsyncTaskExecutor
实现(命名applicationTaskExecutor
)。根据您的目标安排,您可以将您更改Executor
为aThreadPoolTaskExecutor
或定义aThreadPoolTaskExecutor
和AsyncConfigurer
包装自定义Executor
。自动配置
TaskExecutorBuilder
允许您轻松创建实例,以重现默认情况下自动配置的功能。
线程池使用8个核心线程,可根据负载增长和缩小。可以使用spring.task.execution
命名空间对这些默认设置进行微调,如以下示例所示:
1 | spring.task.execution.pool.max-threads=16 |
这会将线程池更改为使用有界队列,以便在队列满(100个任务)时,线程池增加到最多16个线程。当线程在闲置10秒(而不是默认为60秒)时回收线程时,池的收缩会更加激进。
ThreadPoolTaskScheduler
如果需要与计划任务执行(@EnableScheduling
)相关联,也可以自动配置A. 默认情况下,线程池使用一个线程,并且可以使用spring.task.scheduling
命名空间对这些设置进行微调。
既是TaskExecutorBuilder
豆和TaskSchedulerBuilder
绿豆可在上下文提供如果自定义遗嘱执行人或调度需要创建。