6

我使用 ehcache 作为我的二级缓存运行我的 Grails 应用程序,它可以工作。我安装了ehcache插件+cache插件,然后它没有。我尝试了几乎所有来自互联网的解决方案,但没有找到我不断得到的解决方案Another unnamed CacheManager already exists in the same VM

一种可能的解决方案是在 中设置p:shared=trueEhCacheManagerFactoryBean如果我使用旧插件“来自 grails 的 springcache 插件”,则此方法有效,但对于新插件,他们使用此管理器的修改版本并且共享属性不可用。

我尝试定义一个新ehcache.xml文件,但我仍然无法为这个缓存管理器输入一个新名称。

我尝试更改我cache.provider内部的类DataSource.groovy以使用另一个EhCacheProvider类,例如Singleton.

不用说,我测试了在不同的地方使用 DSL 设置不同的名称,但仍然没有运气。

最后,我使用了旧的弹簧缓存插件,该插件已被弃用。有人可以帮忙吗?

我正在使用 Grails 2.0.3 和ehcache-core:2.5.3.

4

4 回答 4

7

hibernate部分中DataSource.groovy,确保您cache.provider.class是最新的:

hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = true
    cache.region.factory_class = 'grails.plugin.cache.ehcache.hibernate.BeanEhcacheRegionFactory' // For Hibernate before 4.0
    cache.region.factory_class = 'grails.plugin.cache.ehcache.hibernate.BeanEhcacheRegionFactory4' // For Hibernate before 4.0 and higher
}

我遇到了同样的问题,因为我cache.region.factory_class的已经过时了:net.sf.ehcache.hibernate.EhCacheProvider

请参阅http://grails-plugins.github.io/grails-cache-ehcache/guide/usage.html

于 2014-07-16T18:20:58.273 回答
5

对于那些在 Grails 2.5.x 中遇到此错误的人,只需将其添加到Config.groovy

beans {
   cacheManager {
      shared = true
  }
}

这为我解决了这个问题。

来源:https ://github.com/grails/grails-core/releases/tag/v2.5.0

于 2015-03-28T12:37:35.517 回答
0

尝试使用缓存缓存-ehcache插件,它对我有用,但有一些限制。但是对于二级缓存它可以正常工作

于 2013-04-09T07:40:26.633 回答
0

For people arriving here getting the same error as OP might consider that error might be caused by an update of a domain class at runtime (hot code swap), which is not done nicely in alle versions of Grails.

I hit this bug with Grails 2.5.4, yet with the application restart button as the only option to solve.

于 2016-06-23T13:40:20.973 回答