我使用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等。 –