Spring Boot 2.5.6集成GemFire部署PCF时continuousQueryListenerContainer创建错误
问题根因
- 版本不兼容:你使用的
spring-gemfire-starter 1.2.0.RELEASE仅适配Spring Boot 2.2.x版本,和你使用的Spring Boot 2.5.6版本严重不匹配,导致GemFire连接池自动配置逻辑失效,无法初始化名为DEFAULT的默认连接池,连续查询监听器容器依赖默认Pool初始化失败。 - 未正确初始化默认Pool:PCF环境下如果未正确绑定GemFire服务实例,或者自定义了连接池配置但未声明名为
DEFAULT的池,也会触发该异常。 - 自动配置被禁用:如果启动类排除了GemFire Pool相关的自动配置类,或者手动关闭了Pool的自动装配逻辑,会导致默认Pool不会被创建。
- 依赖冲突:项目中引入了多个不同版本的Spring Data GemFire或GemFire核心依赖,导致配置类加载异常,默认Pool无法初始化。
排查步骤
- 核对版本兼容关系:Spring Boot 2.5.x版本对应适配的Spring Geode版本为1.5.x系列,先确认你当前使用的starter版本是否符合匹配要求。
- 检查PCF服务绑定:执行
cf env <应用名>查看应用环境变量,确认VCAP_SERVICES中存在已绑定的GemFire服务实例配置,没有绑定的话需要先完成服务绑定。 - 检查应用配置:查看启动类是否排除了GemFire相关自动配置,配置文件中是否存在
spring.data.gemfire.pool相关配置,是否自定义了Pool但没有声明DEFAULT名称的池。 - 排查依赖冲突:执行
mvn dependency:tree(Maven项目)或gradlew dependencies(Gradle项目)排查是否存在多个版本的Spring Data GemFire、GemFire核心依赖冲突。
解决方案
- 优先解决版本不兼容问题,将
spring-gemfire-starter版本升级到适配Spring Boot 2.5.6的1.5.6.RELEASE:
<dependency> <groupId>org.springframework.geode</groupId> <artifactId>spring-gemfire-starter</artifactId> <version>1.5.6.RELEASE</version> </dependency>
- 版本对齐后如果仍有异常,可手动声明默认Pool:
- 配置文件方式:
# application.properties # 本地/私有部署GemFire填写locator地址,PCF绑定服务后无需配置locator会自动读取 spring.data.gemfire.pool.DEFAULT.locators=gemfire-locator-host[10334] spring.data.gemfire.pool.DEFAULT.max-connections=50
- 注解配置方式:
@Configuration @EnablePool(name = "DEFAULT") public class GemfirePoolConfig { }
- 若业务不需要使用GemFire连续查询(CQ)功能,可直接禁用连续查询自动配置,避免依赖默认Pool:
- 启动类排除配置:
@SpringBootApplication(exclude = org.springframework.data.gemfire.config.annotation.ContinuousQueryConfiguration.class)
- 配置文件方式:
spring.data.gemfire.continuous-query.enabled=false
内容的提问来源于stack exchange,提问作者pawan kumar
相关产品推荐
相关产品推荐

