2011-05-26 43 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

相關問題