【发布时间】:2015-06-29 15:16:25
【问题描述】:
net.sf.ehcache.CacheException: Another CacheManager with same name 'fernowebapp' already exists in the same VM. Please provide unique names for each CacheManage
r in the config or do one of following:
1. Use one of the CacheManager.create() static factory methods to reuse same CacheManager with same name or create one if necessary
2. Shutdown the earlier cacheManager before creating new one with same name.
这是 web.xml
<servlet>
<servlet-name>ferno</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- <load-on-startup>1</load-on-startup> -->
</servlet>
<servlet-mapping>
<servlet-name>ferno</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/ferno-servlet.xml</param-value>
</context-param>
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>com.vuelogix.collygo.context.FernoApplicationContextInitializer</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
当我检查日志时,我发现应用程序上下文被初始化了两次。我刚刚通过禁用调度程序 servlet 的启动负载来验证它。当我禁用调度程序 servlet 时,我发现异常不会在启动时出现。但是当我第一次尝试点击任何控制器类时就会发生这种情况。
我在Why does Spring MVC need at least two contexts? ,Spring - application Initialized twice? 中发现了一些类似的问题
在下面的链接中提到,对于 Ehcache 2.5 及更高版本,不允许在同一个 JVM 中存在多个同名的 CacheManager。创建非单例缓存管理器的 CacheManager() 构造函数可能违反此规则。
Another unnamed CacheManager already exists in the same VM (ehCache 2.5)
如果要再次加载应用程序上下文以初始化调度程序 servlet,那么初始化 CacheManager 等类的最佳方法是什么?
如果我为调度程序 servlet 添加初始化参数,我相信它会起作用。评论中提到。就我而言,我没有用于调度程序 servlet 的单独应用程序上下文,所以我相信它在我的应用程序上下文中可以正常工作。 更新: 所以,当我真的需要一个单独的应用程序上下文为我的调度程序 servlet 时,最好的做法是从第二个上下文中删除缓存声明(在这种情况下)并在根配置上进行这些配置?如果我错了,请纠正我
【问题讨论】:
-
contextConfigLocation
标签: java spring spring-mvc ehcache