我正在使用 EhCache
在我的项目中实现一些缓存。我已经在我的 pom.xml 中添加了以下依赖项。
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.ehcache/ehcache -->
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.3.1</version>
</dependency>
请注意第三个依赖项是EhCache
。在我找到的所有在线教程中,组ID都不同。我更改组ID的原因是它已经被移动到org.ehcache
。
我在我的类路径中有以下的ehcache.xml文件。
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="true"
monitoring="autodetect"
dynamicConfig="true">
<diskStore path="java.io.tmpdir"/>
<cache name="cardTypes"
maxEntriesLocalHeap="100"
maxEntriesLocalDisk="1000"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LFU"
transactionalMode="off">
<persistence strategy="localTempSwap"/>
</cache>
</ehcache>
以下是我的配置文件。
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.cache.CacheManager;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
import org.springframework.core.io.ClassPathResource;
@EnableCaching
@Configuration
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
return new EhCacheCacheManager(ehCacheCacheManager().getObject());
}
@Bean
public EhCacheManagerFactoryBean ehCacheCacheManager() {
EhCacheManagerFactoryBean factory = new EhCacheManagerFactoryBean();
factory.setConfigLocation(new ClassPathResource("ehcache.xml"));
factory.setShared(true);
return factory;
}
}
现在,在以下行中我遇到了错误。
return new EhCacheCacheManager(ehCacheCacheManager().getObject());
那就是在 Eclipse 中出现以下错误:
在 Eclipse 中: “net.sf.ehcache.CacheManager” 类型无法解析。它是从所需的 .class 文件间接引用的。
在 JIdea 中:
Error:(21, 71) java: cannot access net.sf.ehcache.CacheManager
class file for net.sf.ehcache.CacheManager not found
我没有在我的项目中添加任何net.sf.ehcache的东西。正如我之前提到的,ehcache
已经移动到org.ehcache
。
为什么会出现这个错误?这与我添加的依赖项中不包括net.sf.ehcache
有关。
由于该组件已经被移动,我应该用不同的方式编写第二个bean吗?还是有其他方法可以解决这个问题?