我正在使用java.Util.Timer庫來安排我的工作。Java定時器不會在Websphere服務器上啓動
我想在每個星期天的22:00打電話給我的功能。所以我的代碼是這樣的:
rspServer = new RSPServer();
Calendar scheduleStartTime = Calendar.getInstance();
scheduleStartTime.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
scheduleStartTime.set(Calendar.HOUR_OF_DAY, 22);
scheduleStartTime.set(Calendar.MINUTE, 0);
scheduleStartTime.set(Calendar.SECOND, 0);
scheduleStartTime.set(Calendar.MILLISECOND, 0);
rspServer.startScheduler(Class.forName("xx.xx.xx.xx.RSP.RSPServer"),rspServer, "PopulateModels", scheduleStartTime, 7 * 24 * 60 * 60 * 1000);
我在週四部署了該代碼並重新啓動了websphere服務器。我期待這個功能將在星期日開始。但它並沒有開火。服務器中沒有錯誤或輸出日誌。
我試過
我在星期一上午11點更新了開始時間。並在星期一上午10點40分重新啓動服務器。 20分鐘後,我的功能如預期在11:00工作。但是如果我在星期四重新啓動服務器並將開始時間設置爲星期日,則不會觸發。
在webshere服務器中是否有一種空閒線程kill time或sth else? 這可能是什麼原因?
這裏是我的startScheduler功能
public void startScheduler(final Class<?> serverClass, final Object server,
final String methodName, Calendar _startAfterTime, int _repeatAfterTime) {
timer = new Timer();
TimerTask timerTask = new TimerTask() {
private java.lang.reflect.Method method;
@Override
public void run() {
try {
method = serverClass.getMethod(methodName);
method.invoke(server);
} catch (Exception e) {
// TODO Auto-generated catch block
System.err.println("Error!");
e.printStackTrace();
}
}
};
timer.schedule(timerTask, _startAfterTime.getTime(), _repeatAfterTime);
}
你是不是指的['java.util.Calendar']行爲(http://docs.oracle.com/javase/8/docs/api/java /util/Calendar.html)類?這與[WebSphere](https://en.wikipedia.org/wiki/IBM_WebSphere)沒有任何關係,因此在本答覆中提及的內容很混亂。此外,Calendar的行爲取決於JVM當前的默認'Locale'。因此,關於「默認java時間配置,這周開始於星期日」的第一句話令人困惑,因爲沒有一個默認配置。或者我誤解了?我建議編輯答案來澄清。 –
我想強調本地計算機java時間和服務器java時間之間的區別。原因是我的問題。對不起,我的條款。 – neverwinter