Spring Data GemFire区域条目到期(生存时间)错误

时间:2018-05-16 15:58:54

标签: spring spring-boot gemfire spring-data-gemfire

我有一个 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$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项目中使用的引导 2.0.1

1 个答案:

答案 0 :(得分:1)

事实证明,你没有做错任何事。不幸的是,你偶然发现了一个错误(!),我已经提交了SGF-747并修复了该错误。对于这个问题可能给您带来的不便,我深感抱歉。

我们计划明天发布 Spring Data Lovelace M3 (里程碑3)(星期四,5/17,CET )。从Spring Release Calendar可以看到发布计划。所有日期都是暂定的。

因此,您可以使用修复程序尝试使用新的 Spring Data for Pivotal GemFire (SDG) Lovelace 位(即2.1.0.M3)。 SDG 2.1.0。应该可以正常使用 Spring Boot 2.0.1 / 2.RELEASE Spring 5.0.5 / 6.RELEASE

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

不幸的是,没有计划的其他 Spring Data Kay 服务发布(即 Kay SR8 7月2日 3 Spring Framework 5.0.7 7月周一发布第二次,就在 Spring Boot 2.0.3 之前 7月4日星期三,这通常是我们计划 Spring Data 服务版本。另外,要知道 Spring Boot 2.0.x based on Spring Data Kay ,但是应该有效正如我之前提到的那样,SD Lovelace 就好了。

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

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

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

具体而言,SDG的@EnableStatistics注释涉及启用Pivotal GemFire的统计数据“抽样”,如here所解释,这是通过执行this配置的,如SDG {{1}中所述。注释Javadoc,以及在SDG Reference Guide中引用。

最终需要发生的“统计启用”是setting区域staticsEnabled attribute property在配置和创建区域时(例如“blockedIPCache”)。

这正是@EnableStatistics注释现在间接保证的内容,SGF-747中的修复,而不需要@EnableExpiration

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

此致 约翰