只读模式(FlushMode.MANUAL)不允许写操作:

时间:2011-10-05 21:32:27

标签: grails service transactions spring-transactions

Grails 1.3.7

我们有一个合并2个用户的服务方法。由于数据量很大,所以这有很多部分,因此需要进行相当多的阅读,更新和编写。我们在服务中有transactional = true。我知道Grails的默认FlushMode是AUTO。我理解错误信息的含义。

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

我知道我可以更改默认的FlushMode行为,但我犹豫不决,因为我无法复制除生产之外的任何环境中的行为。现在我只是想知道是否有任何可能导致这与FlushMode无关的事情?

逐字错误讯息是:

  

org.springframework.dao.InvalidDataAccessApiUsageException:写   只读模式下不允许操作(FlushMode.MANUAL):转动   您的会话进入FlushMode.COMMIT / AUTO或删除' readOnly'标记   来自交易定义。

1 个答案:

答案 0 :(得分:0)

我在Grails 1.3.7应用程序中也看到了类似的错误。在我的情况下,我的后端数据库有一些锁争用问题,导致应用程序抛出CannotAcquireLockException。点击其中一个之后,我们会看到很多你所看到的完全相同的InvalidDataAccessApiUsageExceptions(巧合的是,也只发生在我们的prod环境中,而不是开发或测试)

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