You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 19:50:24