我正在开发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);
}