我使用EJB 3.1和jboss-EAP-6.4,我想設置一些動態參數,小時,分鐘和EJB調度的第二如下:參數化EJB調度附表表達
非參數代碼 - 這在每5分鐘的第30秒運行:
@Singleton
@Startup
public class TriggerJob {
@EJB
//some db injections
@PostConstruct
public void onStartup() {
try {
preparation();
} catch (CertificateVerificationException e) {
e.printStackTrace();
}
}
@Schedule(second = "30", minute = "*/5", hour = "*", persistent = false)
public void preparation() {
//my scheduled tasks
}
}
上面的代碼正確執行。
動態參數代碼 - 這應該在每5分鐘的第30秒運行:
@Singleton
@Startup
public class TriggerJob {
@EJB
//some injections
private boolean runningFlag = false;
@Resource
private TimerService timerService;
public void setTimerService(TimerService timerService) {
this.timerService = timerService;
}
@Timeout
public void timerTimeout() {
try {
preparation();
} catch (CertificateVerificationException e) {
e.printStackTrace();
}
}
@PostConstruct
private void postCunstruct() {
timerService.createCalendarTimer(createSchedule(),new TimerConfig("EJB timer service timeout at ",false));
}
private ScheduleExpression createSchedule() {
ScheduleExpression expression = new ScheduleExpression();
expression.hour("*")
.minute("*/5")
.second("30");
return expression;
}
public void preparation(){
// my scheduled tasks
}
}
上面的代碼不正確執行,通常它在第二執行多次。
另外,我看了這並沒有幫助我的一些其他問題:
Dynamic parameters for @Schedule method in an EJB 3.x
Using the Timer Service - The Java EE 6 Tutorial
任何幫助,將不勝感激。
可以調試和驗證「定時器」目的是通過「createCalendarTimer」回來了,它包含ScheduleExpression和比較的需要與否無論是創建。另外檢查是否沒有其他定時器處於活動狀態。 –
親愛的@Nayan Wadekar乘法運行可以通過回答來解決,但會出現一個新問題:調度程序在啓動時不會執行 –
不要認爲給定的代碼有任何問題。您是否嘗試過調試,表達式是否正確,超時方法調用是否正確,postconstruct等。 –