Ehcache shutdown causing an exception while running test suite

我的梦境 提交于 2019-11-29 16:55:10

问题


I'm experiencing the following problem.

I have a test suit in my project and each individual test runs fine.

However when I run them as a suite I some of them fails with the following exception:

Caused by: java.lang.IllegalStateException: The dao Cache is not alive (STATUS_SHUTDOWN)
    at net.sf.ehcache.Cache$CacheStatus.checkAlive(Cache.java:4269)
    at net.sf.ehcache.Cache.checkStatus(Cache.java:2703)
    at net.sf.ehcache.Cache.get(Cache.java:1576)
    at org.springframework.cache.ehcache.EhCacheCache.get(EhCacheCache.java:61)
    at org.springframework.cache.interceptor.CacheAspectSupport.inspectCacheables(CacheAspectSupport.java:310)
    at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:198)
    at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:66)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)

Is there a way to avoid this behavior, i.e. keep the cache alive across multiple test or shutting it down properly?


回答1:


try to set shared property to false in EhCacheManagerFactoryBean or EhCacheCacheManager in the testing context.




回答2:


Make a seperate cache config for tests only! and put scope "prototype"

@Configuration
@EnableCaching
public class EhCacheConfig {

 @Bean(name = "cacheManager")
 @Scope("prototype")
 public CacheManager getCacheManager() {
    return new EhCacheCacheManager(getEhCacheFactory().getObject());
 }

 @Bean
 @Scope("prototype")
 public EhCacheManagerFactoryBean getEhCacheFactory() {
    EhCacheManagerFactoryBean factoryBean = new EhCacheManagerFactoryBean();
    factoryBean.setConfigLocation(new ClassPathResource("ehcache.xml"));
    factoryBean.setShared(true);
    return factoryBean;
 }
}



回答3:


This issue occurs basically, Whenever you Cache shared among multiple applications. So try not to share your cache by setting shared property to false.

<spring:bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <spring:property name="configLocation" value="classpath:ehcache.xml" /> <spring:property name="shared" value="false" /> </spring:bean>

But on execution you will encounter

Another CacheManager with same name 'cacheManager' already exists in the same VM. IllegalStateException

To counter this we need to mention

<spring:property name="cacheManagerName" value="abc" />

I hope finally issue will be resolved.




回答4:


JUnit share Spring context for speed. I've avoid from this exception when remove explicitly Spring context closing in one of my test. See Reuse spring application context across junit test classes



来源:https://stackoverflow.com/questions/16281802/ehcache-shutdown-causing-an-exception-while-running-test-suite

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!