在我当前的项目中,数据持久性就是这样;
Android> Firebase数据库> Java EE Web应用程序> MySQL数据库。
已完成从android向Firebase写入数据的工作,并且工作正常。在下一步中,从firebase中读取然后写入MySQL,我正在使用Firebase Admin SDK。
我的计划是为Web应用程序设置一个ServletContextListener
,以便在Glassfish服务器上进行部署时使用Tiger,在该侦听器中,我使用以下代码为Firebase数据库上的某些数据库引用设置了childeventListeners
。
@Override
public void contextInitialized(ServletContextEvent arg0) {
try {
ClassLoader classLoader = getClass().getClassLoader();
InputStream serviceAccount = classLoader
.getResourceAsStream("/XXXXXX/firebase_private_key.json");
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl("https://xxxxxxxxxxx.com").build();
FirebaseApp.initializeApp(options);
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
// SET UP LISTENER
DatabaseReference ref = firebaseDatabase.getReference("XXXXXXXXX");
ref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildRemoved(DataSnapshot arg0) {
}
@Override
public void onChildMoved(DataSnapshot arg0, String arg1) {
}
@Override
public void onChildChanged(DataSnapshot arg0, String arg1) {
}
@Override
public void onChildAdded(DataSnapshot arg0, String arg1) {
storeData(arg0);
}
@Override
public void onCancelled(DatabaseError arg0) {
}
});
}
一切都按照我的预期进行得很好,但仅持续了几个小时。 ChildeventListeners
会自动禁用。
我需要让监听器永远工作,以保持Firebase数据库与MySQL数据库之间的数据同步。
我错过了什么吗?或者我滥用ChildEventListeners
吗?宁可使用上述过程,而是使用EJB Timers
实施预定的同步过程,这是一个好习惯?