2011-10-05 86 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中的鎖定功能,並檢查可能是實際根本原因的其他與數據庫相關的異常。