Grails ehcache 插件 - 另一个未命名的 CacheManager 已存在于同一 VM 中
Posted
技术标签:
【中文标题】Grails ehcache 插件 - 另一个未命名的 CacheManager 已存在于同一 VM 中【英文标题】:Grails ehcache plugin - Another unnamed CacheManager already exists in the same VM 【发布时间】:2013-03-17 10:42:24 【问题描述】:我使用 ehcache 作为二级缓存运行我的 Grails 应用程序,它可以工作。我安装了 ehcache
插件 + cache
插件,然后它没有。我尝试了互联网上的几乎所有解决方案,但没有找到解决方案,我一直收到Another unnamed CacheManager already exists in the same VM
。
其中一个可能的解决方案是在EhCacheManagerFactoryBean
中设置p:shared=true
,如果我使用旧插件“来自grails 的springcache 插件”,则此方法有效,但对于新插件,他们使用此管理器和属性的修改版本共享不可用。
我尝试定义一个新的ehcache.xml
文件,但我仍然无法为这个缓存管理器输入一个新名称。
我尝试将DataSource.groovy
中的cache.provider
类更改为使用另一个EhCacheProvider
,例如Singleton
。
不用说,我在不同的地方使用 DSL 测试了不同的名称,但仍然没有运气。
最后,我使用了旧的 spring 缓存插件,该插件已被弃用。有人可以帮忙吗?
我正在使用 Grails 2.0.3 和 ehcache-core:2.5.3
。
【问题讨论】:
【参考方案1】:在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
【讨论】:
这是正确答案,OP请给这个人他的道具:) 值得注意的是,如果您在不同的 Grails 版本中遇到相同的错误,则可能需要为 Hibernate 使用不同的缓存工厂类。您的版本(以及任何中间版本)的发行说明总是一个有用的地方来检查(例如github.com/grails/grails-core/releases/tag/v2.4.5)。【参考方案2】:对于那些在 Grails 2.5.x 中遇到此错误的用户,只需将其添加到 Config.groovy
即可:
beans
cacheManager
shared = true
这解决了我的问题。
来源:https://github.com/grails/grails-core/releases/tag/v2.5.0
【讨论】:
【参考方案3】:尝试使用 cache 和 cache-ehcache 插件,它对我有用,但有一些限制。但是对于二级缓存它可以正常工作
【讨论】:
【参考方案4】:对于到达这里的人遇到与 OP 相同的错误,可能会认为该错误可能是由运行时域类的更新(热代码交换)引起的,这在所有版本的 Grails 中都做得不好。
我在 Grails 2.5.4 中遇到了这个错误,但应用程序重启按钮是唯一可以解决的选项。
【讨论】:
以上是关于Grails ehcache 插件 - 另一个未命名的 CacheManager 已存在于同一 VM 中的主要内容,如果未能解决你的问题,请参考以下文章
Grails 2.4.5 错误 net.sf.ehcache.CacheException:javax.management.MalformedObjectNameException 属性值部分中的无