我有一个带有两个@Schedules
的无状态 session bean:
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@Stateless
@Lock(LockType.WRITE)
@AccessTimeout(value = 0)
public class ScheduledTask {
@EJB
private SomeClass sClass;
@Schedules({
@Schedule(hour = "*", minute = "*/10",
info = "Automatic timer to send")})
public void send() {
sClass.doWork(true);
}
@Schedules({
@Schedule(hour = "*", minute = "*/35",
info = "Automatic timer to receive")})
public void receive() {
sClass.doWork(false);
}
}
我的问题是任务执行了两次。我已阅读topic但我还没有找到解决方案。
我在控制台中有相同的输出(例如(EJB 默认 - 1)和(EJB 默认 - 2)):
INFO [GENERAL_LOGGER] (EJB default - 2) resultForSend.size() = 500
INFO [GENERAL_LOGGER] (EJB default - 1) resultForSend.size() = 500
最佳答案
解决方案是从 WAR 模块中删除 EJB 类。我在 EAR 内的两个单独的模块(EJB 和 WAR)中拥有相同的类,因此 Schedules
注册了两次。打包过程中的一个愚蠢错误导致了双重执行。
关于java - 计划任务执行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20880145/