Java EE应用程序中计划任务的并行化

问题描述 投票:0回答:1

我目前正在开发Java EE应用程序,该应用程序将部署在Payara服务器4上。payara服务器在主机1上运行,并且还有两个实例(主机1和主机2)可用作Payara集群。

我的问题是,如果我们在单例类中安排任务,那么该任务将同时执行三次。问题是2倍。

  • 为什么会发生这种现象?
  • 如何避免这样的多次执行?

入口点看起来像这样。 (不是全部。)

@ApplicationScoped
@Singleton
public class StartClass {
    public void StartClass() {}
    public void init(@Observes @Initialized(ApplicationScoped.class) ServletContext) throws ... { ... }

    @Schedule(hour="*", minute="0", persistent=false)
    public void runJob() {
        MyClass my_class = new MyClass();
        my_class.do_the_job();
    }
}

这里我上面提到的计划任务是my_class.do_the_job()。此方法只是在数据库中插入一行,其源代码与this tutorial非常相似,并且具有多个System.out.println("DO_THE_JOB")。目标表具有一列,该列将自动使用插入的时间戳进行填充。我还用System.getenv("HOST")放置了有关主机的信息。结果是我们每小时插入三行:主机1排2行,主机2排1行。但是println()的结果只能在日志文件中找到一次。

注意:

  • JTA的使用不是重点。我想了解应用程序和集群的行为。
  • Java版本是8
  • 如果还有其他相关部分,请告诉我。

我目前正在开发Java EE应用程序,该应用程序将部署在Payara服务器4上。payara服务器在主机1上运行,并且还有2个实例(主机1和主机2)可以用作Payara ...

java jakarta-ee glassfish payara
1个回答
0
投票

为什么会发生这种现象?


0
投票

在JEE规范中,无法获得整个群集范围的@Singleton。您必须使用特定于Payara的集群单身人士。从Payara 4.182开始可用。

© www.soinside.com 2019 - 2024. All rights reserved.