2011-10-05 88 views
2

Grails的1.3.7写操作都没有只读模式(FlushMode.MANUAL)允许:

我们有合并2个用户提供服务的方法。由于数据量很大,所以读取,更新和写入的内容相当多。我们在服务中有transactional = true。我知道Grails默认的FlushMode是AUTO。我明白那个错误信息的含义。

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

我知道我可以更改默认的FlushMode行为,但我很犹豫,因为我无法在生产环境中复制任何环境的行为。现在我只是想知道是否有什么可能导致这个事实上与FlushMode无关?

逐字的错误消息是:

org.springframework.dao.InvalidDataAccessApiUsageException:写 操作都没有只读模式(FlushMode.MANUAL)允许:打开 您的会话到FlushMode.COMMIT/AUTO或从交易定义中移除'readOnly'标记 。

+0

你能显示一些代码和/或错误信息吗? –

+0

由于敏感的客户端信息,我无法在没有大量清理的情况下显示代码。我会处理这个问题,但是我编辑了我的问题以包含错误消息,这与问题基本相同。 – Gregg

+0

Gregg - 你有配置了使用的二级缓存:只读吗?出于某种原因,我想我已经看到过这样的地方,我试图修改一个域对象,我配置了一个只读缓存。 – proflux

回答

0

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

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