簡體   English   中英

Grails /休眠緩存不可預測

[英]Grails/Hibernate Cache unpredictable

當我真的嘗試了所有方法后,我才求助於StackOverflow,但我只是想不出如何解決這個問題。 復制非常容易,基本上我有一個表(基本上只是保存設置的鍵/值表)。

class SystemSetting {
    Group settingGroup
    String key
    String value
    String label
    String type

    Date lastUpdated
    Date dateCreated
}

我有一個簡單的控制器,可讓我更新這些設置(@Transactional批注)並在保存時更新“ flush:true”。

現在,可以說,一旦做出更改,我就將選項從true設置為false(或任何更改),它不會反映在其他進程/會話上。

讀取設置的代碼如下:

SystemSetting setting = SystemSetting.find("FROM SystemSetting ss WHERE ss.settingGroup = :group AND ss.key = :key",
            [group: group, key: key]
        );

因此,例如,在瀏覽器A)中,我更新了一個設置。 在瀏覽器B(​​或curl)中,當我查看/訪問此設置時,它仍然具有舊值。

我已禁用所有已知的緩存:

hibernate {
    cache.use_second_level_cache = false
    cache.use_query_cache = false
    cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4
    singleSession = true // configure OSIV singleSession mode
    flush.mode = 'manual' // OSIV session flush mode outside of transactional context
}

grails.hibernate.cache.queries = false

但是這些結果仍然很容易重復。 什么/為什么/在哪里緩存此選項,以及如何使其無效?

確實,這不會讓我感到內在的溫暖,因為如果我不確定從數據庫中將要輸出什么數據,則會產生很多問題:(

使用Grails 2.5.1(並在2.4.4上進行測試,結果相同)。

更新:

我已經能夠在一個全新的應用程序中復制它。

可在此處找到應用程序: https : //github.com/donald-jackson/grails-async-error-demo

復制:

  1. 克隆存儲庫並配置數據源以使用本地MySQL。
  2. 在Grails中運行“應用程序”並訪問/ AsyncErrorTest / systemSetting
  3. 使用optionName ='testOption'將設置值設置為true(或false)來創建設置
  4. 使用curl(或其他瀏覽器)幾次訪問/ AsyncErrorTest / systemSetting / showVariable,更改變量值,您將看到輸出正確反映了更改。
  5. 再次更改“ testOption”的值。
  6. 使用curl多次調用/ AsyncErrorTest / systemSetting / showVariableAsync,您會注意到該變量將開始在當前值和上一個值之間更改其值。
  7. 注意到此行為后,您可以在瀏覽器中甚至是原始的showVariable方法中進行檢入,它還會提供不可靠的輸出。

此問題已報告給Grails問題,並已在Grails 2.5.2中修復。

https://github.com/grails/grails-core/issues/9198

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM