Настройка GOOGLE_APPLICATION_CREDENTIALS весной - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь использовать Spring для доступа к файлам из Google Storage Buckets с конечной целью использования MultiResourceItemReader для чтения нескольких файлов XML из корзины. В настоящее время Spring работает с этим процессом, когда файлы XML находятся на моем компьютере локально (не GCP)

Теперь я хочу сделать то же самое, но вместо файлов XML на моем компьютере они находятся в хранилище GCP. Я могу получить доступ к содержимому корзины вне Spring, по одному файлу за раз. Например, этот небольшой тестовый код позволяет мне получить доступ к корзине, а затем просмотреть файлы в корзине. В этом фрагменте я настраиваю учетные данные с помощью файла ключей JSON. (не переменная окружения)

public static void storageDriver() throws IOException {
// Load credentials from JSON key file. If you can't set the GOOGLE_APPLICATION_CREDENTIALS
// environment variable, you can explicitly load the credentials file to construct the
// credentials.

    String name = "";
    String bucketName = "";
    String bucketFileName = "";
    String bucketFullPath = "";
    Resource myBucker;
    GoogleCredentials credentials;
    File credentialsPath = new File("mycreds.json");  
    try (FileInputStream serviceAccountStream = new FileInputStream(credentialsPath)) {
        credentials = ServiceAccountCredentials.fromStream(serviceAccountStream);
    }


    Storage storage = StorageOptions.newBuilder()
            .setCredentials(credentials)
            .setProjectId("myProject")
            .build()
            .getService();

    for (Bucket bucket:storage.list().iterateAll()){
        if(bucket.getName().equalsIgnoreCase("myGoogleBucket")){
            bucketName = bucket.getName();
            System.out.println(bucket);
            for (Blob blob : bucket.list().iterateAll()){
                bucketFileName = blob.getName();
                bucketFullPath = "gs://"+bucketName+"/"+bucketFileName;
                System.out.println(bucketFullPath);

            }
        }
    };

Однако, когда я пытаюсь сделать следующее с помощью Spring, Spring жалуется, что у меня не определено GOOGLE_APPLICATION_CREDENTIALS. (что, конечно, я не делаю, так как я делаю это программно.

Например, я добавлю

@Value("gs://myGoogleBucket")
private Resource[] resources;

Учетные данные приложения по умолчанию недоступны. Они доступны, если работают в Google Compute Engine. В противном случае должна быть определена переменная среды GOOGLE_APPLICATION_CREDENTIALS, указывающая на файл, определяющий учетные данные.

1 Ответ

0 голосов
/ 04 мая 2018

Spring Cloud GCP упрощает настройку GCS.

Вы можете добавить Поддержка хранилища в свое приложение. Затем либо укажите расположение учетных данных своей учетной записи службы через свойство spring.cloud.gcp.storage.credentials.location, либо войдите в систему , используя учетные данные по умолчанию для приложения, используя Google Cloud SDK .

Это автоматически предоставит вам полностью настроенный объект Storage, и такие вещи, как @Value(gs://YOUR-BUCKET/YOUR-FILE), должны просто работать.

...