Quartz 2.2.1,JMX jobruntime 总是-1?
Quartz 2.2.1, JMX jobruntime always -1?
在 Quartz 中是否正常,对于 JMX 属性 CurrentlyExecutingJobs=> [item] => jobRunTime 始终为“-1”,而当前为 运行,或者在 Quartz 中是否有一些设置以确保jobRunTime 已适当更新?
(通过 jconsole、Mission Control 和 jmx 代码确认)
Usecase 是 track/monitor long-运行 作业,认为 jobRunTime 是合适的路径。替代路径是 "fireTime" + CURRENT_NOW 计算,但如果它已经在某处发生,则希望避免额外的计算。
在四处寻找之后,这个特定的值在没有手动设置的情况下不会更新。看监控Quartz作业的工具,比如Javamelody,每次也得计算:
elapsedTime = System.currentTimeMillis()- quartzAdapter.getContextFireTime(jobExecutionContext).getTime();
如果您想手动更新长运行 作业的 jobruntime 值以检查该值而不是在外部计算它,您必须更改 每个 作业必须支持这个功能。这是一个粗略的示例,可以根据您的需要进行修改,来源:https://github.com/dhartford/quartz-snippets/blob/master/update_jobruntime_timer_innerclass
/**
* inner class to handle scheduled updates of the Quartz jobruntime attribute
*/
class UpdateJobTimer extends TimerTask{
private JobExecutionContextImpl jec;
/* usage example, such as at the start of the execute method of the Job interface:
* Timer timer = new Timer();
* //update every 10 seconds (in milliseconds), whatever poll timing you want
* timer.schedule(new UpdateJobTimer(jec), 0, 10000);
* ...
* timer.cancel(); //do cleanup in all appropriate spots
*/
UpdateJobTimer(JobExecutionContextImpl jec){
this.jec = jec;
}
@Override
public void run() {
long runtimeinms = jec.getFireTime().getTime() - new java.util.Date().getTime();
jec.setJobRunTime(runtimeinms);
System.out.println("DEBUG TIMERTASK on JOB: " + jec.getJobDetail().getKey().getName() + " triggered [" + jec.getFireTime() + "] updated [" + new java.util.Date() + "]" );
}
}`
在 Quartz 中是否正常,对于 JMX 属性 CurrentlyExecutingJobs=> [item] => jobRunTime 始终为“-1”,而当前为 运行,或者在 Quartz 中是否有一些设置以确保jobRunTime 已适当更新?
(通过 jconsole、Mission Control 和 jmx 代码确认)
Usecase 是 track/monitor long-运行 作业,认为 jobRunTime 是合适的路径。替代路径是 "fireTime" + CURRENT_NOW 计算,但如果它已经在某处发生,则希望避免额外的计算。
在四处寻找之后,这个特定的值在没有手动设置的情况下不会更新。看监控Quartz作业的工具,比如Javamelody,每次也得计算:
elapsedTime = System.currentTimeMillis()- quartzAdapter.getContextFireTime(jobExecutionContext).getTime();
如果您想手动更新长运行 作业的 jobruntime 值以检查该值而不是在外部计算它,您必须更改 每个 作业必须支持这个功能。这是一个粗略的示例,可以根据您的需要进行修改,来源:https://github.com/dhartford/quartz-snippets/blob/master/update_jobruntime_timer_innerclass
/**
* inner class to handle scheduled updates of the Quartz jobruntime attribute
*/
class UpdateJobTimer extends TimerTask{
private JobExecutionContextImpl jec;
/* usage example, such as at the start of the execute method of the Job interface:
* Timer timer = new Timer();
* //update every 10 seconds (in milliseconds), whatever poll timing you want
* timer.schedule(new UpdateJobTimer(jec), 0, 10000);
* ...
* timer.cancel(); //do cleanup in all appropriate spots
*/
UpdateJobTimer(JobExecutionContextImpl jec){
this.jec = jec;
}
@Override
public void run() {
long runtimeinms = jec.getFireTime().getTime() - new java.util.Date().getTime();
jec.setJobRunTime(runtimeinms);
System.out.println("DEBUG TIMERTASK on JOB: " + jec.getJobDetail().getKey().getName() + " triggered [" + jec.getFireTime() + "] updated [" + new java.util.Date() + "]" );
}
}`