Возможно ли иметь общую конфигурацию xml для всех поставщиков кеша для jsr107?

Нам нужны общие параметры конфигурации XML (например, timetolive) для конфигурации Jcache.
Мы используем EhCache для разработки и можем использовать какой-либо другой поставщик кэша, совместимый с Jsr107, например Infinispan, в другой среде.

возможно ли, чтобы оба провайдера кэширования использовали один файл конфигурации, и нам нужно изменить только некоторые параметры, если это необходимо, для другой среды?

Можно ли определить эти свойства в файле свойств и использовать их для инициализации менеджеров кэша на основе профиля?

Я просмотрел документацию jsr107, но не нашел общих атрибутов кэширования xml.

Технология: Spring boot 1.2.3, Java 7


person YogeshK    schedule 14.11.2015    source источник
comment
Как отметили Стефан Николл и Луи, невозможно иметь общий файл конфигурации для всех. Но вы можете использовать функцию автоматической настройки, представленную в Spring boot 1.3. Вы можете найти пример gitHub ниже, предоставленный Stéphane Nicoll github.com/spring-projects/spring-boot/tree/master/   -  person YogeshK    schedule 18.11.2015


Ответы (2)


Это действительно зависит от того, что вам нужно использовать. JCache предоставляет классы Configuration и MutableConfiguration, которые можно использовать для настройки некоторых параметров.

Spring Boot 1.3 (готовится к выпуску) имеет полную интеграцию с JCache; когда вы добавляете поставщика JSR-107 в свой проект, Spring Boot автоматически создаст для вас CacheManager. Если вы определяете bean-компонент типа JCacheManagerCustomizer, он будет вызываться для настройки диспетчера кэша до того, как приложение начнет обслуживать запросы.

Например, это очень простая конфигурация, которая изменяет политику истечения срока действия:

@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);
        };
    }

}
person Stephane Nicoll    schedule 14.11.2015
comment
Требование: Как разработчик продукта, я хочу определить 2 группы кеша: справочные данные и процентные ставки, имеющие разные характеристики, например. время жить. Я хочу определить это только один раз — для использования EHCache и JBOSS Infinispan. Мы пытаемся создать подключаемый микросервис конфигурации кэша, который можно использовать для разных поставщиков менеджеров JCache с одним изменением файла xml или свойств. - person YogeshK; 16.11.2015
comment
Поскольку для конфигурации xml нет общих атрибутов, будет использоваться конфигурация конкретного поставщика в пути к классу, профиле spring и области действия, чтобы решить, какой поставщик использовать во время выполнения. - person YogeshK; 17.11.2015
comment
Вы можете использовать spring.cache.jcache.config, чтобы указать на фактический файл конфигурации, если базовый поставщик JSR-107 поддерживает его (Ehcache и infinispan делают). - person Stephane Nicoll; 17.11.2015
comment
Как создать экземпляр CacheManager для Infinispan внутри нижеприведенного метода cacheManager(), который, как ожидается, автоматически настроит CacheManager после определения spring.cache.infinispan.config=infinispan.xml'? @Bean @Override public CacheManager cacheManager() { // configure and return CacheManager instance } - person YogeshK; 18.11.2015
comment
это 1.3.0 функция. Можем ли мы прекратить обсуждение здесь, пожалуйста? это не очень полезно; Если у вас есть другой вопрос, пожалуйста, создайте отдельную тему. - person Stephane Nicoll; 18.11.2015
comment
Извините за путаницу, я обновил вопрос, но забыл удалить комментарии. Я искал AutoConfig с 1.3 только для целей тестирования, которые вы предоставили здесь github.com/spring-projects/spring-boot/tree/master/ - person YogeshK; 18.11.2015

JSR-107 ничего не указывает в отношении внешней конфигурации — xml, свойства и так далее.

Таким образом, любое решение для внешней конфигурации должно быть предоставлено вашим кодом или фреймворком, таким как [Spring][1].

[1]: см. ответ Стефана Николя.

person Louis Jacomet    schedule 17.11.2015
comment
В настоящее время мы будем использовать профиль Spring для создания необходимого экземпляра jCachemanager во время выполнения. Спасибо за ответ :) - person YogeshK; 17.11.2015