此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.4! |
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.4! |
Spring Boot 为使用 Quartz 调度程序(包括 starter)提供了多种便利。
如果 Quartz 可用,则 a 是自动配置的(通过抽象)。spring-boot-starter-quartz
Scheduler
SchedulerFactoryBean
以下类型的 bean 将被自动选取并与 :Scheduler
-
JobDetail
:定义特定的 Job。 可以使用 API 构建实例。JobDetail
JobBuilder
-
Calendar
. -
Trigger
:定义何时触发特定作业。
默认情况下,使用 In-memory。
但是,如果您的应用程序中有 Bean 可用并且该属性已相应地配置,则可以配置基于 JDBC 的存储,如以下示例所示:JobStore
DataSource
spring.quartz.job-store-type
-
Properties
-
YAML
spring.quartz.job-store-type=jdbc
spring:
quartz:
job-store-type: "jdbc"
使用 JDBC 存储时,可以在启动时初始化架构,如以下示例所示:
-
Properties
-
YAML
spring.quartz.jdbc.initialize-schema=always
spring:
quartz:
jdbc:
initialize-schema: "always"
默认情况下,使用 Quartz 库提供的标准脚本检测和初始化数据库。
这些脚本会删除现有表,并在每次重启时删除所有触发器。
还可以通过设置 property 来提供自定义脚本。spring.quartz.jdbc.schema |
默认情况下,使用 Quartz 库提供的标准脚本检测和初始化数据库。
这些脚本会删除现有表,并在每次重启时删除所有触发器。
还可以通过设置 property 来提供自定义脚本。spring.quartz.jdbc.schema |
要让 Quartz 使用应用程序的 main 以外的其他 ,请声明一个 bean,并用 .
这样做可确保 Quartz 特定的 和 用于架构初始化。
同样,要让 Quartz 使用应用程序 main 以外的 a,请声明一个 bean,并用 .DataSource
DataSource
DataSource
@Bean
@QuartzDataSource
DataSource
SchedulerFactoryBean
TransactionManager
TransactionManager
TransactionManager
@Bean
@QuartzTransactionManager
默认情况下,通过配置创建的作业不会覆盖已从持久性作业存储中读取的已注册作业。
要启用覆盖现有作业定义,请设置该属性。spring.quartz.overwrite-existing-jobs
Quartz Scheduler 配置可以使用属性和 bean 进行自定义,这允许以编程方式进行自定义。
高级 Quartz 配置属性可使用 进行自定义。spring.quartz
SchedulerFactoryBeanCustomizer
SchedulerFactoryBean
spring.quartz.properties.*
特别是,bean 不与调度程序关联,因为 Quartz 提供了一种通过 配置调度程序的方法。
如果需要自定义任务执行程序,请考虑实施 .Executor spring.quartz.properties SchedulerFactoryBeanCustomizer |
特别是,bean 不与调度程序关联,因为 Quartz 提供了一种通过 配置调度程序的方法。
如果需要自定义任务执行程序,请考虑实施 .Executor spring.quartz.properties SchedulerFactoryBeanCustomizer |
Job 可以定义 setter 来注入数据映射属性。 常规 bean 也可以以类似的方式注入,如以下示例所示:
-
Java
-
Kotlin
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)
}
}