【问题标题】:How to schedule a periodic Java task under WebSphere 7?WebSphere 7下如何调度周期性Java任务?
【发布时间】: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 看起来可以解决我的问题,但我不知道这是否是处理它的最佳方法,或者将来是否会出现大的架构问题。
  • 根本没有理由应该存在架构问题,ScheduledExecutorService Just Works(tm)。而且,与其他解决方案不同,它对操作系统时间变化不敏感。
  • ScheduledExecutorService 的缺点是它使用非托管线程,所以像java:comp 这样的查找将不起作用。

标签: java jakarta-ee ejb scheduled-tasks websphere-7


【解决方案1】:

使用节点配置来了解哪些节点必须运行您的任务,哪些不需要。然后像这样创建结构:

if(shouldRun(THIS_NODE_NAME)) {
   //do job...
}

【讨论】:

    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 2019-05-25
    • 2017-07-25
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    相关资源
    最近更新 更多