多服务器应用程序从同一表

时间:2017-07-27 19:32:19

标签: database ejb cluster-computing appserver ejb-timer

我有一个在两个不同服务器实例上运行的应用程序。应用程序有一个单独的EJB,其计时器设置为每隔一分钟运行一次。 EJB中的方法从表中读取记录将其删除并通过队列发布(一个事务的所有部分)。两台服务器启动后,它会尝试同时从表中读取记录。

我的问题是如何只允许一个应用程序读取记录,直到事务结束。

2 个答案:

答案 0 :(得分:1)

您可以使用select for update:

select * from table for update

这将阻止交易时间的选定记录,即其他服务器发出的相同查询将一直等到交易提交。

  

SELECT ... FOR UPDATE读取最新的可用数据,在其读取的每一行上设置独占锁。因此,它设置搜索的SQL UPDATE将在行上设置的相同锁。

https://dev.mysql.com/doc/refman/5.7/en/innodb-locking-reads.html

答案 1 :(得分:0)

感谢您的回答!

这是我最终要做的事情。我正在使用jboss应用程序服务器,并且我实现了HASingleton功能,该功能只允许在集群环境中的一台服务器上一次运行一个singleton bean实例。

https://docs.jboss.org/author/display/WFLY10/HA+Singleton+Features