如何在Spring application-context.xml中使用Ecache配置Jcache作为Provider?

时间:2015-06-25 13:32:44

标签: spring ehcache spring-cache jcache

Spring文档提供了以下信息。

<bean id="cacheManager"
   class="org.springframework.cache.jcache.JCacheCacheManager"
   p:cache-manager-ref="jCacheManager"/>

<!-- JSR-107 cache manager setup  -->
<bean id="jCacheManager" .../>

我想知道如何在spring应用程序上下文xml中配置这个jcacheManager bean(使用EhCache作为提供者)。

我已经在pom.xml中配置了依赖项,如下所示,这很好。

<dependency>
    <groupId>org.ehcache</groupId>
    <artifactId>jcache</artifactId>
    <version>1.0.1</version>
    <exclusions>
        <exclusion>
            <artifactId>slf4j-api</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
    </exclusions>
</dependency> 

2 个答案:

答案 0 :(得分:0)

这取决于您想要如何配置它。如果您正在使用Spring Boot 1.3,它将自动为您创建。也许您可以查看JCacheCacheConfiguration来源?

您可以通过javax.cache.CacheManager

检索默认 Caching.getCachingProvider().getCacheManager()

答案 1 :(得分:0)

现在将Ehache3.x与Spring4.x集成起来并不方便。 Spring启动它,它重写了一些代码:

<bean id="cacheManager"
   class="org.springframework.cache.jcache.JCacheCacheManager"

在Spring boot中,它是:

@Bean
    public JCacheCacheManager cacheManager(CacheManager jCacheCacheManager) {
        return new JCacheCacheManager(jCacheCacheManager);
    }

它需要一个javax.cache.CacheManager实例,

<!-- JSR-107 cache manager setup  -->
<bean id="jCacheManager" .../>

Ehcache没有对我们进行深入介绍。

Spring boot确实如下:

@Bean
    @ConditionalOnMissingBean
    public CacheManager jCacheCacheManager() throws IOException {
        CacheManager jCacheCacheManager = createCacheManager();
        List<String> cacheNames = this.cacheProperties.getCacheNames();
        if (!CollectionUtils.isEmpty(cacheNames)) {
            for (String cacheName : cacheNames) {
                jCacheCacheManager.createCache(cacheName, getDefaultCacheConfiguration());
            }
        }
        customize(jCacheCacheManager);
        return jCacheCacheManager;
    }

创建javax.cache.CacheManager只是遵循Ehcache文档的正常操作。