我是Java EE的新用户,我正在开发一个必须定期更新天气的应用程序。 我使用注释创建了一个自动计时器,以便每5分钟更新一次。我想改变时间(管理员可以改变它):
@Schedule(minute="*/5",hour = "*", persistent = false)
public void weatherUpdate(){
}
我需要一个名为frequency的整数变量,它包含天气更新的频率。我试着这样做,但这没效果:
int freq=5;
@Schedule(minute="*/freq",hour = "*", persistent = false)
public void weatherUpdate(){
}
你知道任何解决方案吗?
答案 0 :(得分:1)
可能的解决方案是使用TimerService,例如,您可以创建程序化计时器。
<强>例如强>
@Singleton
@Startup
public class ProgrammaticTimer {
@Resource
TimerService timerService;
public void createTimer(String timerId, int frec){
ScheduleExpression expression = new ScheduleExpression();
expression.minute("*/"+freq).hour("*");
timerService.createCalendarTimer(expression, new TimerConfig(timerId, true));
}
@Timeout
public void execute(){
System.out.println("----Invoked: " + System.currentTimeMillis());
}
}
要编辑计时器的频率,首先需要取消当前计时器并使用新值创建新计时器。
<强>例如强>
@Singleton
@Startup
public class ProgrammaticTimer {
@Resource
TimerService timerService;
public void createTimer(String timerId, int freq){
ScheduleExpression expression = new ScheduleExpression();
expression.minute("*/"+freq).hour("*");
timerService.createCalendarTimer(expression, new TimerConfig(timerId, true));
}
public void editTimer(String timerId, int freq){
cancelTimer(timerId)
ScheduleExpression expression = new ScheduleExpression();
expression.minute("*/"+freq).hour("*");
timerService.createCalendarTimer(expression, new TimerConfig(timerId, true));
}
public void cancelTimer(String timerId) {
if (timerService.getTimers() != null) {
for (Timer timer : timerService.getTimers()) {
if (timer.getInfo().equals(timerId)) {
timer.cancel();
}
}
}
}
@Timeout
public void execute(){
System.out.println("----Invoked: " + System.currentTimeMillis());
}
}
我希望这有帮助。