查找当前正在执行Quartz Job的线程!

时间:2011-05-26 08:48:45

标签: java quartz-scheduler

我正在寻找解决方案来获取当前正在执行quartz工作的线程名称。在我的应用程序中,使用属性配置quartz,并且作业驱动器是由DB驱动的。

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

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

能够获得如下的石英JOB和TRIGGER细节,

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解决同一问题但截至目前尚无任何解决方案回复。

2 个答案:

答案 0 :(得分:1)

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

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

祝你好运!

答案 1 :(得分:1)

您可以添加

private Thread thead;

变量到您的Job类和execute()方法,设置

thread = Thread.currentThread();