Spring Data Geode集成@EnableGemFireHttpSession时gemfirePool无法解析问题
问题根因
- 默认Pool找不到的原因:
@EnableGemFireHttpSession注解默认会查找名为gemfirePool的连接池Bean作为Session区域的连接池,而@EnableClusterDefinedRegions自动装配生成的默认连接池名称为DEFAULT,并没有自动创建名为gemfirePool的Bean,因此启动时会抛出[gemfirePool] is not resolvable as a Pool in the application context错误。 - PROXY区域过期提示的原因:
@EnableGemFireHttpSession默认会自动为ClusteredSpringSessions区域配置会话过期策略,而PROXY模式的客户端区域不存储任何数据,过期规则必须在服务端配置,因此会触发Expiration is not allowed on Regions with a data management policy of PROXY提示,该提示本身不影响功能运行。 - 1.2.4版本手动定义Pool触发订阅失效的原因:该版本的Spring Geode Starter中,显式声明自定义Pool会覆盖自动配置的全局Pool参数,如果未给业务使用的默认Pool显式开启
subscriptionEnabled属性,就会导致兴趣订阅事件无法正常接收。
无需单独定义独立连接池的解决方法
你可以通过以下修改解决报错,不需要额外声明独立的连接池:
- 显式指定
@EnableGemFireHttpSession使用默认的全局连接池,修改注解配置为:@EnableGemFireHttpSession(poolName = "DEFAULT", maxInactiveIntervalInSeconds = -1)
设置maxInactiveIntervalInSeconds = -1是为了关闭客户端侧的过期配置,避免不必要的日志提示,会话过期逻辑直接在Geode服务端的ClusteredSpringSessions区域配置即可。 - 在application配置文件中添加配置,确保默认连接池开启订阅支持:
spring.data.gemfire.pool.subscription-enabled=true
该配置会作用于自动生成的DEFAULT连接池,不需要额外手动定义Pool Bean,也不会触发旧版本的订阅失效问题。
内容的提问来源于stack exchange,提问作者rupweb
相关产品推荐
相关产品推荐

