java - 数据库选择语句的并发问题

标签 java jdbc oracle10g transaction-isolation weblogic8.x

我有一个问题,我正在考虑在这种情况下使用数据库隔离类型 == 可序列化,但在阅读了一堆文章之后,我仍然不相信这是解决我下面问题的方法。

设置:

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/

相关文章:

jdbc - Seam 异步方法中的事务/数据库问题

ORACLE PL/SQL : Testing SELECT FOR UPDATE in Oracle SQL Developer

java - 使用 NumberFormat 格式化数字的 FieldPosition

java - 如何使用 gradle 对多个嵌入式服务器运行 spring-boot 集成测试

Java OCR 没有产生任何输出

java - oracle 中的什么数据类型会映射到 Java int?

java - 数据库中的自动序列增量器

java - Maven单独构建打包和Cucumber集成测试

tomcat - tomcat 线程 "PoolCleaner[{a number}]"异常

java - 无法从 Eclipse 建立到 Hive 的 JDBC 连接