我正在使用Firebase和Java Spring以及Tomcat8。我的firebase身份验证规则是
{
"rules": {
".read": "auth!=null",
".write": "auth!=null"
}
}
我在java spring应用程序中创建了一个单例类来加载firebase配置并启用匿名登录。部署服务器几个小时后会出现此问题。当我部署WAR文件时,它会将数据库更新几个小时,几小时后它就会失败。然后我需要重新加载服务器上下文。 我知道会议每24小时到期一次,但它在24小时之前也会出现问题。
我尝试过的事情
CronJob实例初始化代码:
@RequestMapping(value = "/cronJob/reloadSession", method = RequestMethod.POST)
@ResponseBody
public BasicResponse reloadSession(HttpServletRequest request) {
BasicResponse response = new BasicResponse();
FirebaseManager.INSTANCE = new FirebaseManager();
return response;
}
Firebase Manager:Singleton类代码
package com.dolphino.webapp.manager;
import java.io.InputStream;
import java.util.List;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
@Service
public class FirebaseManager {
public static FirebaseManager INSTANCE = new FirebaseManager();
private static String FIREBASE_PATH = "/firebaseConnection.json";
private static FirebaseOptions options;
public FirebaseManager(){
super();
try{
InputStream in = MobileManager.class.getResourceAsStream(FirebaseManager.FIREBASE_PATH);
options = new FirebaseOptions.Builder()
.setServiceAccount(in)
.setDatabaseUrl("https://my-url.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
}catch(Exception e){
//throw exception
}
}
@Async
public void saveUser(String parentId, String text){
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("users").child(parentId).setValue(text);
}
}
我还尝试将 saveUser 方法保留在另一个类中,并自动连接它。但它仍然没有用。
tomcat8服务器日志:
logs/catalina.2016-09-15.log:21:15-Sep-2016 12:08:18.765 WARNING [http-nio-8443-exec-57] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [project-spring] appears to have started a thread named [MongoCleaner560407163] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
logs/catalina.2016-09-15.log:24:15-Sep-2016 12:08:18.766 WARNING [http-nio-8443-exec-57] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [project-spring] appears to have started a thread named [FirebaseDatabaseWorker] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
logs/catalina.2016-09-15.log:34:15-Sep-2016 12:08:18.766 WARNING [http-nio-8443-exec-57] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [project-spring] appears to have started a thread named [FirebaseDatabaseEventTarget] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
logs/catalina.2016-09-15.log:43:15-Sep-2016 12:08:18.766 WARNING [http-nio-8443-exec-57] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [project-spring] appears to have started a thread named [java-sdk-http-connection-reaper] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
logs/catalina.2016-09-15.log:46:15-Sep-2016 12:08:24.944 INFO [http-nio-8443-exec-57] org.apache.catalina.core.StandardContext.reload Reloading Context with name [/project-spring] is completed