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

使用google-cloud-secretmanager 2.13.0遇IllegalStateException求助

问题:使用google-cloud-secretmanager 2.13.0获取GCP Secret Manager值时抛出IllegalStateException

使用google-cloud-secretmanager 2.13.0版本依赖获取GCP Secret Manager值时,遇到java.lang.IllegalStateException: getTransportChannel() called when needsExecutor() is true错误。

工具类代码

public String get(String secretName) {
    try (SecretManagerServiceClient client = SecretManagerServiceClient.create()) {
        SecretVersionName secretVersionName = SecretVersionName.of(projectId, secretName, "latest");

        AccessSecretVersionRequest accessRequest = AccessSecretVersionRequest.newBuilder().setName(secretVersionName.toString()).build();

        ByteString secretValue = client.accessSecretVersion(accessRequest).getPayload().getData();

        String secretString = secretValue.toStringUtf8();

        if (StringUtils.isNotBlank(secretString)) {
            return secretString;
        } else {
            throw new RuntimeException(String.format("Secret of %s is blank", secretName));
        }
    } catch (Exception e) {
        throw new RuntimeException("Caught an error when getting a secret value.", e);
    }
}

完整异常栈

Exception in thread "main" java.lang.RuntimeException: Caught an error when getting a secret value.
    at com.rakuten.rcp.cdu.util.SecretManager.get(SecretManager.java:30)
    at com.rakuten.rcp.cdu.FeedToGsp.run(FeedToGsp.java:107)
    at com.rakuten.rcp.cdu.FeedToGsp.main(FeedToGsp.java:101)
Caused by: java.lang.IllegalStateException: getTransportChannel() called when needsExecutor() is true
    at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.getTransportChannel(InstantiatingGrpcChannelProvider.java:180)
    at com.google.api.gax.rpc.ClientContext.create(ClientContext.java:201)
    at com.google.cloud.secretmanager.v1.stub.GrpcSecretManagerServiceStub.create(GrpcSecretManagerServiceStub.java:248)
    at com.google.cloud.secretmanager.v1.stub.SecretManagerServiceStubSettings.createStub(SecretManagerServiceStubSettings.java:349)
    at com.google.cloud.secretmanager.v1.SecretManagerServiceClient.<init>(SecretManagerServiceClient.java:180)
    at com.google.cloud.secretmanager.v1.SecretManagerServiceClient.create(SecretManagerServiceClient.java:162)
    at com.google.cloud.secretmanager.v1.SecretManagerServiceClient.create(SecretManagerServiceClient.java:153)
    at com.rakuten.rcp.cdu.util.SecretManager.get(SecretManager.java:15)
    ... 2 more

解决方案

这个错误源于GCP客户端库创建时缺少显式Executor配置,或是依赖版本冲突,可通过以下方式解决:

1. 显式配置Executor创建客户端

修改客户端初始化逻辑,通过SecretManagerServiceSettings指定自定义Executor:

public String get(String secretName) {
    try {
        // 创建单线程Executor
        ExecutorService executor = Executors.newSingleThreadExecutor();
        // 构建客户端配置并绑定Executor
        SecretManagerServiceSettings settings = SecretManagerServiceSettings.newBuilder()
                .setExecutorProvider(FixedExecutorProvider.create(executor))
                .build();
        
        try (SecretManagerServiceClient client = SecretManagerServiceClient.create(settings)) {
            SecretVersionName secretVersionName = SecretVersionName.of(projectId, secretName, "latest");
            AccessSecretVersionRequest accessRequest = AccessSecretVersionRequest.newBuilder()
                    .setName(secretVersionName.toString())
                    .build();
            
            ByteString secretValue = client.accessSecretVersion(accessRequest).getPayload().getData();
            String secretString = secretValue.toStringUtf8();
            
            if (StringUtils.isNotBlank(secretString)) {
                return secretString;
            } else {
                throw new RuntimeException(String.format("Secret of %s is blank", secretName));
            }
        } finally {
            // 关闭Executor释放资源
            executor.shutdown();
        }
    } catch (Exception e) {
        throw new RuntimeException("Caught an error when getting a secret value.", e);
    }
}

2. 升级依赖版本

google-cloud-secretmanager 2.13.0存在已知的兼容性问题,建议升级到最新稳定版(如2.25.0或更高的2.x分支,或迁移至3.x版本),同时确保google-api-gax-grpc等关联依赖版本匹配,避免版本冲突。

3. 检查运行环境配置

若在容器或受限环境中运行,确认环境未限制线程池创建,或已提供客户端可使用的上下文Executor。

内容的提问来源于stack exchange,提问作者Chan Myae Aung

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:43:19