복붙노트

[SPRING] 테스트 스위트를 실행하는 동안 예외가 발생하는 Ehcache 종료

SPRING

테스트 스위트를 실행하는 동안 예외가 발생하는 Ehcache 종료

다음과 같은 문제가 발생합니다.

내 프로젝트에 테스트 스위트가 있고 각각의 개별 테스트가 정상적으로 실행됩니다.

그러나 스위트 룸으로 실행할 때 다음 중 일부가 실패하여 일부가 실패합니다.

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)

이 동작을 피할 수있는 방법이 있습니까? 즉 여러 테스트에서 캐시를 유지하거나 올바르게 종료하는 방법이 있습니까?

해결법

  1. ==============================

    1.테스트 컨텍스트에서 EhCacheManagerFactoryBean 또는 EhCacheCacheManager에서 공유 속성을 false로 설정하십시오.

    테스트 컨텍스트에서 EhCacheManagerFactoryBean 또는 EhCacheCacheManager에서 공유 속성을 false로 설정하십시오.

  2. ==============================

    2.테스트 용으로 별도의 캐시 구성을 만드십시오! 범위 "프로토 타입"

    테스트 용으로 별도의 캐시 구성을 만드십시오! 범위 "프로토 타입"

    @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. ==============================

    3.이 문제는 기본적으로 캐시가 여러 응용 프로그램간에 공유 될 때 발생합니다. 공유 속성을 false로 설정하여 캐시를 공유하지 않도록하십시오.

    이 문제는 기본적으로 캐시가 여러 응용 프로그램간에 공유 될 때 발생합니다. 공유 속성을 false로 설정하여 캐시를 공유하지 않도록하십시오.

    <봄 : 속성 이름 = "configLocation"값 = "클래스 경로 : ehcache.xml"/> <봄 : 콩 이름 = "ehcache"클래스 = "org.springframework.cache.ehcache.EhCacheManagerFactoryBean" shared "value ="false "/>

    그러나 실행에 당신은 만날 것이다

    'cacheManager'라는 이름을 가진 다른 CacheManager가 이미 동일한 VM에 존재합니다. IllegalStateException

    이것을 막기 위해 우리는 언급 할 필요가있다.

    <스프링 : 속성 이름 = "캐시 관리자 이름"값 = "abc"/>

    마침내 문제가 해결되기를 바랍니다.

  4. ==============================

    4.JUnit은 스프링 컨텍스트를 공유합니다. 내 테스트 중 하나에서 Spring 컨텍스트를 명시 적으로 닫을 때이 예외로부터 피한다. junit 테스트 클래스 전체에서 Spring 응용 프로그램 컨텍스트 재사용을 참조하십시오.

    JUnit은 스프링 컨텍스트를 공유합니다. 내 테스트 중 하나에서 Spring 컨텍스트를 명시 적으로 닫을 때이 예외로부터 피한다. junit 테스트 클래스 전체에서 Spring 응용 프로그램 컨텍스트 재사용을 참조하십시오.

  5. from https://stackoverflow.com/questions/16281802/ehcache-shutdown-causing-an-exception-while-running-test-suite by cc-by-sa and MIT license