Операции записи не разрешены в режиме только для чтения (FlushMode.MANUAL): - PullRequest
2 голосов
/ 06 октября 2011

Grails 1.3.7

У нас есть метод обслуживания, объединяющий 2 пользователей.В этом есть немало деталей из-за большого количества данных, так что для чтения, обновления и записи требуется немало.У нас есть транзакция = true в сервисе.Я понимаю, что FlushMode для Grails по умолчанию - AUTO.И я понимаю, что означает это сообщение об ошибке.

Однако это не происходит локально и не происходит в нашей промежуточной среде.Все из которых работают идентичной версии MySQL с одинаковыми привилегиями (пароль является исключением).

Я знаю, что могу изменить поведение FlushMode по умолчанию, но я не решаюсь, так как я не могу дублировать поведение на любомсреда, чем производство.Прямо сейчас мне просто интересно, есть ли что-нибудь, что могло бы вызвать это, которое на самом деле не было бы связано с FlushMode?

Правильное сообщение об ошибке:

org.springframework.dao.InvalidDataAccessApiUsageException: Операции записи не разрешены в режиме только для чтения (FlushMode.MANUAL): превратить ваш сеанс в FlushMode.COMMIT / AUTO или удалить маркер readOnly из определения транзакции.

1 Ответ

0 голосов
/ 12 октября 2011

Я вижу ошибки, подобные этим, в моем приложении Grails 1.3.7. В моем случае в моей внутренней БД возникли проблемы с конфликтами блокировок, из-за которых приложение генерировало исключение CannotAcquireLockException. После нажатия одной из них мы увидим множество точно таких же исключений InvalidDataAccessApiUsageException, которые вы видите (по совпадению, это также произошло только в нашей среде prod, а не в dev или test)

Возможно, вы захотите проверить, чтобы ваш пользователь БД prod имел доступ к функциям блокировки в MySQL, и проверить другие исключения, связанные с базой данных, которые могут быть действительной основной причиной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...