Java quartz群集模式仅运行一个任务

Java quartz群集模式仅运行一个任务,java,quartz-scheduler,Java,Quartz Scheduler,我有两个quartz应用程序必须在集群模式下运行,所以我有两个JAR。当我运行这两个jar(java-jar)时,只有一个进程似乎在工作,另一个进程似乎处于待机状态,什么也不做,只有在我杀死另一个进程时才开始工作。我需要这两个进程在集群模式下运行 这是我的配置: private Properties getProperties() { final Properties quartzProperties = new Properties(); quartzProperties.pu

我有两个quartz应用程序必须在集群模式下运行,所以我有两个JAR。当我运行这两个jar(
java-jar
)时,只有一个进程似乎在工作,另一个进程似乎处于待机状态,什么也不做,只有在我杀死另一个进程时才开始工作。我需要这两个进程在集群模式下运行

这是我的配置:

private Properties getProperties() {
    final Properties quartzProperties = new Properties();
    quartzProperties.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
    quartzProperties.put("org.quartz.jobStore.isClustered", "true");

    quartzProperties.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
    quartzProperties.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.StdJDBCDelegate");
    quartzProperties.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
    quartzProperties.put("org.quartz.threadPool.threadCount", "25");
    quartzProperties.put("org.quartz.scheduler.instanceId", "AUTO");
    quartzProperties.put("org.quartz.scheduler.instanceName", "qrtz");

    quartzProperties.put("org.quartz.threadPool.threadPriority", "5");
    quartzProperties.put("org.quartz.jobStore.clusterCheckinInterval","10000");
    quartzProperties.put("org.quartz.jobStore.useProperties", "false");


    quartzProperties.put("org.quartz.jobStore.dataSource", "quartzDS");
    quartzProperties.put("org.quartz.dataSource.quartzDS.URL", environment.getRequiredProperty("org.quartz.dataSource.quartzDS.URL"));
    quartzProperties.put("org.quartz.dataSource.quartzDS.user", environment.getRequiredProperty("org.quartz.dataSource.quartzDS.user"));
    quartzProperties.put("org.quartz.dataSource.quartzDS.password", environment.getRequiredProperty("org.quartz.dataSource.quartzDS.password"));
    quartzProperties.put("org.quartz.dataSource.quartzDS.maxConnections", "5");
    quartzProperties.put("org.quartz.dataSource.quartzDS.validationQuery", "select 0 from dual");
    quartzProperties.put("org.quartz.dataSource.quartzDS.driver", environment.getRequiredProperty("org.quartz.dataSource.quartzDS.driver"));
    return quartzProperties;
}

TL;TR:您的问题来自石英调度器本身,无法改变其行为

为了让您了解原因,我必须向您解释石英群集模式的行为。我们将以你的情况为例

您启动两个应用程序,每个应用程序运行一个通过数据库同步的Quartz实例。您正在调度的每个作业都存储在数据库中,并带有诸如“上次运行作业”、“上次运行作业的实例”等处理数据。每个Quartz实例定期扫描数据库以查找要激发的作业,并激发尽可能多的作业

问题是,如果您没有足够的负载,您的一个节点将始终在另一个节点之前扫描数据库并承担所有负载

要看到其他实例工作,必须关闭或备用第一个实例,或者增加集群的负载

您唯一可以配置的是每个节点的线程池的大小:请参阅