Spring Boot 为使用 Quartz 调度程序提供了多种便利,包括“Starter”。 如果 Quartz 可用,则自动配置 a(通过抽象)。spring-boot-starter-quartzSchedulerSchedulerFactoryBeanSpring中文文档

以下类型的 Bean 会自动被选取并与 :SchedulerSpring中文文档

默认情况下,使用内存中。 但是,如果应用程序中有可用的 Bean,并且相应地配置了该属性,那么可以配置基于 JDBC 的存储,如以下示例所示:JobStoreDataSourcespring.quartz.job-store-typeSpring中文文档

spring.quartz.job-store-type=jdbc
spring:
  quartz:
    job-store-type: "jdbc"

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

spring.quartz.jdbc.initialize-schema=always
spring:
  quartz:
    jdbc:
      initialize-schema: "always"
默认情况下,使用 Quartz 库提供的标准脚本检测和初始化数据库。 这些脚本删除现有表,并在每次重新启动时删除所有触发器。 也可以通过设置属性来提供自定义脚本。spring.quartz.jdbc.schema
默认情况下,使用 Quartz 库提供的标准脚本检测和初始化数据库。 这些脚本删除现有表,并在每次重新启动时删除所有触发器。 也可以通过设置属性来提供自定义脚本。spring.quartz.jdbc.schema

要让 Quartz 使用应用程序的 main 以外的 ,请声明一个 bean,并用 来注释它的方法。 这样做可以确保 和 用于架构初始化都使用 Quartz 特定的 Quartz。 类似地,要让 Quartz 使用应用程序的 main 以外的 bean,请用 .DataSourceDataSourceDataSource@Bean@QuartzDataSourceDataSourceSchedulerFactoryBeanTransactionManagerTransactionManagerTransactionManager@Bean@QuartzTransactionManagerSpring中文文档

默认情况下,配置创建的作业不会覆盖已从持久性作业存储中读取的已注册作业。 若要启用覆盖现有作业定义,请设置该属性。spring.quartz.overwrite-existing-jobsSpring中文文档

可以使用属性和 Bean 自定义 Quartz Scheduler 配置,从而允许编程定制。 可以使用 自定义高级 Quartz 配置属性。spring.quartzSchedulerFactoryBeanCustomizerSchedulerFactoryBeanspring.quartz.properties.*Spring中文文档

特别是,Bean 不与调度器关联,因为 Quartz 提供了一种通过 来配置调度器的方法。 如果需要自定义任务执行程序,请考虑实现 。Executorspring.quartz.propertiesSchedulerFactoryBeanCustomizer
特别是,Bean 不与调度器关联,因为 Quartz 提供了一种通过 来配置调度器的方法。 如果需要自定义任务执行程序,请考虑实现 。Executorspring.quartz.propertiesSchedulerFactoryBeanCustomizer

作业可以定义 setter 以注入数据映射属性。 普通豆子也可以以类似的方式注入,如以下示例所示:Spring中文文档

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import org.springframework.scheduling.quartz.QuartzJobBean;

public class MySampleJob extends QuartzJobBean {

	// fields ...

	private MyService myService;

	private String name;


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

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

	@Override
	protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
		this.myService.someMethod(context.getFireTime(), this.name);
	}

}
import org.quartz.JobExecutionContext
import org.springframework.scheduling.quartz.QuartzJobBean

class MySampleJob : QuartzJobBean() {

	// fields ...

	private var myService: MyService? = null

	private var name: String? = null

	// Inject "MyService" bean
	fun setMyService(myService: MyService?) {
		this.myService = myService
	}

	// Inject the "name" job data property
	fun setName(name: String?) {
		this.name = name
	}

	override fun executeInternal(context: JobExecutionContext) {
		myService!!.someMethod(context.fireTime, name)
	}

}