我有一个使用Application.java
的Spring Boot Bean在本地运行的应用程序,称为cacheManager
@Bean(name="cacheManager")
@Primary
public CacheManager getCacheManager() {
return new EhCacheCacheManager();
}
由于它在本地工作,因此我将其部署到服务器上,显然还有另一个具有CacheManger的应用程序正在争夺空间
因为我得到以下stacktrace:
引起原因:net.sf.ehcache.CacheException:另一个未命名的CacheManager
同一虚拟机中已经存在。请为每个名称提供唯一的名称
在配置中使用CacheManager或执行以下任一操作:
1.使用CacheManager.create()静态工厂方法之一重用相同名称的相同CacheManager或在必要时创建一个
2.在创建具有相同名称的新cacheManager之前,请先关闭它。现有CacheManager的来源是:
DefaultConfigurationSource [ehcache.xml或ehcache-failsafe.xml],位于
net.sf.ehcache.CacheManager.assertNoCacheManagerExistsWithSameName(CacheManager.java:626)
在net.sf.ehcache.CacheManager.init(CacheManager.java:391)处
net.sf.ehcache.CacheManager。(CacheManager.java:269)在
org.springframework.cache.ehcache.EhCacheManagerUtils.buildCacheManager(EhCacheManagerUtils.java:54)
在
org.springframework.cache.ehcache.EhCacheCacheManager.afterPropertiesSet(EhCacheCacheManager.java:74)
在
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
在
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
...省略了32个通用框架
我试图放
@Bean(name="cacheManager")
@Primary
public CacheManager getCacheManager() {
return net.sf.ehcache.CacheManager.create();
}
但是
net.sf.ehcache.CacheManger.create()
不会返回spring CacheManger。我尝试将返回的CacheManager更改为net.sf.ehcache.CacheManager,但是在本地获取此信息:引起原因:java.lang.IllegalStateException:否CacheResolver
指定,没有找到CacheManager类型的唯一bean。标记为
主对象(或为其命名为“ cacheManager”)或声明一个特定的
要使用的CacheManager,它是默认的。在
org.springframework.cache.interceptor.CacheAspectSupport.afterSingletonsInstantiated(CacheAspectSupport.java:212)
在
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:781)
在
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
在
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
在
org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
在
org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737)
在
org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370)
在
org.springframework.boot.SpringApplication.run(SpringApplication.java:314)
在
org.springframework.boot.web.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:151)
在
org.springframework.boot.web.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:131)
在
org.springframework.boot.web.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:86)
在
org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169)
在
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5156)
在
org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
...更多42
我认为转换是答案,但答案也可能是一些狡猾的代码移动。
有什么建议吗?
附加信息:这是在web服务中
最佳答案
除非为Ehcache部署ehcache.xml
配置文件,否则您将获得默认的嵌入式配置。此配置未命名CacheManager
,并且如第一个例外所示,单个JVM中不能有多个。
最简单的解决方案是在包装中没有ehcache.xml
,然后由部署将其拾取。
关于java - 将net.sf.ehcache.CacheManger转换为org.springframework.cache.CacheManager吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45469815/