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

Quartz:每个JVM运行单个实例

朱博实
2023-03-14

我正在我的Java SSE(Java Flex)应用程序中使用Quartz Scheduler 2.2.0。我设定了一个时间表,每天上午10点运行,并执行一些工作。我没有关闭Quartz调度程序,因为我想让它每天运行。

但无论如何,我知道Quartz调度程序已经在运行,因为如果我在用户打开Java Flex应用程序时启动它,那么就会有多个实例存在。

Quartz.Properties

#============================================================================
# Configure Main Scheduler Properties  
#============================================================================

org.quartz.scheduler.instanceName: SF-Tasks-Scheduler
org.quartz.scheduler.instanceId: Quartz_Instance_1
org.quartz.scheduler.instanceIdGenerator.class: org.quartz.simpl.HostnameInstanceIdGenerator
org.quartz.scheduler.skipUpdateCheck: true
org.quartz.scheduler.makeSchedulerThreadDaemon: true

#============================================================================
# Configure ThreadPool  
#============================================================================

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 1
org.quartz.threadPool.threadPriority: 5

#============================================================================
# Configure JobStore  
#============================================================================

org.quartz.jobStore.misfireThreshold: 60000

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




#============================================================================
# Configure Plugins 
#============================================================================

org.quartz.plugin.triggHistory.class = \org.quartz.plugins.history.LoggingTriggerHistoryPlugin
org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at\: {4, date, HH\:mm\:ss MM/dd/yyyy}
org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH\:mm\:ss MM/dd/yyyy}

这就是我安排工作的方式

try {
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
            JobDetail jobTaskUpdater = JobBuilder.newJob(JobTaskUpdater.class).withIdentity(JobTaskUpdater.class.getName(), GROUP_TASK_JOB_DETAIL).build();
            Trigger trigger = TriggerBuilder.newTrigger().withIdentity(NAME_TRIGGER_TASK_UPDATER, GROUP_TASK_TRIGGER).withSchedule(SimpleScheduleBuilder.repeatMinutelyForever()).build();          

            JobTaskUpdaterStatusListener listener = new JobTaskUpdaterStatusListener();
            KeyMatcher<JobKey> matcherTaskUpdater = KeyMatcher.keyEquals(jobTaskUpdater.getKey());      

            scheduler.getListenerManager().addJobListener(listener, matcherTaskUpdater);

            scheduler.scheduleJob(jobTaskUpdater, trigger); 


            scheduler.start();

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

共有1个答案

洪璞瑜
2023-03-14

getCurrentlyExecutingJobs()获取当前正在运行的作业列表。如果发现任何单个作业或调度程序可运行,则可以停止。

 类似资料:
  • 问题内容: 如何在一台机器上运行多个JVM?您如何在其他JVM中调用方法? 问题答案: 如何在一台机器上运行多个JVM? 只需启动多个进程即可。 您如何在其他JVM中调用方法? 使用任何类型的RPC框架(RMI,EJB,Web服务等)。

  • 问题内容: 我有一个包含200多个测试类别的近500个单独测试的项目。这些测试中有一些在完成测试后并不能很好地关闭它们自己的状态,在Eclipse中这会导致某些测试失败。通过Ant从命令行运行测试套件时,所有测试均通过。 我可以在Eclipse中以某种方式启用“测试隔离”吗?我不在乎是否需要更长的时间。 从长远来看,我会清理行为异常的测试,但短期而言,我想使测试正常工作。 问题答案: 如果在Ecl

  • 基于每个JVM的CPU核数创建线程与在多个JVM上运行的线程在CPU核数上创建线程数,条件是所有JVM运行在共享同一CPU的一个物理系统上有何不同?换句话说,一个并行运行8个线程的多线程Java程序vs在共享同一CPU的8个不同JVM上运行的同一多线程程序? 下面我给出了一些我发现的用线程实现并行处理的方法,但是我不能理解它们之间的本质区别? 方法一:线程周期性地查询数据库更改,并行地启动(长时间

  • 不幸的是,我有一个工作是对RAM中的数据进行操作,但没有同步设置。我能看到的最简单的解决方案是让一个作业在所有节点上运行而不进行协调,就像使用一样。 是否有方法将作业配置为在LocalDataSourceJobStore下的所有节点上运行? 精确的定时并不重要,但作业必须每30分钟在每个节点上运行一次

  • 问题内容: 我有一个关于在一个JVM中创建多个Spark会话的查询。我已经读过,在早期版本的Spark中不建议创建多个上下文。Spark 2.0中的SparkSession也是如此。 我正在考虑从UI调用Web服务或servlet,然后该服务创建一个spark会话,执行一些操作并返回结果。这将导致为客户端的每个请求创建一个火花会话。是否推荐这种做法? 说我有一个类似的方法: 等等.... 如果将这

  • 我需要提高在具有6GB ram的vm中运行的Liferay 6.2门户的性能。将Xmx和Xms增加到3GB以上没有帮助。 所以我偶然发现了Liferay用户指南中的这一段: 请注意,内存回报率是递减的,尤其是在64位系统中。这些系统允许您创建非常大的JVM,但JVM越大,垃圾收集所需的时间就越长。因此,您可能不想创建大小超过2GB的JVM。要在单个系统上利用更大的内存,请运行Liferay的多个J