1. 首页 > 快讯

另一个同名的CacheManager 已存在解决方案

Caused by: net.sf.ehcache.CacheException: 同一VM 中已存在另一个同名“shiro-cache”的CacheManager。请为配置中的每个CacheManager 提供唯一的名称,或执行以下操作之一:1。使用CacheManager.create( ) 静态工厂方法之一来重用具有相同名称的同一个CacheManager,或者在必要时创建一个CacheManager2。在创建同名的新缓存管理器之前,请关闭早期的缓存管理器。出现这个错误的原因是,对于新版本(2.5及以上)的Ehcache,CacheManager采用单例模式,当使用Spring Boot devtools启用热重加载功能时,加载SecurityManager Bean对象实例时会创建多个CacheManager实例,导致出现上述异常。

在此之前,网上已经给出了很多解决方案,比如降低Ehcache版本、设置缓存共享属性等。那么,如何在不改变当前框架版本的情况下修复上述异常呢?下面是作者的完整解决方案。

1、改造前的代码

以下代码片段是转换前的示例:

本例中只是简单创建了ehcacheManager对象实例,并设置了缓存文件的存储地址。新版本中要求CacheManager为单例模式,因此需要使用EhCachManagerFactoryBean对象将cacheManager限制为共享模式。 EhCachManagerFactoryBean是Spring提供的ehcache实现类。接下来我们看看如何改造。

2.修改代码

共有三处修改。分别是:配置EhcacheManagerFactoryBean并设置为共享模式,配置DefaultAdvisorAutoProxyCreator,让Spring管理Shiro的bean生命周期,配置lifecycleBeanPostProcessor,让DefaultAdvisorAutoProxyCreator依赖于这个对象。

另一个同名的CacheManager 已存在解决方案

2.1 添加EhcacheManagerFactoryBean配置项

在原配置文件中添加EhcacheManagerFactoryBean配置项,并将shared属性设置为true。示例代码如下:

2.2 添加LifecycleBeanPostProcessor配置项

添加LifecycleBeanPostProcessor配置项。 LifecycleBeanPostProcessor会统一管理Initialized和Destroyable的实现类,从而达到统一管理Shiro Bean生命周期的目的。示例代码如下:

2.3 添加DefaultAdvisorAutoProxyCreator配置项

DefaultAdvisorAutoProxyCreator的作用是动态代理Shiro的事务,最终将事务交给Spring统一管理。该配置项需要依赖LifecycleBeanPostProcessor。示例代码如下:

用户评论

生命一旅程

我遇到了这个错误提示,是在使用Spring Boot的时候吗?

    有5位网友表示赞同!

回忆未来

换了不同的名字试试?

    有10位网友表示赞同!

窒息

另一个CacheManager的名字重复了?那应该检查配置文件看有没有写错地方。

    有20位网友表示赞同!

箜篌引

遇到过这种情况,可以尝试删除重复的配置项!

    有20位网友表示赞同!

花开丶若相惜

确保缓存管理器bean 的名称唯一。检查容器中的所有bean定义。

    有17位网友表示赞同!

迷路的男人

这可能是Spring配置的问题,需要检查spring的配置文件?

    有17位网友表示赞同!

冷月花魂

别忘了重启项目试试哦!有时候简单重启就能解决这个问题。

    有10位网友表示赞同!

裸睡の鱼

这个错误提示说明CacheManager定义冲突了,应该查看相应的配置文档!

    有10位网友表示赞同!

减肥伤身#

重命名或者删除重复的CacheManager即可

    有9位网友表示赞同!

白恍

检查你的配置文件或者代码里有没有同样的CacheManager的定义!

    有9位网友表示赞同!

南初

如果在项目中有多个spring应用的话还需要留意不同模块的配置冲突!

    有14位网友表示赞同!

妄灸

我之前遇到的时候是Spring Boot自动生成的配置导致冲突,修改配置文件就解决了!

    有16位网友表示赞同!

江山策

可以看看Spring文档,解释了CacheManager的定义以及命名规则!

    有15位网友表示赞同!

我家的爱豆是怪比i

这个错误提示非常恼人啊,希望你能找到解决办法!

    有12位网友表示赞同!

早不爱了

仔细检查你的代码,确保没有重复使用相同的CacheManager名称

    有14位网友表示赞同!

珠穆郎马疯@

遇到这种情况一般是配置文件冲突引起的,需要仔细排查!

    有20位网友表示赞同!

微信名字

这种错误通常出现在SpringBoot的集成测试中,建议看看Spring文档的解释。

    有14位网友表示赞同!

隔壁阿不都

有没有尝试更新一下相关依赖包试试?有时版本问题也会导致这个错误。

    有18位网友表示赞同!

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/5660.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666