繁体   English   中英

自动定时器@Schedule Java EE

[英]Automatic timer @Schedule Java EE

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

另请参阅: 使用定时服务

我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM