如何在Java应用程序中仅初始化一次Firebase?

时间:2018-12-27 02:55:05

标签: java firebase

我正在开发Java应用程序,我想在Firebase上保存数据登录。 我的问题是:每次调用saveFirebase方法时,都必须调用initFirebase()方法来初始化Firebase。它没有必要。 我的问题:如何在我的应用程序中仅初始化一次Firebase?

此外,我的应用程序将构建为* .war文件并部署到Wildfly以运行。

预先感谢

我的代码:

private void initFirebase() {
    try {
        boolean hasBeenInitialized=false;
        List<FirebaseApp> firebaseApps = FirebaseApp.getApps();
        for(FirebaseApp app : firebaseApps){
            if(app.getName().equals(FirebaseApp.DEFAULT_APP_NAME)){
                hasBeenInitialized=true;
            }
        }

        if(!hasBeenInitialized) {
            FileInputStream serviceAccount = new FileInputStream(System.getProperty("json_firebase_path"));
            FirebaseOptions options = new FirebaseOptions.Builder()
                    .setCredentials(GoogleCredentials.fromStream(serviceAccount))
                    .setDatabaseUrl(FIREBASE_DB_URL)
                    .build();
            FirebaseApp.initializeApp(options);
        }

        firebaseDatabase = FirebaseDatabase.getInstance();

    } catch (IOException e) {
        LOGGER.log(Level.WARNING, "Invalid service account credentials: " + e.getMessage());
    }
}

private void saveFirebase(String tenant, DataLoginModel data, String environment) {
        // initialize firebase
        initFirebase();

        /* Get database root reference */
        DatabaseReference databaseReference = firebaseDatabase.getReference("/");

        final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        final Date date = new Date();
        /* Get existing child or will be created new child. */
        DatabaseReference childReference = databaseReference.child(environment)
                .child(dateFormat.format(date).toString())
                .child("tenants")
                .child(tenant)
                .child("companies")
                .child(data.getCompany_id());
        childReference.setValueAsync(data);
}

0 个答案:

没有答案