gpt4 book ai didi

java - 自动定时器@Schedule Java EE

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:01:58 24 4
gpt4 key购买 nike

我是 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(){
}

你知道什么解决办法吗?

最佳答案

一个可能的解决方案是使用 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());
}
}

另请参阅:Using the Timer Service

希望对您有所帮助。

关于java - 自动定时器@Schedule Java EE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27824420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com