2

圣杯 1.3.7

我们有一个合并 2 个用户的服务方法。由于数据量很大,因此有很多部分,因此需要进行大量读取,更新和写入。我们在服务中有 transactional=true。我知道 Grails 的默认 FlushMode 是 AUTO。而且我了解该错误消息的含义。

但是,它不会在本地发生,也不会在我们的暂存环境中发生。所有这些都以相同的权限运行相同版本的 MySQL(密码除外)。

我知道我可以更改默认的 FlushMode 行为,但我很犹豫,因为我无法在生产环境之外的任何环境中复制该行为。现在我只是想知道是否有任何可能导致这种情况实际上与 FlushMode 无关的东西?

逐字错误消息是:

org.springframework.dao.InvalidDataAccessApiUsageException:只读模式下不允许写入操作(FlushMode.MANUAL):将您的 Session 转换为 FlushMode.COMMIT/AUTO 或从事务定义中删除“readOnly”标记。

4

1 回答 1

0

我在我的 Grails 1.3.7 应用程序中也看到了与这些类似的错误。就我而言,我的后端数据库遇到了一些锁争用问题,导致应用程序抛出了一个无法获取锁异常。在点击其中一个之后,我们会看到许多与您看到的完全相同的 InvalidDataAccessApiUsageExceptions(巧合的是,也只发生在我们的产品环境中,而不是开发或测试环境中)

您可能需要检查以确保您的 prod DB 用户可以访问 MySQL 中的锁定功能,并检查可能是实际根本原因的其他与数据库相关的异常。

于 2011-10-12T18:33:24.033 回答