石英不会恢复工作

时间:2017-09-25 15:37:33

标签: java spring postgresql scheduled-tasks quartz-scheduler

我用:

  • Spring 4.2.9
  • PostgreSQL
  • Quartz 2.3.0
  • Java 8

我在群集服务器中的恢复作业有些问题...我在群集中有2个测试服务器(1个DB)。

调度程序工作正常,但是当我停止运行Job的tomcat(1)时,在另一台服务器上(2)作业无法恢复...

如果我重新启动tomcat#2,那么调度程序启动工作,如果我启动tomcat#1,当tomcat#2工作时,quartz会将工作带到tomcat#1。工作得很好,但是

第一个问题:我需要当tomcat#1停止时,tomcat#2将启动Job而不重启...

第二个问题: jdbcjobstore 更适合我? JobStoreTX JobStoreCMT ?在工作集群中,我在Spring 4.2.9上有4台服务器

对不起我的英文,非常感谢你的答案!

属性Quartz,我项目中的@Bean

Properties prop = new Properties();
prop.put("org.quartz.threadPool.class","org.quartz.simpl.SimpleThreadPool");
prop.put("org.quartz.threadPool.threadCount", "4");
prop.put("org.quartz.jobStore.misfireThreshold", "20000");
prop.put("quartz.scheduler.instanceName", "ServerScheduler");
prop.put("org.quartz.scheduler.instanceId", "AUTO");
prop.put("org.quartz.scheduler.skipUpdateCheck", "true");
prop.put("org.quartz.scheduler.instanceId", "IS_CLUSTERED");
prop.put("org.quartz.scheduler.jobFactory.class","org.quartz.simpl.SimpleJobFactory");
prop.put("org.quartz.jobStore.class","org.quartz.impl.jdbcjobstore.JobStoreCMT");
prop.put("org.quartz.jobStore.driverDelegateClass","org.quartz.impl.jdbcjobstore.PostgreSQLDelegate");
prop.put("org.quartz.jobStore.dataSource", "myDS");
prop.put("org.quartz.jobStore.nonManagedTXDataSource", "myDS");
prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
prop.put("org.quartz.jobStore.isClustered", "true");
prop.put("org.quartz.dataSource.myDS.driver", "org.postgresql.Driver");
prop.put("org.quartz.dataSource.myDS.URL", url);
prop.put("org.quartz.dataSource.myDS.user", user);
prop.put("org.quartz.dataSource.myDS.password", password);
prop.put("org.quartz.dataSource.myDS.maxConnections", "4");

我的工作和触发

JobDetail job = newJob(QuartzStockTask.class)
                .withIdentity("Job " + "1", "Job group " + "11")
                .requestRecovery(true)
                .build();

Trigger sTrigger1 = newTrigger()
                .withIdentity("Trig " + "1", "Trig group " + "11")
                .startNow()
                .withSchedule(simpleSchedule()
                        .withIntervalInSeconds(10)
                        .repeatForever())
                .build();

scheduler.scheduleJob(job, sTrigger1);

1 个答案:

答案 0 :(得分:0)

我发现问题,它是双org.quartz.scheduler.instanceId,第一次是AUTO,第二次是IS_CLUSTERED。 谢谢大家!