Spring Boot应用部署K8s后启动即自动关闭问题排查
Azure Cosmos DB异步客户端配置在K8s部署后启动即关闭问题
我使用Azure Cosmos DB(NoSQL API),配置了以下连接及异步客户端创建的Bean:
@Bean public CosmosClientBuilder getCosmosClientBuilder() { return new CosmosClientBuilder() .endpoint(endpoint) .key(key) .consistencyLevel(ConsistencyLevel.SESSION) .preferredRegions(List.of("Central US")); } @Bean public CosmosAsyncDatabase cosmosAsyncDatabase() { return getCosmosClientBuilder().buildAsyncClient().getDatabase(getDatabaseName()); }
对应的使用代码如下:
@Autowired public StatusByIdLocationDaoImpl(CosmosAsyncDatabase cosmosAsyncDatabase) { log.info("DATABASE : " + cosmosAsyncDatabase.getId()); this.cosmosAsyncContainer = cosmosAsyncDatabase.getContainer("status_test"); log.info("CONTAINER : : " + cosmosAsyncContainer.getId()); } @Override public Iterable<FeedResponse<Data>> getStatusEvents(Instant startTime, Instant endTime, String continueToken, int batchSize) { CosmosQueryRequestOptions cosmosQueryRequestOptions = new CosmosQueryRequestOptions(); try { log.info("CALLING THE DB"); return cosmosAsyncContainer.queryItems(query, cosmosQueryRequestOptions, Data.class).byPage(continueToken, batchSize).toIterable(); } catch (CosmosException cosmosException) { log.error("Error occurred while fetch the status events : {}", cosmosException.getDiagnostics()); log.error("Error", cosmosException.fillInStackTrace()); return null; } }
该应用在本地运行正常,但部署至K8s后出现启动后立刻关闭的问题。尝试使用仓库模式也出现相同异常。
使用的Cosmos依赖为:
implementation group: 'com.azure', name: 'azure-spring-data-cosmos', version: '3.30.0'
可能的原因及排查修复方案
1. 客户端资源未被Spring托管导致上下文异常
当前配置中,buildAsyncClient()创建的CosmosAsyncClient没有被注册为Spring Bean,也未指定销毁逻辑,可能在K8s环境下触发资源泄漏检测,导致应用强制退出。
修复代码:
@Bean(destroyMethod = "close") public CosmosAsyncClient cosmosAsyncClient() { return getCosmosClientBuilder().buildAsyncClient(); } @Bean public CosmosAsyncDatabase cosmosAsyncDatabase(CosmosAsyncClient cosmosAsyncClient) { return cosmosAsyncClient.getDatabase(getDatabaseName()); }
2. K8s网络连通性问题
K8s集群出站规则可能限制了对Cosmos DB端点的访问,导致启动时连接超时触发应用退出。
排查步骤:
- 确认K8s集群网络策略允许访问
*.documents.azure.com域名 - 在Pod内执行
curl -v <你的Cosmos端点>测试连通性 - 调整应用日志级别为DEBUG,查看启动阶段是否有Cosmos连接超时、权限拒绝等错误日志
3. 依赖版本兼容性问题
azure-spring-data-cosmos 3.30.0可能与当前使用的Spring Boot版本不兼容,导致上下文初始化失败。
排查步骤:
- 核对官方版本矩阵,确认Spring Boot与Cosmos依赖的兼容范围
- 尝试升级/降级Cosmos依赖版本(如3.29.0或3.31.0)后重新部署测试
4. K8s配置参数注入异常
K8s环境下可能未正确加载endpoint、key、databaseName等配置参数,导致客户端初始化失败。
排查步骤:
- 检查部署的ConfigMap/Secret是否正确挂载到Pod
- 在Pod内打印环境变量,确认配置参数值与本地一致
内容的提问来源于stack exchange,提问作者Prashant Aghara
相关产品推荐
相关产品推荐

