quartz调度器/多个(非集群)调度器示例

e4yzc0pl  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(459)

就我而言,我似乎不知道如何将quartz配置为拥有两个调度器示例。我目前使用quartz来获取一个调度程序示例,但是想要两个示例,如文档中所述,因为我有一些轻量作业,我想在需要时随时运行,同时将一些重量作业限制为几个示例。。。正如文档所描述的,但无法理解。
谁能给我一个简单的例子,说明属性文件应该是什么样子,以及如何示例化单独的调度程序?

rekjcdws

rekjcdws1#

我认为让多个示例工作的关键是确保将每个示例的名称设置为不同的名称。例如,我知道在从spring配置多个调度程序时,这可能会导致问题(我相信这反映了quartz本身的相同基本问题)。详见 Spring 论坛帖子:
http://forum.spring.io/forum/spring-projects/container/32312-multiple-quartz-schedulerfactorybean-instances

lh80um4z

lh80um4z2#

我没有通过属性文件配置它们的经验,但我的设置是这样的:

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();

没有理由不创建一个小工厂方法来配置线程数量、示例名称、关联的日志文件等。这还可以允许您的代码轻松伸缩并根据需要创建调度程序,而不是手动编辑文件。

h7wcgrx3

h7wcgrx33#

在非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();

相关问题