2

39. Quartz Scheduler

Spring Boot为使用Quartz Scheduler提供了一些方便,引入spring-boot-starter-quartz“启动器”,如果Quartz是可用的,则将自动配置Scheduler(通过抽象的SchedulerFactoryBean)。

下列类型的bean将自动被拾取并与Scheduler关联:

  • JobDetail:定义一个特定的工作,JobDetail实例可以使用JobBuilder API构建。
  • Calendar
  • Trigger:定义何时触发特定工作。

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

spring.quartz.job-store-type=jdbc

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

spring.quartz.jdbc.initialize-schema=always
默认情况下,通过使用Quartz库提供的标准脚本检测和初始化数据库,还可以通过设置spring.quartz.jdbc.schema属性提供自定义脚本。

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

特别是,Executor bean不与scheduler相关联,因为Quartz提供了一种通过spring.quartz.properties配置scheduler的方法,如果需要自定义任务执行程序,请考虑实现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 {
        ...
    }

}

上一篇:Hazelcast
下一篇:Spring Integration

博弈
2.5k 声望1.5k 粉丝

态度决定一切