在本教程中,将了解如何连接到Firebase Firestore数据库并使用其余Web服务持久化数据。
为此,将从上一篇博客文章使用Spring Boot和Java构建Restful Web Service的其余Web服务开始。
如果您是视频专家,则此视频演示连接到Firebase并保留数据
转到firebase.google.com,然后单击右上角的“获得控制台”,它将带您进入控制台,如下所示。 单击添加项目并为其命名。
创建完成后,将带您进入项目控制台页面,如下所示,单击数据库并创建一个名为“用户”的集合。
创建集合后,我们将转到项目设置->服务“帐户”标签以生成密钥并将其保存在您的项目中,该密钥将用于连接到Firebase Firestore数据库。 我们还将获取Java的admin SDK配置代码段。
现在打开pom.xml并添加google firebase admin SDK依赖项
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-admin</artifactId>
<version>6.11.0</version>
</dependency>
添加一个名为FirebaseInitialize的文件,在应用程序启动期间,我们将使用该文件建立与Firebase的连接。 该类看起来像这样。
package com . example . demo . service ;
import java . io . FileInputStream ;
import javax . annotation . PostConstruct ;
import org . springframework . stereotype . Service ;
import com . google . auth . oauth2 . GoogleCredentials ;
import com . google . firebase . FirebaseApp ;
import com . google . firebase . FirebaseOptions ;
@ Service
public class FirebaseInitialize {
@ PostConstruct
public void initialize () {
try {
FileInputStream serviceAccount =
new FileInputStream ( "./serviceAccount.json" );
FirebaseOptions options = new FirebaseOptions . Builder ()
. setCredentials ( GoogleCredentials . fromStream ( serviceAccount ))
. setDatabaseUrl ( "https://fir-demo-8920f.firebaseio.com" )
. build ();
FirebaseApp . initializeApp ( options );
} catch ( Exception e ) {
e . printStackTrace ();
}
}
}
@Service Annotation使Spring启动程序知道它是一个服务类,需要绑定。
@PostConstruct Annotation指定函数initialize()应该在启动应用程序之前运行,因此它将创建一个Firebase连接。
我们具有在此处粘贴的较早步骤中从firebase控制台复制的代码。
第一行读取我们在步骤1的Firebase项目设置页面上生成的serviceAccount.json 。
它使用通过FirebaseOptionsBuilder构建的选项,通过FirebaseApp.initializeApp连接到Firebase ,该选项将具有我们从serviceAccount.json和databaseURL中提取的凭据。
现在,我们将编写一个Firebase Service类,该类将具有以下四个功能来执行分类操作: createUser(创建新用户) , updateUser(更新现有用户) , getUserDetails(获取用户详细信息) , deleteUser(删除现有用户)该类如下所示。
package com . example . demo . service ;
import java . util . concurrent . ExecutionException ;
import org . springframework . stereotype . Service ;
import com . example . demo . objects . Person ;
import com . google . api . core . ApiFuture ;
import com . google . cloud . firestore . DocumentReference ;
import com . google . cloud . firestore . DocumentSnapshot ;
import com . google . cloud . firestore . Firestore ;
import com . google . cloud . firestore . WriteResult ;
import com . google . firebase . cloud . FirestoreClient ;
@ Service
public class FirebaseService {
public String saveUserDetails ( Person person ) throws InterruptedException , ExecutionException {
Firestore dbFirestore = FirestoreClient . getFirestore ();
ApiFuture < WriteResult > collectionsApiFuture = dbFirestore . collection ( "users" ). document ( person . getName ()). set ( person );
return collectionsApiFuture . get (). getUpdateTime (). toString ();
}
public Person getUserDetails ( String name ) throws InterruptedException , ExecutionException {
Firestore dbFirestore = FirestoreClient . getFirestore ();
DocumentReference documentReference = dbFirestore . collection ( "users" ). document ( name );
ApiFuture < DocumentSnapshot > future = documentReference . get ();
DocumentSnapshot document = future . get ();
Person person = null ;
if ( document . exists ()) {
person = document . toObject ( Person . class );
return person ;
} else {
return null ;
}
}
public String updateUserDetails ( Person person ) throws InterruptedException , ExecutionException {
Firestore dbFirestore = FirestoreClient . getFirestore ();
ApiFuture < WriteResult > collectionsApiFuture = dbFirestore . collection ( "users" ). document ( person . getName ()). set ( person );
return collectionsApiFuture . get (). getUpdateTime (). toString ();
}
public String deleteUser ( String name ) {
Firestore dbFirestore = FirestoreClient . getFirestore ();
ApiFuture < WriteResult > writeResult = dbFirestore . collection ( "users" ). document ( name ). delete ();
return "Document with ID " + name + " has been deleted" ;
}
}
我们还将用@Service注释定义此类,以便可用于自动接线。
由于已提前初始化了与数据库的连接,因此我们将在此处提取数据库以对该数据库执行操作。
Firestore dbFirestore = FirestoreClient.getFirestore();
这将实例化我们将用于访问创建的集合的firestore客户端对象。
ApiFuture collectionsApiFuture = dbFirestore.collection("users").document(person.getName()).set(person)
这行语法获取集合“ users”,并尝试使用id记录文档(在本例中,我将id设置为用户名),如果找不到指定id的文档,它将使用Person创建新文档宾语。
如果已经存在一个ID,它将更新文档;如果您观察到updateUser函数,它将具有与createUser相同的逻辑。
对于deleteUser ,语法为
dbFirestore.collection("users").document(person.getName())
如果您在学习本教程时遇到问题,请观看以下视频,该视频演示了完整的教程。
From: https://dev.to/nagarajendra/persist-data-to-firebase-with-rest-api-217n