EJB 3 计时器执行多次

Rwa*_*nou 4 timer ejb-3.1

我的 EJB 3 计时器在多次启动时遇到了一些问题。我没有在注释中配置计时器,而是使用编程配置,如许多博客中所述。这是我的代码:

@Singleton
@Startup
public class AutoAssignTask extends AbstractDirectoryMonitor {

    @Resource
    private TimerService timer;

    @Inject
    @PropertyResource(name = "timer.hour", resource = "/DL4/app.conf")
    private String hour;
    @Inject
    @PropertyResource(name = "timer.minute", resource = "/DL4/app.conf")
    private String minute;
    @Inject
    @PropertyResource(name = "timer.second", resource = "/DL4/app.conf")
    private String second;

    @EJB
    private AutoAssignService autoAssignService;

    @PostConstruct
    public void init() {
            // initializing with an expression.
        this.initSchedule();
    }
    protected void initSchedule() {
        ScheduleExpression exp = new ScheduleExpression();
        if (!StringUtils.isEmpty(this.getHour())) {
            exp.hour(this.getHour());
        }
        if (!StringUtils.isEmpty(this.getMinute())) {
            exp.minute(this.getMinute());
        }
        if (!StringUtils.isEmpty(this.getSecond())) {
            exp.second(this.getSecond());
        }
        this.getTimer().createCalendarTimer(exp);
    }

    @Timeout
    public void process() {
        // do something
        AutoAssignTask.LOG.info("starting job.");
    }
Run Code Online (Sandbox Code Playgroud)

现在假设我每分钟配置一个计时器,当我查看我的日志时,我得到了两倍的“开始工作”日志,证明它开始工作两次。

关于什么是错的任何想法?

Ste*_*han 5

这个问题可能很老了,但看起来(至少对于JBoss EAP 7),计时器%JBOSS_HOME%\standalone\data\timer-service-data以 XML 格式存储。因此,它很可能是从它们的多个ScheduleExpression.

至少我的情况是这样。删除所有 XML 并重新部署应用程序解决了问题。