2013-04-29 34 views
9

Tôi đang gặp sự cố sau.Tắt chức năng Ehcache gây ra ngoại lệ trong khi chạy bộ kiểm tra

Tôi có bộ đồ thử nghiệm trong dự án của mình và mỗi thử nghiệm riêng lẻ đều chạy tốt.

Tuy nhiên khi tôi chạy chúng như một bộ tôi một số trong số họ không thành công với những ngoại lệ sau đây:

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) 

Có cách nào để tránh hành vi này, tức là giữ cho bộ nhớ cache sống qua nhiều thử nghiệm hoặc tắt nó xuống đúng không?

+2

Làm cách nào để đặt thuộc tính được chia sẻ thành sai trong ngữ cảnh thử nghiệm, có thể cung cấp ví dụ? –

Trả lời

4

cố gắng đặt thuộc tính được chia sẻ thành sai trong EhCacheManagerFactoryBean hoặc EhCacheCacheManager trong ngữ cảnh thử nghiệm.

+0

Điều đó đã thực hiện thủ thuật – genjosanzo

+0

Nhưng cũng có thể với cấu hình đó? ' \t \t ' –

0

Vấn đề này xảy ra về cơ bản, Bất cứ khi nào bạn Cache được chia sẻ giữa nhiều ứng dụng. Vì vậy, hãy thử không chia sẻ bộ nhớ cache của bạn bằng cách đặt thuộc tính được chia sẻ thành sai.

<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>

Nhưng trên thực hiện bạn sẽ gặp phải

Một CacheManager với cùng một tên 'cacheManager' đã tồn tại trong cùng một VM. IllegalStateException

Để chống lại điều này chúng ta cần phải đề cập đến

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

Tôi hy vọng cuối cùng vấn đề sẽ được giải quyết.

+0

Việc thêm tên không xóa 'cacheManager' đã tồn tại trong cùng một máy ảo. Ngoại lệ IllegalStateException – Sid

1

Tạo cấu hình bộ nhớ cache riêng cho các thử nghiệm! và đặt phạm vi "nguyên mẫu"

@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; 
} 
} 
Các vấn đề liên quan