控制 Quartz 是否启动

  1. 1. 如何实现
    1. 1.0.1. 1. 调整 SchedulerFactoryBean 配置
    2. 1.0.2. 2. 通过给 Configuration 类上加 @Conditional
  • 2. 差别
  • 在开发集成了 Quartz 的应用时,由于 Quartz 在开发环境一般也会自动启动。这样会给人造成不少烦恼,一个是启动 Job 会影响本地的运行效率,同时如果是分布 式模式的 Quartz 会出现本地抢任务运行,又由于本地和测试环境的各种不一致,会出现很多奇怪问题。

    如何实现

    关闭 Quartz 一般有两种方法

    1. 调整 SchedulerFactoryBean 配置

    SchedulerFactoryBean 对象中有个配置 autoStartup,用于控制 Quartz 是否自动启动,默认值是 true,在启动应用的时候 Quartz 时会自动启动。

    我们可以通过自定义配置文件的方式修改该值,实现本地不启动 Quartz。在 Spring Boot 中可以用以下方式配置:

    1
    2
    3
    4
    5
    6
    @Bean
    public SchedulerFactoryBeanCustomizer schedulerFactoryBeanCustomizer() {
    return schedulerFactoryBean -> {
    schedulerFactoryBean.setAutoStartup(false);
    };
    }
    2. 通过给 Configuration 类上加 @Conditional

    Spring Boot 中用 Configuration 来配置,我们可以在整个 Quartz 的集成 Configuration 配置类上用 @Conditional 注解将整个配置类禁用掉, 这样 Quartz 在本地就相当于没有集成。

    差别

    以上两种方法,第一种只将 Quartz 的 start 给禁用,变动小。第二种实际上可能要对每个用 Quartz bean 的类也要做一下 @Conditional,相对来说影响范围更大。