我目前正在开发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
- 如果还有其他相关部分,请告诉我。