我有一个使用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/

10-12 18:26