我有一個石英工作這樣石英作業已完成,但該線程保持阻塞
@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class MyJob{
public void execute(JobExecutionContext jec) throws JobExecutionException {
//connect to a FTP server, monitor directory for new files and download
//Using FTPClient of commons-net-3.5.jar
}
作業被觸發與
JobDetail jobDetail = newJob(MyJob.class)
.withIdentity(jobName, DEFAULT_GROUP)
.usingJobData(new JobDataMap(jobProperties))
.build();
//trigger every minute
Trigger trigger = newTrigger()
.withIdentity(jobName, DEFAULT_GROUP)
.startNow()
.withSchedule(cronSchedule(cronExpression))
.build();
scheduler.scheduleJob(jobDetail,trigger);
作業被觸發的每一分鐘。它運行良好大約1周(10000次執行)和莫名其妙地不能重新啓動。日誌中沒有錯誤,並且看到它已經完成了以前的執行。其他進程正確啓動。
升級庫quartz-2.2.3
和commons-net-3.5
(尋找在FTP庫中的可能的錯誤)我設法過去的3周
我有一個Job
監測Scheduler
寫着觸發狀態爲BLOCKED
。阻止進程的Thread
不是由應用服務器
TriggerState triggerState = scheduler.getTriggerState(triggerKey);
我還沒有發現的文件上這種類型的用石英的問題,所以我懷疑是在FTP庫由石英啓動線程干擾的錯誤重複使用例如具有@PersistJobDataAfterExecution
使用我不知道這是一個衆所周知的問題,或者可能是一個錯誤這樣我就可以應用的解決方案或替代方法(殺死石英工作how to stop/interrupt quartz scheduler job manually)
它始終在相同的執行或時間內失敗?工作分配了哪種模式? –
失敗時間在3天到3周(4300-30000次執行)之間變化,但偶爾在24h內失敗。空執行後通常會失敗:FTP連接,沒有文件,斷開連接。 cron表達式是:'0 0/1 * * *?' – pedrofb
也許這個空執行會拋出任何未處理的異常或可能影響cron的錯誤?模式和工作似乎以正確的方式創建... –