установить сервисную учетную запись Google APPLICATION CREDENTIALS. json в загрузочном коде Spring без установки переменной среды - PullRequest
0 голосов
/ 10 марта 2020

Я делаю весеннее загрузочное приложение, которое будет использовать Firebase для отправки сообщения. Я знаю, что мне нужно установить переменную среды export GOOGLE_APPLICATION_CREDENTIALS="[PATH]", чтобы установить service-account.json в качестве учетных данных.

Но есть ли способ установить учетные данные в коде Java без установки переменной среды?

Я бы хотел поместить файл service-account.json в папку resource и собрать в файл war.

Я использую весеннюю загрузку. Мой код для инициализации Firebase выглядит так:

FirebaseApp.initializeApp();

Но я получаю сообщение об ошибке:

Exception in thread "main" java.lang.IllegalStateException: 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.

Я также пытался authExplicit, описанный в https://developers.google.com/accounts/docs/application-default-credentials, но все же получить ту же ошибку

мой код:

public static void main(String[] args) {
    try {
        authExplicit();
    } catch (Exception e) {
        e.printStackTrace();
    }
    initGoogleSDK();
    SpringApplication.run(AhsayPushNotificationServiceApplication.class, args);
}

private static void initGoogleSDK() {
    if (FirebaseApp.getApps().isEmpty()) {

        FirebaseApp.initializeApp();
    } 
}

static void authExplicit() throws IOException {
    File accountJson = ResourceUtils.getFile("classpath:service-account.json");
    // You can specify a credential file by providing a path to GoogleCredentials.
    // Otherwise credentials are read from the GOOGLE_APPLICATION_CREDENTIALS environment variable.
    GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(accountJson));
    Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService();
}
...