gpt4 book ai didi

java - Wildfly Scheduled EJB - 执行多次

转载 作者:行者123 更新时间:2023-11-30 03:23:01 25 4
gpt4 key购买 nike

我创建了一个测试应用程序,其中包含一个 EJB,它应该每秒打印当前时间戳。现在,在我的 Wildfly 上部署 Web 应用程序后,我每秒收到大约 5 条日志消息...看起来正在运行多个调度程序,这会触发输出...

您有什么想法吗?如何解决?如果我只是用 @Schedule 注释方法,它会每秒打印结果,但是通过以编程方式设置计时器会出现问题:

@Singleton
@Startup
public class Scheduler {

@Resource
TimerService timerService;

@Inject
Logger logger;

@Timeout
public void doStuff() {
logger.info("Programmatic Scheduler: " + System.currentTimeMillis());
}

@PostConstruct
public void startScheduler() {

TimerConfig timerConfig = new TimerConfig();
timerConfig.setPersistent(false);

ScheduleExpression expression = new ScheduleExpression();
expression.second("*/1").minute("*").hour("*");
timerService.createCalendarTimer(expression, timerConfig);
}
}

...这是输出 - 你看,每秒打印多次:

    16:26:46,574 INFO  [de.hays.liferay.schedulerprogrammatically.Scheduler] (EJB default - 10) Programmatic Scheduler: 143455120657
16:26:46,849 INFO [de.hays.liferay.schedulerprogrammatically.Scheduler] (EJB default - 8) Programmatic Scheduler: 1434551206849
16:26:46,869 INFO [de.hays.liferay.schedulerprogrammatically.Scheduler] (EJB default - 7) Programmatic Scheduler: 1434551206869
16:26:46,890 INFO [de.hays.liferay.schedulerprogrammatically.Scheduler] (EJB default - 4) Programmatic Scheduler: 1434551206890
16:26:47,083 INFO [de.hays.liferay.schedulerprogrammatically.Scheduler] (EJB default - 3) Programmatic Scheduler: 1434551207083
16:26:47,145 INFO [de.hays.liferay.schedulerprogrammatically.Scheduler] (EJB default - 1) Programmatic Scheduler: 1434551207145
16:26:47,185 INFO [de.hays.liferay.schedulerprogrammatically.Scheduler] (EJB default - 9) Programmatic Scheduler: 1434551207185
16:26:47,246 INFO [de.hays.liferay.schedulerprogrammatically.Scheduler] (EJB default - 6) Programmatic Scheduler: 1434551207246
16:26:47,274 INFO [de.hays.liferay.schedulerprogrammatically.Scheduler] (EJB default - 2) Programmatic Scheduler: 1434551207274
16:26:47,489 INFO [de.hays.liferay.schedulerprogrammatically.Scheduler] (EJB default - 5) Programmatic Scheduler: 1434551207489

最佳答案

我明白了 - 我用 java 任务控制查找了野蝇上正在运行的计时器 - 并且有不止一个计时器。

所以我编辑了我的代码,杀死应用程序的所有现有计时器,然后创建一个计时器,以确保实际上只有一个计时器:

@PostConstruct
public void startScheduler() {

TimerService timerService = sessionContext.getTimerService();

logger.info("Current running timers: {}", timerService.getTimers().toString());

for (Timer t : timerService.getTimers()) {
t.cancel();
logger.info("killed the timer service: {}", t);
}

TimerConfig timerConfig = new TimerConfig();
timerConfig.setPersistent(false);

Timer createdIntervalTimer = sessionContext.getTimerService().createIntervalTimer(0, 5000, timerConfig);
logger.info("Created new Timer: {}", createdIntervalTimer);

}

关于java - Wildfly Scheduled EJB - 执行多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30894140/

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