java - 为什么我的 EJB3,1 计时器在两个服务器实例上运行?

标签 java timer ejb-3.1

我们有一个 @Singleton EJB,它正在运行一个带有由以下注释创建的超时方法的计时器:

@Schedule(hour = "*", minute = "*/5", second = "0")
public void processCodes() {

很长一段时间它只会在集群服务器的单个实例上运行,但现在它坚持在两个实例上运行,这导致了重复工作。

我们添加了“持久”,如下所示:

@Schedule(hour = "*", minute = "*/5", second = "0", persistent = true)
public void processCodes() {

尽管这应该是默认值。它仍然在两台服务器上运行。我应该检查一些服务器设置以确保正确创建集群吗?

任何关于尝试什么或下一步去哪里的建议将不胜感激。 谢谢! 彼得

最佳答案

默认情况下,EJB 容器使用特定于服务器的数据库来保存持久计时器。在集群(网络部署)环境中,您需要配置EJB容器以使用指向公共(public)数据库的数据源。最简单的方法是将 EJB 计时器服务配置为使用自定义数据源,但您也可以将 EJB 计时器服务配置为将自定义调度程序与自定义数据源一起使用。更多信息请参见Configuring a timer service for network deployment知识中心的主题。

关于java - 为什么我的 EJB3,1 计时器在两个服务器实例上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24372386/

相关文章:

c# - Windows 窗体在计时器滴答时卡住

java - @Resource 可以用于在 EJB3.0 中注入(inject)原语吗?

java - 将无状态 bean 注入(inject)单例 bean

java - Oracle BPM 11g 组织单位

java - 如何让 Java swing 应用程序遵守 OS DPI 设置

c# - 同步定时器以防止重叠

java - EJB事务相对于Spring事务的优势

java - 获取用户坐标并比较距所需位置的距离的最简单方法

java - 如何在Eclipse中的函数或类的右键菜单中添加命令?

C# 创建一个定时器循环,每 30 分钟运行一次代码?