Spring Boot为使用Quartz Scheduler提供了许多便利,包括spring-boot-starter-quartz“ Starter”。如果Quartz可用,则将Scheduler自动配置a(通过SchedulerFactoryBean抽象)。
    以下类型的Bean会被自动拾取并与关联Scheduler

    • JobDetail:定义特定的作业。 JobDetail实例可以使用JobBuilderAPI构建。
    • Calendar
    • Trigger:定义何时触发特定作业。

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

    1. spring.quartz.job-store-type=jdbc

    使用JDBC存储时,可以在启动时初始化模式,如以下示例所示:
    物产
    Yaml

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

    要让Quartz使用DataSource应用程序的main之外的其他代码DataSource,请声明一个DataSourcebean,并用注释其@Bean方法@QuartzDataSource。这样做可以确保和DataSource都使用特定于Quartz的SchedulerFactoryBean模式进行初始化。
    默认情况下,通过配置创建的作业将不会覆盖从持久性作业存储中读取的已注册作业。要启用覆盖现有作业定义的功能,请设置该spring.quartz.overwrite-existing-jobs属性。
    可以使用spring.quartz属性和SchedulerFactoryBeanCustomizerbean自定义Quartz Scheduler配置,从而可以进行程序SchedulerFactoryBean自定义。可以使用定制高级Quartz配置属性spring.quartz.properties.*

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

    作业可以定义设置器以注入数据映射属性。常规豆也可以类似的方式注入,如以下示例所示:

    1. public class SampleJob extends QuartzJobBean {
    2. private MyService myService;
    3. private String name;
    4. // Inject "MyService" bean
    5. public void setMyService(MyService myService) { ... }
    6. // Inject the "name" job data property
    7. public void setName(String name) { ... }
    8. @Override
    9. protected void executeInternal(JobExecutionContext context)
    10. throws JobExecutionException {
    11. ...
    12. }
    13. }