0

我在我的 Java SSE (Java Flex) 应用程序中使用 Quartz Scheduler 2.2.0。我设定了每天上午 10:00 运行的时间表并执行一些工作。我没有关闭 Quartz Scheduler,因为我希望它每天都运行。

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

有什么方法可以让 JVM 进程在计算机上运行,​​我可以看到 Quartz Scheduler 进程已经启动,所以我不需要再次运行它,或者如果我再次运行它,它应该自动检查一个实例是否存在所以它应该抛出异常。

我在下面给出了我的配置 XML 文件,希望这会有所帮助......

石英属性

#============================================================================
# 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();
        }
4

1 回答 1

1

您可以通过此 scheduler.getCurrentlyExecutingJobs() 来获取当前正在运行的作业列表。如果您发现任何单个作业或调度程序是可运行的,那么您可以停止。

于 2013-09-06T08:40:16.100 回答