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

Grails 只读模式下不允许写入操作(FlushMode.MANUAL):,grails,service,transactions,spring-transactions,Grails,Service,Transactions,Spring Transactions,Grails1.3.7 我们有一个合并2个用户的服务方法。由于数据量很大,因此需要进行大量的读取、更新和写入。我们在服务中有transactional=true。我知道Grails的默认刷新模式是AUTO。我理解这个错误信息的含义 但是,它不会发生在本地,也不会发生在我们的登台环境中。它们都以相同的权限运行相同版本的MySQL(密码是例外) 我知道我可以更改默认的FlushMode行为,但我很犹豫,因为我不能在生产环境以外的任何环境中复制该行为。现在我只是想知道是否有什么东西可能导致这种情况,而

Grails1.3.7

我们有一个合并2个用户的服务方法。由于数据量很大,因此需要进行大量的读取、更新和写入。我们在服务中有transactional=true。我知道Grails的默认刷新模式是AUTO。我理解这个错误信息的含义

但是,它不会发生在本地,也不会发生在我们的登台环境中。它们都以相同的权限运行相同版本的MySQL(密码是例外)

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

逐字记录错误消息为:

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


我在Grails1.3.7应用程序中也看到类似的错误。在我的例子中,我的后端数据库有一些锁争用问题,导致应用程序抛出CannotAcquireLockException。点击其中一个之后,我们会看到许多与您看到的完全相同的InvalidDataAccessApiusAgeException(巧合的是,也只发生在我们的prod环境中,而不是开发或测试环境中)


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

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


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

您能显示一些代码和/或错误消息吗?由于敏感的客户端信息,我无法在没有大量清理的情况下显示代码。我会处理这个问题,但是我已经编辑了我的问题以包含错误消息,这与问题基本相同。Gregg-您是否有配置为用法:只读的二级缓存?出于某种原因,我想我看到过这样的情况:我试图修改一个配置了只读缓存的域对象。你能显示一些代码和/或错误消息吗?由于敏感的客户端信息,我无法在没有大量清理的情况下显示代码。我会处理这个问题,但是我已经编辑了我的问题以包含错误消息,这与问题基本相同。Gregg-您是否有配置为用法:只读的二级缓存?出于某种原因,我想我看到过这样的情况,我试图修改一个配置了只读缓存的域对象。