Skip to content

Latest commit

 

History

History
59 lines (35 loc) · 2.06 KB

File metadata and controls

59 lines (35 loc) · 2.06 KB

39. Quartz Scheduler

Spring Boot 为使用 Quartz Scheduler 提供了一些便利,包括 spring-boot-starter-quartz “Starter”。如果 Quartz 可用,则自动配置 Scheduler(通过 SchedulerFactoryBean 抽象)。

自动选择以下类型的 Bean 并将其与 Scheduler 关联:

  • JobDetail:定义一个特定的 Job。可以使用 JobBuilder API 构建 JobDetail 实例。

  • Calendar

  • Trigger:定义何时触发特定作业。

默认情况下,使用内存中的 JobStore 。但是,如果应用程序中有 DataSource bean,并且相应地配置了 spring.quartz.job-store-type 属性,则可以配置基于 JDBC 的存储,如以下示例所示:

spring.quartz.job-store-type=jdbc

使用 JDBC 存储时,可以在启动时初始化架构,如以下示例所示:

spring.quartz.jdbc.initialize-schema=always

☀️ 默认情况下,使用 Quartz 库提供的标准脚本检测并初始化数据库。也可以通过设置 spring.quartz.jdbc.schema 属性来提供自定义脚本。

Quartz Scheduler 配置可以使用 Quartz 配置属性( spring.quartz.properties。* )和 SchedulerFactoryBeanCustomizer bean进行自定义,它允许程序化 SchedulerFactoryBean 自定义。

☀️ 特别是,Executor bean 与调度程序没有关联,因为 Quartz 提供了一种通过 spring.quartz.properties 配置调度程序的方法。如果需要自定义任务执行程序,请考虑实现 SchedulerFactoryBeanCustomizer

Jobs 可以定义 setter 以注入数据映射属性。也可以以类似的方式注入常规 bean,如以下示例所示:

public class SampleJob extends QuartzJobBean {

	private MyService myService;

	private String name;

	// Inject "MyService" bean
	public void setMyService(MyService myService) { ... }

	// Inject the "name" job data property
	public void setName(String name) { ... }

	@Override
	protected void executeInternal(JobExecutionContext context)
			throws JobExecutionException {
		...
	}

}