Java quartz群集模式仅运行一个任务
我有两个quartz应用程序必须在集群模式下运行,所以我有两个JAR。当我运行这两个jar(Java quartz群集模式仅运行一个任务,java,quartz-scheduler,Java,Quartz Scheduler,我有两个quartz应用程序必须在集群模式下运行,所以我有两个JAR。当我运行这两个jar(java-jar)时,只有一个进程似乎在工作,另一个进程似乎处于待机状态,什么也不做,只有在我杀死另一个进程时才开始工作。我需要这两个进程在集群模式下运行 这是我的配置: private Properties getProperties() { final Properties quartzProperties = new Properties(); quartzProperties.pu
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实例定期扫描数据库以查找要激发的作业,并激发尽可能多的作业 问题是,如果您没有足够的负载,您的一个节点将始终在另一个节点之前扫描数据库并承担所有负载 要看到其他实例工作,必须关闭或备用第一个实例,或者增加集群的负载 您唯一可以配置的是每个节点的线程池的大小:请参阅