Grails ehcache插件 - 另一个未命名的CacheManager已经存在于同一虚拟机中

6
我使用ehcache作为我的二级缓存来运行Grails应用程序,它可以正常工作。我安装了“ehcache”插件和“cache”插件,但是它无法运行。我尝试了互联网上几乎所有的解决方案,但都没有解决问题,我一直收到“Another unnamed CacheManager already exists in the same VM”的错误信息。
其中一个可能的解决方案是在“EhCacheManagerFactoryBean”中设置“p:shared=true”,如果我使用旧插件“springcache plugin from grails”,这将起作用,但是使用新插件时,他们使用了此管理器的修改版本,并且该共享属性不可用。
我尝试定义一个新的“ehcache.xml”文件,但仍然无法在其中放置此缓存管理器的新名称。
我尝试更改我的“DataSource.groovy”中的“cache.provider”类,以使用另一个“EhCacheProvider”,例如“Singleton”。
不用说,我已经在不同的地方使用DSL尝试过放置不同的名称,但仍然没有成功。
最后,我正在使用已弃用的旧版Spring缓存插件。有人能帮忙吗?
我正在使用Grails 2.0.3和“ehcache-core:2.5.3”。
4个回答

7
DataSource.groovy文件的hibernate部分,确保你的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

这是正确的答案,楼主请给这位大佬点赞 :) - Glenn Filson
1
值得注意的是,如果您在不同版本的Grails中遇到相同的错误,则可能需要使用不同的缓存工厂类来进行Hibernate。 您的版本(以及任何中间版本)的发布说明始终是一个有用的检查位置(例如https://github.com/grails/grails-core/releases/tag/v2.4.5)。 - jonnybot

5

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

0

对于遇到与 OP 相同错误的人,可能要考虑该错误可能是由于域类在运行时更新(热代码替换)所造成的,而在 Grails 的所有版本中都没有很好地完成。

我在 Grails 2.5.4 中遇到了这个 bug,只有应用程序重启按钮才是解决的唯一选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接