【发布时间】:2011-06-18 21:33:38
【问题描述】:
我正在使用一个 spring REST 控制器,并且有一种情况,即两个 REST 客户端都调用控制器来获取要处理的值,但是我发现当它们都调用控制器时,它们都得到相同的值来处理同时。我正在使用 JPA 和 hibernate 作为提供程序。
我知道我需要将调用范围限定为单独的事务(我通过将 @Transactional 注释放在控制器方法上来完成)但发现它们仍然获得相同的值。
设备 1 - 时间戳 0:调用控制器
控制器 A: 从事件队列中读取所有“未决”事件
控制器 A:将“待处理”事件更新为“已处理”事件
设备 2 - 时间戳 0:调用控制器
控制器 B:从事件队列中读取所有“未决”事件
控制器 B:将“待处理”事件更新为“已处理”事件
控制器 B 不应该是控制器 A 已获取并处理的值...
所以我希望我正在寻找的是跨事务的“读锁”。
我对可扩展性很感兴趣,因此希望采用有助于可扩展性的最佳方法(即只想尽可能短地保留数据库事务)... 谢谢,
【问题讨论】:
标签: spring rest jpa transactions