2017-07-27 29 views
0

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

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

回答

1

您可以使用选择的更新:

select * from table for update 

这将阻止所选记录的交易时间,即由其他服务器发出将等到事务犯了同样的疑问。

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

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

相关问题