如何在每次测试后重新加载CacheManager

时间:2016-12-14 12:39:54

标签: java spring testing spring-boot ehcache

我在spring-boot应用程序中使用cacheManager。

并为我的测试配置。

<bean id="cacheProvider" class="javax.cache.Caching" factory-method="getCachingProvider"/>
<bean id="cacheManager" factory-bean="cacheProvider" factory-method="getCacheManager"/>

一开始我的ehcache不是空的。

在一起运行所有测试时,我遇到了一些逻辑问题。 我想在每次测试后重新加载我的cacheManager。

我尝试使用@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)

但有错误

Caused by: java.lang.IllegalStateException: The CacheManager has been shut down. It can no longer be used.
at net.sf.ehcache.CacheManager.checkStatus(CacheManager.java:1623)
at net.sf.ehcache.CacheManager.getCacheNames(CacheManager.java:1611)
at org.ehcache.jcache.JCacheManager.refreshAllCaches(JCacheManager.java:325)
at org.ehcache.jcache.JCacheManager.getCache(JCacheManager.java:164)
at com.myapp.service.caching.EntityJCacheContainer.lambda$2(EntityJCacheContainer.java:115)
at com.myapp.service.caching.EntityJCacheContainer$$Lambda$72/1186361374.get(Unknown Source)
at com.myapp.service.caching.EntityJCacheContainer.getEntityCache(EntityJCacheContainer.java:120)
at com.myapp.service.caching.EntityStorageImpl.getEntities(EntityStorageImpl.java:119)
at com.myapp.service.DataServiceImpl.loadEntities(DataServiceImpl.java:70)
at com.myapp.service.ClassifierServiceImpl$FilterCriteriaVisitorImpl.visit(ClassifierServiceImpl.java:130)
at com.myapp.data.impl.FilterCriteriaBuilder$1.accept(FilterCriteriaBuilder.java:20)
at com.myapp.service.ClassifierServiceImpl.getClassifiers(ClassifierServiceImpl.java:70)
at com.myapp.controller.ClassifierManagerController.getClassifiers(ClassifierManagerController.java:159)
... 47 more

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您的缓存是作为原型bean创建的吗? 如果是这样,你每次都可以通过调用Spring的ObjectFactory :: getObject方法获得一个新的。 (你还可以发布一些关于如何注射这些豆子的更多信息吗?)