Quartz Scheduler / Multiple(非Clustered)调度程序实例

时间:2015-01-15 14:29:27

标签: java quartz-scheduler

对于我的生活,我似乎无法弄清楚如何配置Quartz以拥有两个调度程序实例。我目前使用quartz来获得一个调度程序实例但是想要两个实例,如documentation中所述,因为我有一些轻量级的工作,我想在需要的时候运行,同时将一些重量级工作限制为几个实例......正如文档所描述的那样,但无法弄清楚。

有人能给我一个关于属性文件应该是什么样子以及如何实例化单独调度程序的快速示例吗?

3 个答案:

答案 0 :(得分:3)

我没有通过属性文件配置它们的经验,但我以这种方式设置了我的设置:

  FileAppender fa = new FileAppender(new PatternLayout("%d{[dd/MM/yyy HH:mm:ss]} :: %2p :: %C{1} : %M :: %m%n"),
          ".\LogFiles\scheduler.log");
  fa.setName("QuartzScheduler");
  fa.setThreshold(Level.ALL);
  fa.setAppend(true);
  fa.activateOptions();
  org.apache.log4j.Logger.getLogger("org.quartz").addAppender(fa);
  org.apache.log4j.Logger.getLogger("org.quartz").setLevel(Level.INFO);
  SimpleThreadPool threadPool = new SimpleThreadPool(25, Thread.NORM_PRIORITY);
  JobStore jobStore = new RAMJobStore();
  threadPool.setInstanceName("MyQuartz");
  DirectSchedulerFactory.getInstance().createScheduler(threadPool, jobStore);
  Scheduler operationScheduler = DirectSchedulerFactory.getInstance().getScheduler();
  operationScheduler.start();

没有理由不创建小型工厂方法来配置线程数量,实例名称,关联日志文件等。这也可以让您的代码轻松扩展。按需创建调度程序,而不是手动编辑文件。

答案 1 :(得分:1)

我认为让多个实例工作的关键是确保将每个实例的名称设置为不同的。我知道例如,这可能会导致从spring配置多个调度程序时出现问题(我认为这反映了石英本身的相同基础问题。有关详细信息,请参阅本春季论坛帖子:

http://forum.spring.io/forum/spring-projects/container/32312-multiple-quartz-schedulerfactorybean-instances

答案 2 :(得分:0)

在非Spring环境中,您应该创建两个StdSchedulerFactory实例,它们具有不同的org.quartz.scheduler.instanceName值。像这样:

Properties config1 = new Properties();
Properties config2 = new Properties();

config1.setProperty("org.quartz.scheduler.instanceName", "Scheduler1");
config2.setProperty("org.quartz.scheduler.instanceName", "Scheduler2");

Scheduler scheduler1 = new StdSchedulerFactory(config1).getScheduler();
Scheduler scheduler2 = new StdSchedulerFactory(config2).getScheduler();