1

据我了解,如果多个线程同时更新数据库表中的一行,则数据库将标记错误。

在我们的生产环境中,我们在一个集群中有 2 台 Tomcat 服务器。可能会发生两个用户同时被定向到每个 Tomcat 服务器并更新数据库表中的相同记录的情况。结果,将引发异常。

如何在本地机器上模拟这种情况?或者我将如何在与生产相同的环境中进行操作?

我正在研究的技术:Java 6、Spring 3、Hibernate、MS SQL Server 2008 和 Tomcat 7。

4

3 回答 3

0

您可以使用两个事务来模拟它。开始第一笔交易。开始第二个 tx。在第一个 TX 中进行一些更改并提交它。在第二个 TX 中进行一些更改并提交它。Hibernate 应该给你 OptimisticLockException。

于 2013-03-30T11:12:51.830 回答
0

你不想模拟场景。我读它是因为你想测试处理乐观锁异常的代码。我会简单地模拟抛出异常并显式抛出 OptimisticLockException 的类。在测试环境中使用异常处理程序内部的模拟类并编写测试fr异常处理程序。

我相信你并不担心测试乐观锁是否工作。因为这是 Hibernate 开发人员的工作。

于 2013-03-29T19:04:35.357 回答
0

据我了解,如果多个线程同时更新数据库表中的一行,则数据库将标记错误。

不必要。如果您运行如下两条语句,

UPDATE foo SET bar=baz WHERE bah=doh;

数据库可以简单地安排一个接一个地运行这些查询。但是死锁很多可能性 ,一般来说,结果取决于您的查询及其时间、数据集等。

于 2013-03-29T16:07:19.633 回答