Spring Data GemFire: примеры CustomExpiry - PullRequest
0 голосов
/ 04 июня 2018

Я использую Pivotal GemFire ​​9.1.1 и Spring Data GemFire ​​2.0.7.RELEASE.

У меня есть токен, который будет храниться в регионе GemFire ​​с ключом String и Map<String,String>Значение.Истечение срока действия токена (т. Е. Запись в регионе GemFire) должно динамически зависеть от нескольких бизнес-сценариев.

Я мог найти документацию Pivotal GemFire ​​для CustomExpiry, тогда как я не мог найти подходящий пример / документацию поSpring Data GemFire ​​(<gfe:custom-entry-ttl>).

Пожалуйста, поделитесь, если есть ресурс, который инструктирует, как включить пользовательское истечение срока действия данных в Spring Data GemFire.

1 Ответ

0 голосов
/ 05 июня 2018

На самом деле есть 3 различных способа, которыми разработчик может настроить пользовательскую политику истечения срока действия для Региона с помощью интерфейса Pivotal GemFire ​​o.a.g.cache.CustomExpiry в SDG

С учетом реализации * 1006 для конкретного приложения* ...

package example.app.gemfire.cache;

import org.apache.geode.cache.CustomExpiry;
import org.apache.geode.cache.ExpirationAttributes;
import ...;

class MyCustomExpiry implements CustomExpiry<String, Object> {

  ExpirationAttributes getExpiry(Region.Entry<String, Object> entry) {
    ...
  }
}

Во-первых, подход XML.

<bean id="customTimeToLiveExpiration" 
      class="example.app.gemfire.cache.MyCustomExpiry"/>

<gfe:partitioned-region id="Example" persistent="false">
  <gfe:custom-entry-ttl ref="customTimeToLiveExpiration"/>
  <gfe:custom-entry-tti>
    <bean class="example.app.gemfire.cache.MyCustomExpiry"/>
  </gfe:custom-entry-tti>
</gfe:partitioned-region>

Как видно из приведенного выше примера, вы можете определить «пользовательские» политики срока действия, используя либо ссылку на компоненткак в объявлении политики срока действия вложенного времени жизни (TTL) или с использованием анонимного определения компонента, как в политике истечения срока действия вложенного времени ожидания (TTI) в «примерном» определении компонента области PARTITION.

Точные определения см. В SDG XML-схеме .

Во-вторых, вы можете добиться того же, что и Java Config ...

@Configuration
class GemFireConfiguration {

  @Bean
  MyCustomExpiry customTimeToLiveExpiration() {
    return new MyCustomExpiry();
  }

  @Bean("Example")
  PartitionedRegionFactoryBean<String, Object> exampleRegion(
      GemFireCache gemfireCache) {

    PartitionedRegionFactoryBean<String, Object> exampleRegion =
      new PartitionedRegionFactoryBean<>();

    exampleRegion.setCache(gemfireCache);
    exampleRegion.setClose(false);
    exampleRegion.setPersistent(false);
    exampleRegion.setCustomEntryTimeToLive(customTimeToLiveExpiration());
    exampleRegion.setCustomEntryIdleTimeout(new MyCustomExpiry());

    return exampleRegion;
  }
}

Наконец, вы настраиваете обаПолитики истечения срока действия TTL и TTI с использованием конфигурации истечения срока действия на основе аннотаций SDG, как определено здесь .В наборе тестов SDG есть тестовый класс вместе с конфигурацией , демонстрирующий эту возможность.

Дополнительную информацию о конфигурации истечения на основе аннотаций можно найти в SDG здесь .

Надеюсь, это поможет!

-Джон

...