【问题标题】:Using ehcache3 with Spring4在 Spring 4 中使用 ehcache 3
【发布时间】:2020-08-08 05:26:55
【问题描述】:

有人可以通过xml使用Spring JCacheCacheManager创建一个支持CacheManager的Ehcache吗?我有这样的东西。不确定如何为 Ehcache3 创建javax.cache.CacheManager

<bean id="myCacheManager"
    class="org.springframework.cache.jcache.JCacheCacheManager">
    <property name="cacheManager" value="..." />
</bean>

谢谢!

【问题讨论】:

    标签: spring ehcache


    【解决方案1】:

    执行此操作的推荐方法是使用org.springframework.cache.jcache.JCacheManagerFactoryBean,您可以在其中注入URIPropertiesClassLoader。然后这个工厂 bean 将使用标准的 JCache Caching 类来创建 javax.cache.CacheManager

    对于 Ehcache,URI 用于指向 ehcache.xml,然后将配置 CacheManager

    因此扩展您的示例配置:

    <bean id="jCacheManager" class="org.springframework.cache.jcache.JCacheManagerFactoryBean">
      <property name="cacheManagerUri" value="file://path/to/ehcache.xml"/>
    </bean>
    <bean id="myCacheManager" class="org.springframework.cache.jcache.JCacheCacheManager">
      <property name="cacheManager" ref="jCacheManager" />
    </bean>
    

    有关 Ehcache 3 / JCache 集成的更多信息,请参阅the documentation

    【讨论】:

    • 您的回答对我有用,但为什么我们必须定义两个缓存管理器?您能否提供有关弹簧缓存、JCache 配置、使用 ehcache 作为 JCache 实现的更多详细信息?所有这三个的官方文档确实没有太大帮助。
    【解决方案2】:
    @Configuration
    @EnableCaching
    public class CacheConfig {
    
      @Bean
      public JCacheCacheManager jCacheCacheManager() throws IOException {
        return new JCacheCacheManager(cacheManager());
      }
    
      @Bean(destroyMethod = "close")
      public javax.cache.CacheManager cacheManager() throws IOException {
        XmlConfiguration xmlConfig = new XmlConfiguration(new ClassPathResource("ehcache.xml").getURL());
        EhcacheCachingProvider provider = (EhcacheCachingProvider) Caching.getCachingProvider();
        return provider.getCacheManager(provider.getDefaultURI(), xmlConfig);
    
      }
    
    }
    

    【讨论】:

      【解决方案3】:
      @Configuration
      @EnableCaching
      public class CacheConfig {
      
          @Bean
          public JCacheCacheManager jCacheCacheManager(JCacheManagerFactoryBean jCacheManagerFactoryBean){
              JCacheCacheManager jCacheCacheManager = new JCacheCacheManager();
              jCacheCacheManager.setCacheManager(jCacheManagerFactoryBean.getObject());
              return jCacheCacheManager;
          }
      
          @Bean
          public JCacheManagerFactoryBean jCacheManagerFactoryBean() throws URISyntaxException {
              JCacheManagerFactoryBean jCacheManagerFactoryBean = new JCacheManagerFactoryBean();
              jCacheManagerFactoryBean.setCacheManagerUri(getClass().getResource("/ehcache.xml").toURI());
              return jCacheManagerFactoryBean;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-03-23
        • 1970-01-01
        • 2014-06-04
        • 2018-07-14
        • 1970-01-01
        • 1970-01-01
        • 2017-01-16
        • 1970-01-01
        • 2011-07-27
        相关资源
        最近更新 更多