你可以嘗試在你的調度程序添加一個觸發器過濾
this.scheduler.addGlobalTriggerListener(new DebugExecutionFilter());
調試執行濾色器將增加一票否決時執行是不揮發的(沒有計劃立即運行),你在調試模式。
下面是一個實現的例子:
private static class DebugExecutionFilter implements TriggerListener
{
public DebugExecutionFilter()
{
}
@Override
public String getName()
{
return "Task execution filter";
}
@Override
public void triggerFired(Trigger trigger, JobExecutionContext context)
{
// Do nothing
}
/* (non-Javadoc)
*
* @see org.quartz.TriggerListener#vetoJobExecution(org.quartz.Trigger, org.quartz.JobExecutionContext) */
@Override
@SuppressWarnings("unchecked")
/**
* A veto is added if :
* - For non volatile trigger if we are in debug mode
*/
public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context)
{
try
{
//
if (!trigger.isVolatile() && isDebugMode())
{
return true;
}
//task is run by scheduler.triggerJobWithVolatileTrigger() for immediate schedule
//or task is schedule and we are not in debugMode
return false;
}
@Override
public void triggerMisfired(Trigger trigger)
{
// do nothing
}
@Override
public void triggerComplete(Trigger trigger, JobExecutionContext context, int triggerInstructionCode)
{
// do nothing
}
}
感謝您的回答mmounirou!也許我沒有完全描述這個問題,但我確實希望在開發模式下觸發非暫停觸發器。只是在開發模式下,調度程序處於待機狀態,所有觸發器默認都處於暫停狀態。如果我現在轉到我們的計劃作業頁面並啓動其中一個計劃程序,以便手動運行其中一個作業(每個作業旁邊,我們都有一個「立即運行」按鈕),所有其他作業都會失效。我基本上希望暫停的工作在開發模式下不採取任何措施 - 是否有全球的方式來做到這一點? –