Ошибка истечения срока действия записи в Data Spring GemFire ​​(время жизни)

У меня есть Spring Data GemFire Region, который настроен с использованием аннотаций ниже:

@TimeToLiveExpiration(timeout = "100", action = "INVALIDATE")
@PartitionRegion(name = "blockedIPCache")
class BlockedIpEntityType { ... }

Мое приложение является приложением Spring Boot, и я использовал следующие аннотации для настройки SDG:

@PeerCacheApplication
@EnableGemfireCaching
@EnableCachingDefinedRegions(clientRegionShortcut = ClientRegionShortcut.LOCAL, serverRegionShortcut = RegionShortcut.LOCAL)
@EnableStatistics
@EnableExpiration
@EnableEntityDefinedRegions(basePackageClasses = {...})
@EnableGemfireRepositories(basePackages = {...})
class GemFireConfiguration { ... }

Все, что я хочу, это вставить объект с помощью репозитория Spring Data GemFire, и через некоторое время запись будет признана недействительной.

Но я сталкиваюсь с этим исключением, когда я запускаю свое приложение...

Caused by: java.lang.IllegalStateException: Cannot set idle timeout when statistics are disabled.
    at org.apache.geode.internal.cache.AbstractRegion.setCustomEntryIdleTimeout(AbstractRegion.java:1157) ~[geode-core-9.1.1.jar:?]
    at org.springframework.data.gemfire.config.annotation.ExpirationConfiguration$ExpirationPolicyMetaData.configure(ExpirationConfiguration.java:511) ~[spring-data-gemfire-2.0.6.RELEASE.jar:2.0.6.RELEASE]
    at org.springframework.data.gemfire.config.annotation.ExpirationConfiguration$1.postProcessAfterInitialization(ExpirationConfiguration.java:160) ~[spring-data-gemfire-2.0.6.RELEASE.jar:2.0.6.RELEASE]
...

Это происходит именно тогда, когда Spring пытается автоматически подключить мой репозиторий, относящийся к региону, настроенному выше.

Так что я делаю не так? И есть ли способ включить статистику региона с помощью конфигурации Java или аннотации?

Примечание. Использование Spring Data GemFire 2.0.6, Spring 5.0.5, Spring Boot 2.0.1, используемых в проекте.

1 ответ

Решение

Оказывается, ты не сделал ничего плохого. К сожалению, вы наткнулись на ошибку (!), Для которой я уже подал SGF-747 и исправил. Приносим извинения за неудобства, которые могла причинить вам эта проблема.

Мы планируем выпустить Spring Data Lovelace M3 (Milestone 3) завтра (четверг, 5/17, CET). Расписание релизов видно из Spring Release Calendar. Все даты являются предварительными.

Таким образом, вы можете попробовать новые исправления Spring Data для битов Lovelace Pivotal GemFire (SDG) (т.е. 2.1.0.M3). ЦУР 2.1.0. должно отлично работать с Spring Boot 2.0.1 / 2.RELEASE и Spring 5.0.5 / 6.RELEASE.

Однако, если вы ожидаете получить биты GA для SDG, содержащие это исправление, вам придется подождать следующей версии Spring Data Kay Service (Kay SR8) или Spring Data для Pivotal GemFire 2.0.8 Service Release. Я поддерживаю портирование этого исправления.

К сожалению, не запланирован ни один выпуск Spring Data Kay Service (т.е. Kay SR8), вероятно, до 2 или 3 июля, сразу после выпуска Spring Framework 5.0.7 в понедельник, 2 июля и непосредственно перед выпуском Spring Boot 2.0.3. Среда, 4 июля, обычно в то время, когда мы планируем релизы Spring Data Service. Кроме того, знайте, что Spring Boot 2.0.x основан на Spring Data Kay, но, как я уже упоминал ранее, должен прекрасно работать и с SD Lovelace.

А пока я попытаюсь придумать обходной путь, где удобство аннотаций (например, @EnableEntityDefinedRegions) еще можно использовать. Я опубликую обходной путь в SGF-747.

Я вижу, что вы указали clientRegionShortcut атрибут в @EnableCachingDefinedRegions аннотации, но объявили вашу заявку @PeerCacheApplication, Хотя в этом нет никакого вреда, clientRegionShortcut Атрибут бесполезен в этом случае. Аналогично serverRegionShortcut Атрибут не будет иметь никакого значения, если вы приложение были @ClientCacheApplication вместо; что-то иметь в виду.

Наконец, я хотел бы сообщить вам, что ЦУР @EnableStatistics аннотации не дают того эффекта, о котором вы, вероятно, думаете.

В частности, ЦУР @EnableStatisticsаннотация связана с включением "выборки" статистики Pivotal GemFire, как описано здесь, которая настраивается путем этого, как также объясняется в SDG @EnableStatistics аннотации Javadoc, а также ссылки в справочном руководстве ЦУР.

"Предоставление статистики", которое в конечном итоге должно произойти, заключается в установлении staticsEnabled свойство атрибута при настройке и создании региона (например, "заблокированный IPCache").

Это именно то, что @EnableExpiration аннотация будет косвенно гарантировать сейчас, с исправлением в SGF-747, без необходимости @EnableStatistics,

Во всяком случае, я надеюсь, что все это имеет смысл и помогает.

С уважением, Джон

Другие вопросы по тегам