【发布时间】:2014-05-18 01:26:54
【问题描述】:
我需要在 WebSphere 7 集群环境中每 30 秒运行一次 Java 方法(两个盒子,每个盒子有 1 个服务器)——在避免并发问题的同时执行此操作的当前最佳实践是什么?
更多细节: 我们在 Oracle 数据库中有记录,需要准确地旋转一次。如果他们被耍弄,坏事就会发生。
所以我在想象这样的事情:
public synchronized void BatchTwiddle() {
List myList = findRecordsToBeTwiddled();
twiddleRecords(myList);
}
public void twiddleRecords(myRecords myList) {
ListIterator<myRecord> myRecordsIterator = myList.listIterator();
while (myRecordsIterator.hasNext()) {
myRecordsIterator.next().twiddleRecord();
}
}
当涉及多个服务器(总共 2 个)时,如何每 30 秒调用一次 BatchTwiddle()?最好只在一台服务器上运行它
到目前为止,我一直在深入研究 WebSphere 调度程序的概念,使用 ScheduledExecutorService 或使用 EJB 定时器,但似乎没有什么是明显的赢家。
【问题讨论】:
-
好吧,
ScheduledExecutorService有什么问题? -
@fge - 老实说,我不知道。我对 Java 还很陌生,虽然 ScheduledExecutorService 看起来可以解决我的问题,但我不知道这是否是处理它的最佳方法,或者将来是否会出现大的架构问题。
-
根本没有理由应该存在架构问题,
ScheduledExecutorServiceJust Works(tm)。而且,与其他解决方案不同,它对操作系统时间变化不敏感。 -
ScheduledExecutorService 的缺点是它使用非托管线程,所以像
java:comp这样的查找将不起作用。
标签: java jakarta-ee ejb scheduled-tasks websphere-7