Java - 在 Jboss 中调度任务且无需 EJB

标签 java spring jboss

我的java web应用程序使用spring进行依赖注入(inject),打包在EAR中并部署在Jboss 7中,但没有EJB。该应用程序安装在两台负载平衡机上。我需要安排一个方法每天运行,但该方法不能在两个实例上同时运行。 我尝试使用Spring的Scheduling注释,但问题是,由于存在负载平衡,所以scheduled方法运行了两次(每个集群一次)。 在 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);
    }

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

关于Java - 在 Jboss 中调度任务且无需 EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58012131/

相关文章:

java套接字服务器客户端->服务器->客户端

java - if 语句中的 stack.pop()

java - 实现 JPA 和 Spring boot 的搜索功能

java - 没有临时队列的 JMS RPC

mysql - 如何在 jboss 上建立到 mysql 服务器的只读 xa 数据源连接

web-applications - Jboss 初学者

java - Jenkins Jelly 更新文本框

java - 从数据库获取点到 map android

sql - 如何使用 log4j 打印 SQL 查询结果日志?

java - 在 Wildfly 中注入(inject) EJB 时的安全异常