Я пытаюсь использовать 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
, указывающая на файл, определяющий учетные данные.