2011-05-26 37 views
2

我正在寻找解决方案来获取当前正在执行石英作业的线程名称。在我的应用程序中,使用属性配置石英,作业触发器由数据库驱动。查找当前正在执行Quartz Job的线程!

我在这里实例化石英并启动它。

StdSchedulerFactory factory = new StdSchedulerFactory(configFile); 
Scheduler scheduler = factory.getScheduler(); 
scheduler.addGlobalJobListener(new QuartzJobListener()); 
scheduler.addGlobalTriggerListener(new QuartzTriggerListener()); 
scheduler.start(); 

抽到了石英job和触发器的细节如下,

try{ 
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); 
List<JobExecutionContext> jobList = scheduler.getCurrentlyExecutingJobs(); 
for(JobExecutionContext jobExecutionContext : jobList){ 
    // JOB Details 
    JobDetail jobDetail = jobExecutionContext.getJobDetail(); 
    String strJobName = jobDetail.getName(); 
    String strDescription = jobDetail.getDescription(); 

    // Trigger Details 
    Trigger trigger = jobExecutionContext.getTrigger(); 
    String strTriggerName = trigger.getName(); 
    String strFireInstanceId = trigger.getFireInstanceId(); 
    int state = scheduler.getTriggerState(trigger.getName(),trigger.getGroup()); 
    } 
}catch(Exception e){ 
    e.printStackTrace(); 
} 

我的问题是 - 我怎样才能得到它正在执行当前的工作线程的名字吗?

这是Question解决同样的问题,但尚未得到任何解决方案的答复截至目前。

+0

为什么你需要执行你的工作线程?请详细说明'你需要做什么'(我认为你没有太在意'你将如何去做')。 – aviad 2011-05-26 08:56:42

+0

不用于处理目的,但需要捕获数据库中的详细信息以备将来参考。由于我的申请会生成大量日志并且每次检查每个作业的日志都是不可能的。因此我创建了监听器,它将捕获执行中的数据。我能够得到所有的细节,如工作/触发组,名称,火警时间,下一次火灾时间等,但不包括线程相关信息。 – RajeshS 2011-05-26 09:03:58

回答

1

你可以一个

private Thread thead; 

变量添加到您的工作类,并在​​方法,设置

thread = Thread.currentThread(); 
+1

'@ Vache' - 很多感谢提示。我在侦听器中使用Thread.currentThread()。getName();'而不是在JOB中并且能够获取线程名称。它解决了我的问题。 – RajeshS 2011-05-30 06:25:00

+0

是的,我也很高兴能够提供帮助。 – Vache 2011-05-30 13:35:57

1

如果只是关于调试和跟踪,请在执行程序中使用一些智能日志记录,并且不要混淆线程(您不想去那里)。

我不确定Quartz会通过他们的API给你提供这方面的信息。但是,您可以configure Quartz to work with your thread pool。然后获取执行程序线程信息将更容易。您可以为此使用CommonJ。

祝你好运!

+0

感谢您的回复,但我无法在应用程序投入生产时更改现有配置,这些更改将不会被接受或需要很长时间才能获得批准。我必须在现有配置中不做任何修改或做最小的修改。任何其他建议? – RajeshS 2011-05-26 10:06:36

相关问题