我有一个问题,我正在考虑在这种情况下使用数据库隔离类型 == 可序列化,但在阅读了一堆文章之后,我仍然不相信这是解决我下面问题的方法。
设置:
Weblogic cluster > 2 servers
Simple Java JDBC
Servlets, EJB Session beans 2.0
我有一个表LAN
,我们根据客户端提供的输入选择匹配值。
局域网
lan_id | name | some_values | is_available
-------------------------------------
13 | ss | 3234 | yes
12 | sssd| 3234 | yes
14 | sssd| 3234 | yes
15 | ssaa| 3234 | yes
现在在业务逻辑中,我需要从 LAN 中选择一个匹配的行并保存另一个表 LAN_Assignment
LAN_分配
lan_id | lan_assg_id | some other columns
-------------------------------------------
当运行 select 语句时,我从 LAN 表中获取匹配行并将其分配给 lan_assignment 表。
现在如果有 5 个请求来自客户端(可以是集群中的任何服务器),它们都会选择第一个可用的 LAN 并将其保存到另一个表中。
如何确保从客户端发出的第二个请求不会选择选择 LAN 的第一个请求?
PS:选择语句和业务逻辑并不像这里解释的那么简单。选择LAN的条件很多,保存到Lan_assignment等,
谢谢
最佳答案
您可以使用 SKIP LOCKED为您的目的。当 session 1 锁定该行时, session 2 可以跳过它并处理下一个。我相信它也存在于 10g 中,但从未记录在案。
关于java - 数据库选择语句的并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28865746/