如何在 Spring Boot 应用程序中设置 GOOGLE_APPLICATION_CREDENTIALS

问题描述 投票:0回答:7

我正在尝试在java中使用谷歌视觉库。这些步骤指定我需要设置身份验证凭据才能开始使用 this 库。我能够从 API 控制台凭据页面生成 json 属性文件,并将其放置在资源文件夹中的 Spring Boot 应用程序中。

我认为更新了我的 application.properties 文件以包含如下值:

GOOGLE_APPLICATION_CREDENTIALS=datg-avatar-generator-9dc9155cd5bd.json

我还在我的控制器中设置我的属性源,如下所示:

@PropertySource("${GOOGLE_APPLICATION_CREDENTIALS}")

但是,这样做后我仍然收到错误消息:

java.io.IOException: The Application Default Credentials are not available. They are available if running in Google Compute Engine. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.
java spring google-api google-oauth
7个回答
14
投票

我能够使用 Spring Cloud GCP spring-cloud-gcp-starter-data-datastore 配置此属性,创建服务帐户项目所有者,将 JSON 私钥复制到主资源目录,并在应用程序中设置以下属性.属性

spring.cloud.gcp.project-id=<project-id>
spring.cloud.gcp.credentials.location=classpath:<credentials-private-key>.json

来自文档

您可以通过访问此页面找到项目 ID https://support.google.com/googleapi/answer/7014113?hl=en 转到 API 控制台。

从项目列表中,选择管理所有项目。将显示您所属的所有项目的名称和 ID。 您还可以选择项目进入设置并查看项目 ID


2
投票

您可以使用应用程序属性,但需要使用不同的 StorageOptions 构建器。

您可能正在使用

private static Storage storage = StorageOptions.getDefaultInstance().getService(); 

但是如果你想跳过环境变量,你需要使用:

Credentials credentials = GoogleCredentials
  .fromStream(new FileInputStream("path/to/file"));
Storage storage = StorageOptions.newBuilder().setCredentials(credentials)
  .setProjectId("my-project-id").build().getService();

请注意,如果您要将应用程序部署到云,则默认构建器(使用环境变量)会更好,因为这样会自动为您填充。


1
投票

您需要设置 shell 变量。在 mvn run 之前运行此命令。

export GOOGLE_APPLICATION_CREDENTIALS="/Users/ronnyshibley/Dev/eddress-service-key.json"

1
投票

对于使用服务帐户密钥进行身份验证,您可以在 shell 中设置环境变量。

export GOOGLE_APPLICATION_CREDENTIALS="/Users/username/directory/service-key-file-name.json"

然后您需要从同一会话启动 IDE。我导出并设置环境变量后卡住了,仍然无法使用。

我尝试退出当前 IDE 窗口并从同一会话再次重新启动 IDE。 就我而言,它是 Intellij,所以在终端本身中,

cd project directory
idea .

或者您也可以在 bash 配置文件中添加环境变量,然后获取它。


1
投票

我尝试了多种方法来做到这一点,但没有一个有效。 Maven插件 环境变量是最后一个没有任何问题的东西。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
                <executable>true</executable>
                <environmentVariables>
                    <GOOGLE_APPLICATION_CREDENTIALS>/path/to/the/service-account.json</GOOGLE_APPLICATION_CREDENTIALS>
                </environmentVariables>
            </configuration>
        </plugin>
    </plugins>
</build>

0
投票

您需要添加环境变量

GOOGLE_APPLICATION_CREDENTIALS=<path to google project json file >

如果您使用的是 IntelliJ idea,请编辑项目配置并添加环境变量

查看图片请查看这里

https://www.twilio.com/blog/set-up-env-variables-intellij-idea-java


0
投票

您可以像这样加载 JSON 密钥文件:

// Load the JSON key and create a TranslationServiceClient:
public TranslationServiceClient getTranslationClient() throws IOException {
    InputStream credentialsStream = getClass().getResourceAsStream("/key.json");
    Credentials credentials = GoogleCredentials.fromStream(credentialsStream);

    TranslationServiceSettings settings = TranslationServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credentials))
            .build();

    return TranslationServiceClient.create(settings);
}

这是用法:

// Replace [YOUR_PROJECT_ID] with your Google Cloud Project ID
public void translateText() {
    try (TranslationServiceClient client = getTranslationClient()) {
        LocationName parent = LocationName.of("[YOUR_PROJECT_ID]", "global");

        TranslateTextRequest request = TranslateTextRequest.newBuilder()
                .setParent(parent.toString())
                .setMimeType("text/plain")
                .setSourceLanguageCode("en-US")
                .setTargetLanguageCode("es")
                .addContents("Hello, World!")
                .build();

        TranslateTextResponse response = client.translateText(request);
        String translatedText = response.getTranslationsList().get(0).getTranslatedText();
        System.out.println(translatedText);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

请记住谨慎对待 key.json 文件。确保它不可公开访问,因为滥用可能会导致您的 Google Cloud 帐户产生意外费用。

© www.soinside.com 2019 - 2024. All rights reserved.