我正在寻找解决方案来获取当前正在执行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解决同一问题但截至目前尚无任何解决方案回复。
答案 0 :(得分:1)
如果只是关于调试和跟踪,请在执行程序中使用一些智能日志记录,不要乱用线程(你不想去那里)。
我不确定Quartz会通过他们的API向您提供此信息。但是,您可以configure Quartz to work with your thread pool。然后获取执行程序线程信息将更容易。您可以将CommonJ用于此目的。
祝你好运!
答案 1 :(得分:1)
您可以添加
private Thread thead;
变量到您的Job类和execute()
方法,设置
thread = Thread.currentThread();