我有一个 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 。
答案 0 :(得分:1)
我们计划明天发布 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
。
无论如何,我希望这一切都有意义并且有所帮助。
此致 约翰