2014-01-22 35 views
0

我試圖使用grails的cache-ehcache插件,它似乎很容易設置和使用! 不過,如果我正確讀取以下應該工作,並返回緩存的結果的文檔:具有Cache-Ehcache插件的Grails - 二級緩存

DataSource.groovy的:

hibernate { 
    cache.use_second_level_cache = true 
    cache.use_query_cache = true 
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' 
} 

Config.groovy中:

grails.cache.config = { 
    domain { 
    name 'com.mycompany.User' 
    } 
} 

MyClass的:

User.findByMyField("myVal", [cache:true]) 

但它不爲我工作,除非我還添加下列User.groovy

static mapping = { 
    cache true 
} 

我下的印象,改變以用戶是沒有必要的,因爲這是「域{}」塊Config.groovy是定義,但我不能讓它沒有它的工作,否則。

我真的很想避免修改User.class,因爲它用於我不想受到影響的多個項目!

任何建議,將不勝感激!

回答

1

DSL中的domain方法只是使配置更加直觀的別名,但它不會影響域類是否緩存,也不會影響它在啓用時的緩存方式。您仍然需要使用cache.use_second_level_cache = true來啓用緩存,並在域類中配置緩存。

Hibernate中的二級緩存是基於接口的,大部分實際工作都是由您選擇的實現完成的。因此,您需要在Hibernate中啓動事務,並且GORM使用mapping塊中的cache方法執行此操作,但您需要執行特定於實現的配置來調整緩存,這就是您需要使用Ehcache的地方API直接或間接地,例如通過這個DSL。

+0

非常感謝。感謝我的想法,這是沒問題的,因爲我仍然應該能夠通過簡單地關閉second_level_cache來讓這些更改脫離其他項目。 – Kostya