我有一个java批处理过程,它向MQ发布消息处理。与队列关联的MDB处理消息。每条消息都有10条记录。我需要更新数据库表以跟踪已处理的记录,成功和失败。每个批次运行的表中只有一行。所以问题在于,由于MDB的多个实例正在尝试更新,因此我们面临并发问题。我们也试过了行级锁定。但问题仍然存在。
我正在寻找一个解决方案,我可以在java端跟踪计数器,然后在达到某个阈值后再进行一次更新。让我们说发布了500条消息。每条消息处理10条记录。在处理此消息中的所有记录之后,MDB应更新此计数器。然后,计数器将生成一个将更新数据库的线程(如果满足阈值)。
请告诉我有哪些选择。
App Server - ZAS OS上的WAS 5.6,DB2 9.1。通过SP访问DB2。
谢谢!
答案 0 :(得分:0)
您是否尝试过完全在数据库服务器上进行更新?例如:
UPDATE COUNT_TABLE SET COUNTER = COUNTER + 1 WHERE ...
DB服务器应该能够像这样管理并发更新语句。
答案 1 :(得分:0)
最简单的解决方案是只运行一个MDB实例,并且您的并发问题就会消失。
这会慢一点,因为你将一次进行10次DB更新而不是你提出的500次更新,但除非这是一个问题,否则我会保持简单。