我需要在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()?最好只在一台服务器上运行它
到目前为止,我一直在使用ScheduledExecutorService或使用EJB计时器深入研究WebSphere Scheduler概念,但似乎没有什么是明显的赢家。
答案 0 :(得分:0)
使用节点配置来了解哪个节点必须运行您的任务,哪些节点不运行。然后创建这样的结构:
if(shouldRun(THIS_NODE_NAME)) {
//do job...
}