Java 如何在SpringMVC(5.x)项目中启用ehCache(3.x)

Java 如何在SpringMVC(5.x)项目中启用ehCache(3.x),java,spring,ehcache,Java,Spring,Ehcache,在我们的项目中,我们使用了ehcache2.x,现在我们想迁移到3.x,但不知怎的,我失败了。在2.x中,我们在ehcache.xml中进行了配置。据我所知,当使用3.x时,我也需要更改内容 但首先,我不知道如何连接缓存本身。我有 @EnableCaching @Configuration public class CacheConf { @Bean public CacheManager cacheManager() { final CacheManagerBuilder<

在我们的项目中,我们使用了
ehcache
2.x,现在我们想迁移到3.x,但不知怎的,我失败了。在2.x中,我们在
ehcache.xml
中进行了配置。据我所知,当使用3.x时,我也需要更改内容

但首先,我不知道如何连接缓存本身。我有

@EnableCaching
@Configuration
public class CacheConf {
  @Bean
  public CacheManager cacheManager() {
    final CacheManagerBuilder<org.ehcache.CacheManager> ret = CacheManagerBuilder.newCacheManagerBuilder();
    ret.withCache("properties", getPropCache());
    ret.withCache("propertyTypes", getPropCache());
    return (CacheManager) ret.build(true);
  }
....
@EnableCaching
@配置
公共类CacheConf{
@豆子
公共缓存管理器缓存管理器(){
final CacheManagerBuilder ret=CacheManagerBuilder.newCacheManagerBuilder();
ret.withCache(“属性”,getPropCache());
ret.withCache(“propertyTypes”,getPropCache());
return(CacheManager)ret.build(true);
}
....
但是这个配置我得到了一个
java.lang.ClassCastException:org.ehcache.core.EhcacheManager不能强制转换为org.springframework.cache.CacheManager
,这意味着我无法正确设置
ehcache

注意:在2.x中,我们配置了不同类型的缓存,这或多或少是由于过期时间的原因,以及其他对象类型存储在其中


运行它的提示,因为我没有找到Spring 5和
ehcache
3.x的工作示例?最好是没有xml的配置!

ehcache
CacheManager
不是Spring
CacheManager
。这就是为什么会出现
ClassCastException

Ehcache3与JSR107(JCache)兼容,所以Spring将使用它连接到它

您将在SpringBoot中找到一个示例和一个更简单的示例

如果我以你为例,你会这样做

@EnableCaching
@Configuration
public class CacheConf {
    @Bean
    public CacheManager cacheManager() {
        EhcacheCachingProvider provider = (EhcacheCachingProvider) Caching.getCachingProvider();

        Map<String, CacheConfiguration<?, ?>> caches = new HashMap<>();
        caches.put("properties", getPropCache());
        caches.put("propertyTypes", getPropCache());

        DefaultConfiguration configuration = new DefaultConfiguration(caches, provider.getDefaultClassLoader());
        return new JCacheCacheManager(provider.getCacheManager(provider.getDefaultURI(), configuration));
    }

  private CacheConfiguration<?, ?> getPropCache() {
    // access to the heap() could be done directly cause this returns what is required!
    final ResourcePoolsBuilder res = ResourcePoolsBuilder.heap(1000);
    // Spring does not allow anything else than Objects...
    final CacheConfigurationBuilder<Object, Object> newCacheConfigurationBuilder = CacheConfigurationBuilder
        .newCacheConfigurationBuilder(Object.class, Object.class, res);
    return newCacheConfigurationBuilder.build();
  }
}
@EnableCaching
@配置
公共类CacheConf{
@豆子
公共缓存管理器缓存管理器(){
EhcacheCachingProvider提供程序=(EhcacheCachingProvider)Caching.getCachingProvider();
映射getPropCache(){
//可以直接访问heap(),因为这会返回所需的内容!
final ResourcePoolsBuilder res=ResourcePoolsBuilder.heap(1000);
//Spring不允许对象之外的任何内容。。。
最终CacheConfigurationBuilder newCacheConfigurationBuilder=CacheConfigurationBuilder
.newCacheConfigurationBuilder(Object.class、Object.class、res);
返回newCacheConfigurationBuilder.build();
}
}

Thx用于响应。这肯定有效。我也编辑了代码以包含方法
getPropCache()
,因此它提供了一个完整的工作示例。再次使用Thx。@Henri,您提供的两个链接都已断开unfortunately@ThaisMarinho现在应该没事了