代码之家  ›  专栏  ›  技术社区  ›  User5817351

在特定主机上运行特定的Quartz作业

  •  0
  • User5817351  · 技术社区  · 7 年前

    我在集群模式下运行的石英作业很少。有些是IO密集型,有些是CPU密集型作业。我要做的是在特定主机上运行CPU绑定的作业,在另一组主机上运行IO绑定的作业。是否有任何配置可以白名单一组可以在特定机器上运行的作业?我不想再创造一套石英表做这种事。

    技术:Spring Boot、Oracle、Quartz 2.x

    谢谢!

    2 回复  |  直到 7 年前
        1
  •  0
  •   Truth    7 年前

    我建议在Jobstore中,对这些特定机器的每个作业使用pausejob或pausejobgroup。

    或者也可以通过SQL使用pause

    或者通过环境设置,可以切换到要禁用的作业。

        2
  •  0
  •   User5817351    7 年前

    我这样做的方法是根据在jvm startup参数中传递的属性创建不同的调度程序实例。我使用了SpringQuartz集成,这里是它的示例代码。最重要的部分是将不应该运行的调度程序的自动启动设置为false。这样我就可以创建不同的调度程序,但只启动在属性中配置的调度程序。

     @Bean
    public SchedulerFactoryBean schedulerFactory(DataSource dataSource, JobFactory jobFactory)
            throws IOException {
        SchedulerFactoryBean factory = new SchedulerFactoryBean();
        factory.setBeanName("myscheduler");
        factory.setDataSource(dataSource);
        factory.setJobFactory(jobFactory);
        factory.setQuartzProperties(getQuartzProperties());
        if (!System.getProperty(SCHEDULER_NAME).contains("myscheduler")) {
            factory.setAutoStartup(false);
        }
        return factory;
    }