我目前正在开发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()
的结果只能在日志文件中找到一次。
注意:
我目前正在开发Java EE应用程序,该应用程序将部署在Payara服务器4上。payara服务器在主机1上运行,并且还有2个实例(主机1和主机2)可用作Payara ...
为什么会发生这种现象?
在JEE规范中,无法拥有整个群集范围的@Singleton
。