【问题标题】:Grails with Cache-Ehcache plugin - Second Level Cache带有 Cache-Ehcache 插件的 Grails - 二级缓存
【发布时间】:2014-01-22 06:47:43
【问题描述】:

我正在尝试用于 grails 的 cache-ehcache 插件,它似乎很容易设置和使用! 但是,如果我正确阅读了以下文档,则应该可以正常工作并返回缓存结果:

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'
  }
}

我的班级:

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

但它对我不起作用,除非我也将以下内容添加到 User.groovy

static mapping = {
    cache true
}

我的印象是没有必要对 User 进行更改,因为这是 Config.groovy 中的“域{}”块所定义的,但如果没有它,我就无法让它工作。

我真的想避免修改 User.class,因为它在多个我不想受到影响的项目中使用!

任何建议将不胜感激!

【问题讨论】:

    标签: hibernate caching grails ehcache


    【解决方案1】:

    DSL中的domain方法只是一个别名,使配置更直观,但不影响域类是否缓存,只影响启用时如何缓存。您仍然需要使用cache.use_second_level_cache = true 整体启用缓存,并在域类中配置缓存。

    Hibernate 中的二级缓存是基于接口的,大部分实际工作由您选择的实现完成。因此,您需要在 Hibernate 中开始工作,而 GORM 使用 mapping 块中的 cache 方法来执行此操作,但是您需要执行特定于实现的配置来调整缓存,这就是您需要的地方直接或间接使用 Ehcache API,例如通过这个 DSL。

    【讨论】:

    • 非常感谢。感谢我的想法,这没关系,因为我仍然应该能够通过简单地关闭 second_level_cache 来将这些更改排除在其他项目之外。
    猜你喜欢
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 2014-06-01
    • 2012-12-12
    • 2014-11-10
    • 2010-10-28
    相关资源
    最近更新 更多