【问题标题】:Is it possible to have common xml configuration for all Cache provider vendors for jsr107是否可以为 jsr107 的所有缓存提供程序供应商提供通用 xml 配置
【发布时间】:2016-02-15 19:33:09
【问题描述】:

我们需要有通用的 XML 配置参数(如 timetolive)来进行 Jcache 配置。
我们正在使用 EhCache 进行开发,并且可能在其他环境中使用其他一些符合 Jsr107 的缓存提供程序,例如 Infinispan。

是否可以让两个缓存提供程序都使用单个配置文件,并且如果需要,我们只需要针对不同的环境更改一些参数吗?

可以在properties文件中定义这些属性,并根据Profile来初始化Cache manager吗?

我浏览了 jsr107 文档,但没有找到常见的 xml 缓存属性。

技术:Spring boot 1.2.3、Java 7

【问题讨论】:

  • 正如 Stéphane Nicoll 和 Louis 所提到的,不可能为所有人提供通用的配置文件。但是您可以使用 Spring boot 1.3 中提供的自动配置功能。您可以在下面找到 gitHub 示例,由 Stéphane Nicoll github.com/spring-projects/spring-boot/tree/master/… 提供

标签: caching spring-boot ehcache jcache jsr107


【解决方案1】:

这真的取决于你需要使用什么。 JCache 公开了一个 ConfigurationMutableConfiguration 类,您可以使用它们来配置一些设置。

Spring Boot 1.3(即将发布)有完整的JCache集成;当您在项目中添加 JSR-107 提供程序时,Spring Boot 会自动为您创建一个CacheManager。如果您定义了JCacheManagerCustomizer 类型的 bean,它将在应用程序开始服务请求之前被调用以自定义缓存管理器。

例如,这是一个更改过期策略的非常基本的配置:

@SpringBootApplication
@EnableCaching
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public JCacheManagerCustomizer cacheManagerCustomizer() {
        return cm -> {
            MutableConfiguration<Object, Object> configuration = new MutableConfiguration<>()
                .setExpiryPolicyFactory(CreatedExpiryPolicy
                    .factoryOf(Duration.ONE_HOUR));
            cm.createCache("foo", configuration);
        };
    }

}

【讨论】:

  • 要求是,“作为产品开发人员,我想定义 2 个缓存组:具有不同特征的参考数据和利率,例如 timeToLive。我只想定义一次- 供 EHCache 和 JBOSS Infinispan 使用"。我们正在尝试创建可插入的缓存配置微服务,可用于具有单个 xml 或属性文件更改的不同 JCache 管理器提供程序。
  • 由于 xml 配置没有通用属性,将在类路径、spring 配置文件和范围上使用提供程序特定的配置来决定在运行时使用哪个提供程序。
  • 如果底层 JSR-107 提供程序支持,您可以使用spring.cache.jcache.config 指向实际的配置文件(Ehcache 和 infinispan 都可以)
  • 如何在 cacheManager() 方法下面为 Infinispan 创建 CacheManager 的实例,一旦定义 spring.cache.infinispan.config=infinispan.xml',该方法预计会自动配置 CacheManager? @Bean @Override public CacheManager cacheManager() { // configure and return CacheManager instance }
  • 这是一个1.3.0 功能。我们可以在这里停止讨论吗?它不是很有用;如果您还有其他问题,请创建一个单独的线程。
【解决方案2】:

JSR-107 没有指定任何关于外部配置的内容 - xml、属性,你可以命名它。

因此,任何外部化配置解决方案都必须由您的代码或 [Spring][1] 等框架提供。

[1]:见 Stéphane Nicoll 的回答

【讨论】:

  • 对,暂时将使用 Spring 配置文件在运行时创建所需的 jCachemanager 实例。谢谢回复:)
猜你喜欢
  • 1970-01-01
  • 2011-09-14
  • 2012-02-16
  • 2017-07-01
  • 1970-01-01
  • 2010-12-08
  • 2016-04-12
  • 2018-12-23
  • 2017-05-28
相关资源
最近更新 更多