Spring 数据 GemFire 区域条目过期(生存时间)错误

Spring Data GemFire Region entry expiration (Time-To-Live) error

我有一个 Spring Data GemFire 区域,使用下面的注释配置:

@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.postProcessAfterInitialization(ExpirationConfiguration.java:160) ~[spring-data-gemfire-2.0.6.RELEASE.jar:2.0.6.RELEASE]
...

这恰好发生在 Spring 尝试自动装配与上面配置的区域相关的我的存储库时。

那么我做错了什么?而且,有没有办法使用 Java 配置或注释来启用区域统计信息?

注意:使用 Spring 数据 GemFire 2.0.6, Spring5.0.5,Springboot2.0.1中使用项目。

事实证明,你并没有做错什么。不幸的是,您偶然发现了一个错误 (!),我已经为此提交 SGF-747 并修复了。对于此问题给您带来的不便,我们深表歉意。

我们计划明天(星期四发布 Spring Data Lovelace M3(里程碑 3) , 5/17, CET).发布时间表可见 Spring Release Calendar。所有日期均为暂定。

因此,您可以尝试 Pivotal GemFire (SDG) Lovelace 位的新 Spring 数据(即 2.1 .0.M3) 与修复。可持续发展目标 2.1.0。应该可以很好地与 Spring Boot 2.0.1/2.RELEASESpring5.0.5/6.RELEASE.

但是,如果您希望获得包含此修复程序的 SDG 的 GA 位,那么您将不得不等待下一个 Spring 数据 Kay Service Release (Kay SR8),或 Pivotal GemFire 的 Spring 数据 2.0.8 服务版本。我支持移植此修复程序。

很遗憾,没有另一个Spring数据服务发布 (即 Kay SR8)计划到可能在 7 月 2 日3 日 左右,就在 [=56= 之后]Spring Framework 5.0.7 发布于 7 月 2 日星期一 之前Spring Boot 2.0.3 7月4日星期三发布,这通常是我们计划Spring 数据 服务版本。另外,知道 Spring Boot 2.0.xbased on Spring Data Kay,但应该也可以与 SD Lovelace 一起使用,正如我之前提到的。

与此同时,我将尝试考虑仍然可以使用便利的注释(例如 @EnableEntityDefinedRegions)的解决方法。我将 post SGF-747 中的解决方法。

我看到您在 @EnableCachingDefinedRegions 注释中指定了 clientRegionShortcut 属性,但已将您的应用程序声明为 @PeerCacheApplication。虽然这样做没有什么坏处,但 clientRegionShortcut 属性在这种情况下是无用的。同样,如果您的应用程序是 @ClientCacheApplication,则 serverRegionShortcut 属性将没有任何意义;要记住的事情。

最后,我想让您知道,SDG @EnableStatistics 注释可能没有您认为的效果。

具体来说,SDG 的 @EnableStatistics annotation is concerned with enabling Pivotal GemFire's statistics "sampling" as explained here, which is configured by doing this, as also explained in the SDG @EnableStatistics annotation Javadoc, as well as referenced in the SDG Reference Guide

最终需要发生的"statistics enabling"是setting the Region's staticsEnabled attribute property在配置和创建区域时(例如"blockedIPCache")。

这正是 @EnableExpiration 注释现在将通过 SGF-747 中的修复间接保证的,而无需 @EnableStatistics

无论如何,我希望这一切都有意义并有所帮助。

此致, 约翰