Java - 在 Jboss 中安排任务并且没有 EJB

Java - Scheduling tasks in Jboss & without EJB

我的 java Web 应用程序使用 spring 进行依赖注入,打包在 EAR 中并部署在 Jboss 7 中,但没有 EJB。该应用程序安装在两台负载平衡机上。我需要每天安排一个方法 运行,但该方法不能在两个实例上同时 运行。 我尝试使用 Spring 的调度注释,但问题是,由于存在负载平衡,调度方法 运行s 两次(每个集群一次)。 在 Jboss 7 中执行此操作的最佳方法是什么?有人可以帮助我吗?

要安排的方法如下所示。

public synchronized void processor() {

    LOGGER.info("start");

    //processing logic  

    LOGGER.info("the end");
}

非常感谢!!!

嗯,考虑到需求:两个或多个应用程序需要同步,您需要@Singleton 或@Stateless EJB,如here

通过计时器服务调用它,然后它需要是一个在某些方法上带有 @Timer 的 EJB,如果您在某个方法上使用 @Scheduled 等,那么它将调用该方法

在这种情况下,建议使用单例,否则,您最终可能会得到同一个计时器的多个实例 运行。

例子

#Example
    private void init() 
    {
        ScheduleExpression Expression = new ScheduleExpression();
        #This means twice per hour {0,2,4, ... 22} ~ since it ends on 23h: 
        expression.second(0).minute(0).hour(*/2).month(*).dayOfWeek(*);
        stopTimer();
        Timer timer = service.createCalendarTimer(exp);
    }

任何其他建议似乎都会增加太多的复杂性。