我有一個任務,我想在每個星期日的下午6點運行,並且我爲此使用了javax.ejb.Schedule。我把時間表設爲;Java日程只運行一次
@Schedule(dayOfWeek = "Sun", hour="18", persistent = false)
由於某種原因,這隻能運行一次,然後悄然停止。如果我註釋它如下,它會繼續前進並且每分鐘運行一次;
@Schedule(hour="*", minute="*", persistent = false)
我知道,如果一個異常被拋出定時器被清除,但是當我運行它每分鐘能正常工作。此外,第一個星期天它運行良好,然後我看不到第二個星期天的痕跡;沒有例外或日誌或任何東西。 有什麼想法?更多的代碼;
@Schedules(value = {
@Schedule(dayOfWeek = "Sun", hour="18", persistent = false)
})
public void runTask() {
logger.info("Running task");
File file = new File("file.csv");
List<String[]> data = getData();
try {
populateCsv(file, data);
} catch (IOException e) {
logger.error("Error creating csv file", e);
}
}
private void populateCsv(File file, List<String[]> data) throws IOException {
CSVWriter csvWriter = null;
try {
FileWriter fileWriter = new FileWriter(file);
csvWriter = new CSVWriter(fileWriter, ',', CSVWriter.NO_QUOTE_CHARACTER);
csvWriter.writeAll(data);
} finally {
if (csvWriter != null) {
csvWriter.close();
}
}
}
的@Schedules註釋是有歷史原因,只是想保持代碼的準確位置張貼
您是否嘗試過調試以查看究竟發生了什麼?如果你在你的方法中放置一個斷點,你可以運行堆棧來查看哪個Java類正在調用你的方法,以及它爲什麼可能重新調度。 – 2015-03-03 12:53:44
我的猜測將在那裏你設置爲'永久性'爲假,嘗試將其設置爲true並再次運行 – user902383 2015-03-03 13:27:11
問題是,如果我想調試我把它設置爲星期二(如今天星期二),它將工作一次沒有問題,沒有例外拋出。然後Id必須等待一個星期...... 如果我將它設置爲dayOfWeek =「Tue」,小時=「*」,分鐘=「*」可以多次調試,它可以整天工作。我認爲它的默認設置,如設置分鐘=「*」會給你每分鐘的小時默認午夜 – Hanna 2015-03-03 13:29:50