当前位置: 首页 > 知识库问答 >
问题:

在多实例环境中只执行一次Quartz作业

公英哲
2023-03-14

我试图在Quartz 1.6中创建一个作业,但必须只执行一次,因为我有两个测试实例具有相同版本的.war文件。

这是我的TestPlugin类,作业将每60秒执行一次:

public class TestPlugin implements PlugIn {

    public TestPlugin() {
        super();
    }

    public void destroy() {
    }

    public void init(ActionServlet arg0, ModuleConfig arg1)
            throws ServletException {

        try {
            JobDetail job = JobBuilder.newJob(TestDemonio.class)
                    .withIdentity("anyJobName", "group1").build();
            Trigger trigger = TriggerBuilder
                    .newTrigger()
                    .withIdentity("anyTriggerName", "group1")
                    .withSchedule(CronScheduleBuilder.cronSchedule("0/60 * * ? * * *"))
                    .build();

            Scheduler scheduler = new StdSchedulerFactory().getScheduler();
            scheduler.scheduleJob(job, trigger);
            scheduler.start();

        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}

然后我有我的类testexecute来打印一个简单的输出:

@DisallowConcurrentExecution
public class TestDemonio implements Job {

    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        System.out.println("QUARTZ JOB MESSAGE");
    }
}
# Default Properties file for use by StdSchedulerFactory
# to create a Quartz Scheduler Instance, if a different
# properties file is not explicitly specified.
#

org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 10
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true

org.quartz.jobStore.misfireThreshold: 60000

org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore

共有1个答案

方鸿振
2023-03-14

您需要将以下属性添加到您的quartz.property文件(来源:单击此处):

org.quartz.jobstore.isclustered:true

阅读本文有关isclustered属性的详细信息,请参阅此链接。

 类似资料:
  • 问题内容: 对于我的应用程序,我创建作业并使用CronTriggers计划它们。每个作业只有一个触发器,并且作业名称和触发器名称都相同。没有作业共享触发器。 现在,当我创建像这样的cron触发器 “ 0/1 * * 吗?” 它指示作业每秒钟执行一次,效果很好。 当我第一次通过以下方式暂停工作时,问题就出现了: 然后假设50秒后恢复工作: 我看到的是,在这50秒钟中,作业没有按要求执行。但是当我恢复

  • 如何将CronTimer迭代器设置为1?或者如何停止排定程序多次执行作业。 有什么建议吗?谢谢,古扬·沙阿。

  • 我有一个,每个月底运行一次。运行后,它会将一些数据保存到数据库中。 当我扩展应用程序时(例如有2个实例),两个实例都运行计划作业,并且都保存数据,在一天结束时,我的数据库有相同的数据。 所以我希望计划作业只运行一次,而不管云上的实例数量如何。

  • 我使用Quartz1.5.2和Spring3.2.1来做调度器任务,在我的应用程序中,我需要在某个时候重新安排任务,但我发现每次重新安排任务时,它都会在第一次执行两次。 下面是我的Quartz+Spring配置文件: 我把它作为一个web应用程序,下面是web.xml的代码:

  • 本文向大家介绍iOS实现代码只执行一次,包括了iOS实现代码只执行一次的使用技巧和注意事项,需要的朋友参考一下 iOS实现代码只让执行一次

  • 我正在学习angularjs,作为一个测试项目,我正在轮询一个返回活动进程列表(它们的pid)并显示这些进程的服务器。 客户端代码如下所示: 这适用于Firefox和Chrome,但不太适用于Internet Explorer 11。 所有浏览器每秒都执行ReloadData方法,但IE11实际上并不从服务器获取流程数据。Firefox和Chrome确实每秒都会获取数据。我也可以在服务器的输出中看