首页 > 解决方案 > 在 Java EE TimerService 中启动后更改计时器

问题描述

在这段代码中,我使用TimerServiceon startup 来启动每四秒运行一次的任务。如果我需要在启动后更改频率怎么办?

@Startup
@Singleton
public class ProgrammaticScheduler {
 
    @Resource
    TimerService timerService;
 
    @PostConstruct
    public void initialize() {
        timerService.createTimer(0, 4000, "Every four seconds timer");
    }
 
    @Timeout
    public void programmaticTimeout(Timer timer) {
        System.out.println("timeout triggered");
    }
}

标签: javajava-ee-8

解决方案


自从使用 Java EE 以来已经有一段时间了,但我想唯一的选择是取消原始计时器并创建一个新计时器。所以在你的添加这样的东西ProgrammaticScheduler

private Timer timerToChange;

@PostConstruct
public void initialize() {
    timerToChange = timerService.createTimer(0, 4000, "Every four seconds timer");
}

public void changeTimer(**NEW_PARAMS**) {
    timerToChange.cancel();
    timerToChange = timerService.createTimer(**NEW_PARAMS**);
}

推荐阅读