精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何使用AuraDB構建Java微服務

譯文 精選
開發 前端
本文詳細地向您展示了如何構建一個Java微服務,如何連接到Neo4j AuraDB免費數據庫中的圖形數據,實現各種交互操作。

?譯者 | 陳峻

審校 | 孫淑娟

在本文中,我將構建一個Java微服務,與Neo4j AuraDB的免費數據庫中的圖形數據進行連接和交互。這些數據是??Goodreads數據集??的精簡版,其中包含了各種書籍、作者和評論等信息。雖然書籍和作者類別的數據適合于MongoDB等??文檔數據庫??,但是一旦我們將評論添加到該組合之中,則需要通過AuraDB來體現各個實體之間的關系,并最大限度地簡化針對實體連接方式的查詢。

預備知識

如果您對圖形數據庫不太熟悉的話,請通過如下資源自行惡補:

總的說來,Neo4j提供了多種部署選項。我們既可以啟動一個??Docker容器??(就像我們早期使用MongoDB項目那樣)或利用帶有免費層的數據庫即服務(database-as-a-service),如:??AuraDB??。

在本例中,我們將先創建自己的Neo4j數據庫,再加載數據,然后構建一個與數據庫交互、且能夠為客戶端各自服務提供API的微服務。

AuraDB

通常,您需要花費幾分鐘的時間,才能完成Neo4j AuraDB免費實例的注冊和創建,其中包括:驗證您的電子郵件地址,以及等待實例的啟動。您可以通過??《Discover AuraDB Free》??一文了解該過程的詳細信息、以及屏幕截圖。

圖形數據加載

一旦實例開始運行,我們就可以加載數據了。您可以通過??代碼存儲庫??,查看到包含了各種書籍的啟動文件、文件夾自述文件、以及加載腳本中的說明。其中,自述文件中包含了各種查詢,以方便我們去驗證數據。

值得注意的是,雖然具有較大數據集的版本也適合AuraDB的免費層實例,但為了便于實現快速加載,我們暫時選擇并保持較小的數據集。

應用服務

下面,我們需要通過構建應用,來提取評論數據。就微服務而言,我們將構建一個帶有一組REST端點的Spring Boot應用程序,以訪問連入Neo4j數據庫中的數據。

在此,我們可以使用??start.spring.i??中的Spring Initializr來整理出項目的大綱。而在表單上,??我們可以將Project、Language和Spring Boot字段保留為默認值。同時,在項目的Metadata部分下,我添加了該項目的組名。當然,您也可以保留默認值。雖然工件(artifact)名不太重要,但是我仍將其命名為neo4j-java-microservice,而所有其他字段則保持原樣。

在Dependencies部分下,我們將需要Spring Reactive Web、Lombok和??Spring Data Neo4j??。其中,Spring Data Neo4j是用于連接各種數據存儲的一個Spring Data項目。它可以幫助我們映射和訪問加載到數據庫中的數據。至此,該工程的模板已完成,我們可以點擊底部的Generate按鈕,來下載該工程(請參見下圖)。

注意:Spring Initializr會通過頁面右欄中的月亮和太陽圖標,來切換夜間和日間模式

由于項目被下載成為ZIP文件,因此我們可以將其解壓縮,并在自己喜好的IDE中打開它。

由于pom.xml文件包含了我們在Spring Initializr上設置的依賴項和軟件版本,因此我們可以輕松地定位到src/main/resources夾中的application.properties文件。在此,我們需要使用URI和數據庫憑據,來連接到Neo4j的實例上。畢竟,對于基于云端的實例而言,哪怕是對這些值采用了硬編碼,也可能會讓其他人意外地登錄進去,進而篡改我們的數據庫。因此,我們通常應當避免將數據庫的憑據直接嵌入到應用程序之中。為此,諸如數據庫憑據之類的配置值,需要在運行時(runtime),使用??Spring Cloud Config??之類的項目進行外部化與讀取。在本例中,我們可以在屬性文件中嵌入數據庫的URI、用戶名、密碼、以及數據庫的名稱。請參見如下代碼:

#database connection
spring.neo4j.uri=<insert Neo4j URI here>
spring.neo4j.authentication.username=<insert Neo4j username here>
spring.neo4j.authentication.password=<insert Neo4j password here>
spring.data.neo4j.database=<insert Neo4j database here>

注意:除非您專門使用命令去更改其默認值,否則此處數據庫默認為neo4j。

項目代碼

讓我們從整個域的類開始瀏覽各個Java文件:

@Data
@Node
class Review {
@Id
@GeneratedValue
private Long neoId;
@NonNull
private String review_id;
private String book_id, review_text, date_added, date_updated, started_at, read_at;
private Integer rating, n_comments, n_votes;
}

此處的@Data是一個??Lombok注釋??。它不但能夠為整個域的類生成我們所需要的getter、setter、equals、hashCode、以及toString方法,而且有效地減少了樣板(boilerplate)代碼的數量。而作為Spring Data Neo4j注釋的@Node,會將自己標記為Neo4j實體類(Neo4j的各個實體都稱為節點)。

在類的聲明中,我們為類定義了一些屬性字段。其中,@Id注釋是將字段標記為唯一的標識符。而@GeneratedValue可以表示該值是由Neo4j內部生成的。對于review_id字段,我們有一個Lombok@NonNull注釋,指定了該字段不能為空。同時,我們還需要檢索一些其他字段,以獲取評論文本、日期和評分信息。

接下來,我們需要一個存儲庫的接口,以便在其中定義與數據庫里的數據進行交互的方法。

interface ReviewRepository extends ReactiveCrudRepository<Review, Long> {
Flux<Review> findFirst1000By();
@Query("MATCH (r:Review)-[rel:WRITTEN_FOR]->(b:Book {book_id: $book_id}) RETURN r;")
Flux<Review> findReviewsByBook(String book_id);
}

我們希望該存儲庫能夠擴展ReactiveCrudRepository,以便使用各種響應式方法和類型,去處理數據。下面,我們來定義一組方法。雖然我們可以使用Spring Data的一些默認方法,以開箱即用的方式實現(請參見代碼示例文檔-- https://docs.spring.io/spring-data/commons/docs/current/reference/html/#repositories.core-concepts),不過,我們在此進行了自定義。畢竟,考慮到提取所有35,342條評論,可能會使得客戶端在呈現結果的過程中出現過載,因此我們并沒有使用默認的.findAll()方法,而是只提取其中的前1,000個結果。而且,我們并沒有去實現findFirst1000By()方法(例如,實現其查詢邏輯),而是使用了Spring Data的另一個特性:??派生方法??,即:利用Spring,根據方法的名稱去構造(即稱“派生”)查詢。

在本例中,由于我們的存儲庫可以使用ReactiveCrudRepository<Review, Long>來處理評論,因此findFirst1000會去尋找前1,000條評論。通常,該語法會通過by的特定標準(如:評分、評論者、以及日期等)來持續查找結果。不過,由于我們只想提取隨機的評論集合,因此我們僅通過簡單地從方法名稱中省去具體標準,來“欺騙”Spring,并獲得findFirst1000By的結果。

我們的下一個??方法??--findReviewsByBook()要簡單得多。如您所知,為了查找某本指定書目的評論,我們需要通過book_id去進行查找。在此,我們將@Query注釋與數據庫相關的查詢語句一起使用,即??Neo4j的Cypher??。

而在存儲庫完成之后,我們便可以編寫??控制器的類??,以便為其他服務設置一些用于訪問數據的REST端點。

@RestController
@RequestMapping("/neo")
@AllArgsConstructor
class ReviewController {
private final ReviewRepository reviewRepo;
@GetMapping
String liveCheck() { return "Neo4j Java Microservice is up"; }
@GetMapping("/reviews")
Flux<Review> getReviews() { return reviewRepo.findFirst1000By(); }
@GetMapping("/reviews/{book_id}")
Flux<Review> getBookReviews(@PathVariable String book_id) { return reviewRepo.findReviewsByBook(book_id); }
}

Spring注釋--@RestController會將此代碼塊指定為一個REST控制器類,而@RequestMapping則為所有類的方法都定義一個高級端點。如您所見,在類的聲明中,我們注入了??ReviewRepository??,以便使用已寫好的方法。

接下來,我們為每個方法映射相應的端點。其中,liveCheck()方法使用高級的/neo端點來返回一個字符串,以確保我們的服務是實時且可訪問的。同時,我們可以通過添加嵌套端點(/reviews),來執行getReviews()方法。該方法用到了我們在存儲庫中編寫的findFirst1000By()方法,并返回一個反應式Flux<>類型,并帶有零到多條評論結果。

我們的最終??方法??嵌套了端點/reviews/{book_id}。其中,書籍id是一個路徑變量,它會根據待搜索的書目而變化。而getBookReviews()方法會傳入指定的書的id作為路徑變量,然后從存儲庫中調用findReviewsByBook()方法,并返回一個帶有評論的Flux<>。

進行測試

下面,我們可以測試這個新服務了。首先,我需要確保Neo4j AuraDB實例仍在運行。注意:AuraDB的免費套餐通常會在三天后自動暫停。對此,您需要使用實例上的“播放”圖標予以恢復。

接下來,我們需要通過IDE或命令行,來啟動我們的neo4j-java-microservice應用。在其開始運行后,我們可以使用以下命令開展應用測試:

1. 測試應用的上線狀態:打開瀏覽器,輸入localhost:8080/neo;或是在命令行中輸入curl localhost:8080/neo。

2. 通過查找評論來測試后端的評論api:打開瀏覽器,輸入localhost:8080/neo/reviews;或是在命令行中輸入curl localhost:8080/neo/reviews。

3. 通過查找具體某本書的評論,來測試API:打開瀏覽器,輸入localhost:8080/neo/reviews/178186;或是在命令行中輸入curl localhost:8080/neo/178186。

下圖展示了該服務的評論api的輸出結果:

找到前1000條評論

按書目查找評論

小結

通過上述步驟,我們使用Neo4j AuraDB的免費層,創建了一個圖形數據庫實例,并為書籍、作者和評論加載了相關數據。接著,我們構建了一個微服務應用,以連接到云端數據庫中,并檢索相關評論。最后,我們通過啟動應用和訪問每個端點的方式,來測試我們的所有代碼,以確保數據能夠被正常地查詢到。

同時,我們在此基礎上進行了擴展。其中包括:為了保持敏感數據的機密性,并可供多個服務訪問,我們使用Spring Cloud Config將數據庫的憑證予以了外部化。當然,我們也可以將該服務添加到Docker Compose等編排工具中,以協同管理多個服務。將來,我們還可以通過從數據庫中提取更多相關實體,更加充分地利用圖形數據的優勢。 

譯者介紹

陳峻 (Julian Chen),51CTO社區編輯,具有十多年的IT項目實施經驗,善于對內外部資源與風險實施管控,專注傳播網絡與信息安全知識與經驗;持續以博文、專題和譯文等形式,分享前沿技術與新知;經常以線上、線下等方式,開展信息安全類培訓與授課。

原文標題:??Build a Java Microservice With AuraDB Free???,作者:Jennifer Reif?

責任編輯:華軒 來源: 51CTO
相關推薦

2020-02-17 16:28:49

開發技能代碼

2021-12-29 08:30:48

微服務架構開發

2018-09-12 09:00:00

數據庫Redis微服務

2022-08-22 07:26:32

Node.js微服務架構

2018-04-23 14:31:02

微服務GraphQLBFF

2022-09-12 15:58:50

node.js微服務Web

2018-07-09 09:27:10

Spring Clou微服務架構

2023-06-01 15:14:55

架構Python微服務

2018-12-03 08:00:00

微服務gRPC

2023-04-13 15:04:57

Java微服務架構

2023-04-10 07:23:24

軟件微服務網絡

2022-10-10 08:00:00

微服務Spring Boo容器

2021-07-26 08:10:24

微服務單體架構

2022-06-07 08:19:30

gRPCBallerina微服務

2021-01-07 08:43:11

微服務pipelineGitLabGroup

2023-08-16 14:39:20

微服務Java

2024-11-06 16:27:12

2022-03-31 08:15:38

微服務服務拆分架構

2022-08-16 08:19:04

Sentinel微服務

2024-07-10 10:51:39

SpringEureka數據中心
點贊
收藏

51CTO技術棧公眾號

亚洲乱亚洲乱妇| 久久久亚洲精选| 国产精品永久在线| 黑人玩弄人妻一区二区三区| 亚洲av无码不卡| 香蕉免费一区二区三区在线观看| 久久最新视频| 亚洲国产免费av| 国产av熟女一区二区三区| 姑娘第5集在线观看免费好剧| 免费成人蒂法| 亚洲成a人v欧美综合天堂| 91gao视频| 日本天堂中文字幕| 成人豆花视频| 亚洲欧洲无码一区二区三区| 国产精品a久久久久久| 日韩乱码人妻无码中文字幕久久| 无码小电影在线观看网站免费| 国产精品一区一区三区| 久久久国产在线视频| 永久免费的av网站| 日韩免费啪啪| 9色porny自拍视频一区二区| 高清在线视频日韩欧美| 免费黄色激情视频| 亚洲香蕉久久| 中文字幕永久在线不卡| 91久久久久久久| 最新一区二区三区| 日韩视频在线直播| 精品1区2区3区| 在线一区亚洲| 性生交大片免费看女人按摩| 好看的日韩av电影| 亚洲国产精品久久91精品| 男人日女人下面视频| 青青草在线免费观看| 视频一区二区中文字幕| 久久久免费av| 免费在线观看日韩| 婷婷激情久久| 欧美日韩在线播| 男人揉女人奶房视频60分| 高清av电影在线观看| 日韩中文字幕亚洲一区二区va在线| 亚洲欧洲日产国产网站| 亚洲黄色小视频在线观看| 欧美a在线看| 国产成人欧美日韩在线电影| 午夜精品视频在线| av女人的天堂| 久久在线观看| 亚洲成av人影院| 国产在线视频综合| 午夜成年人在线免费视频| yourporn久久国产精品| 高清国产在线一区| 特级毛片www| 99精品综合| 欧美精品一区二区在线播放| 日韩 欧美 高清| 麻豆网在线观看| 日韩美女精品在线| 日本一道在线观看| 日韩a在线看| 成人高清免费观看| 国产精品一区电影| 国产又粗又黄又爽| 99精品视频网| 久久精品视频在线观看| 日本二区三区视频| 欧美成熟视频| 永久免费毛片在线播放不卡| 久久精品无码专区| 欧美日韩一区二区三区四区不卡| 国产视频欧美视频| 三上悠亚 电影| 四虎4545www国产精品| 亚洲宅男天堂在线观看无病毒| 欧美日产一区二区三区在线观看| 国产手机av在线| 日韩极品在线观看| 国产欧美日韩最新| 毛片毛片女人毛片毛片| 久热精品在线| 川上优av一区二区线观看| 午夜精品久久久久久久99老熟妇| 日本欧美韩国一区三区| 97精品视频在线播放| 日日夜夜狠狠操| 99成人免费视频| 国产精品电影一区| 五月天综合激情网| 亚洲国产裸拍裸体视频在线观看乱了中文 | 日韩精品一区二区三区蜜臀| 欧美亚洲日本在线观看| 超碰99在线| 亚洲卡通欧美制服中文| 亚洲不卡中文字幕| av片免费播放| 久久99久久99小草精品免视看| 国产成人短视频| 国产精品亚洲lv粉色| 久久99精品久久久久久| 国产精品一区二区三区精品| 国产18精品乱码免费看| 国产aⅴ综合色| 亚洲自拍av在线| 99国产精品一区二区三区| 91色在线porny| 欧美成人一区二区在线| 青青草手机在线| 亚洲免费伊人电影| 看欧美ab黄色大片视频免费 | 国产成人三级在线观看视频| 欧美激情中文字幕一区二区| 久久影院理伦片| 国产午夜精品久久久久免费视| 国产精品视频在线看| 日韩一二三区不卡在线视频| 国产高清视频在线| 亚洲一区二区精品久久av| 国产在线xxxx| 青娱乐极品盛宴一区二区| 3751色影院一区二区三区| 精品国产鲁一鲁一区二区三区| 99热这里有精品| 亚洲午夜激情免费视频| 摸摸摸bbb毛毛毛片| 99re66热这里只有精品8| 色偷偷亚洲男人天堂| 日本二区三区视频| 秋霞午夜av一区二区三区| 久久国产精品一区二区三区| 精品影院一区| 综合电影一区二区三区 | 黄网站色视频免费观看| 蜜臀av在线播放| 午夜久久久影院| 五月天六月丁香| 久久电影在线| 中文字幕不卡在线视频极品| 自拍偷拍第9页| 正在播放日韩欧美一页 | 激情小说中文字幕| 国产综合色在线| 国产精品一区二区不卡视频| 91网址在线观看| 五月天亚洲婷婷| 8x8x最新地址| 欧美在线免费看视频| 美女久久久久久久久久久| 日韩黄色精品视频| 麻豆91小视频| 国精产品一区二区| 97在线观看免费观看高清| 亚洲美腿欧美偷拍| 亚洲AV无码久久精品国产一区| 欧美成人日韩| 国产视频一区二区三区四区| f2c人成在线观看免费视频| 欧美日韩亚洲综合一区二区三区 | www.色播.com| 亚洲国产精品一区二区尤物区| 无码播放一区二区三区| 免费成人蒂法| 国产精品美女免费看| 好吊色一区二区| 亚洲高清一区二区三区| 少妇毛片一区二区三区| 欧美一区不卡| 国产精品av一区| 97人人在线视频| 国产亚洲a∨片在线观看| 91九色蝌蚪91por成人| 一区二区高清免费观看影视大全| 一区二区免费在线观看视频| 国产精品99视频| 成人午夜影院在线观看| 日本在线啊啊| 精品国产三级电影在线观看| 亚州国产精品视频| 国产精品888| 久久久亚洲精品无码| 精品久久免费| 97精品免费视频| 一区二区高清不卡| 欧美精品一区二区三区在线| 波多野结衣一二区| 亚洲在线观看免费视频| 偷拍夫妻性生活| 国产高清精品久久久久| 可以在线看的黄色网址| 在线观看免费一区二区| 日本一区免费| 写真福利精品福利在线观看| 亚洲第一页中文字幕| 无码人妻精品一区二区蜜桃色欲| 亚洲欧洲制服丝袜| 9久久婷婷国产综合精品性色| 亚洲视频在线免费| 欧美美乳视频网站在线观看| 精品一区二区三区亚洲| 日韩av免费在线播放| 九九九伊在人线综合| 日韩一区二区三区四区五区六区| 久草网站在线观看| 国产拍欧美日韩视频二区| 午夜免费福利影院| 亚洲福利一区| 国内外成人免费视频| 日韩一级视频| 国产成人精品久久亚洲高清不卡| 羞羞的视频在线看| 日韩中文字幕国产| 国产情侣自拍小视频| 欧美特黄级在线| 最新中文字幕av| 99久久er热在这里只有精品15| 天堂…中文在线最新版在线| 久久久久久免费视频| 99re国产| 亚洲天堂电影| 欧美大片在线看免费观看| 日本美女一级视频| 色偷偷一区二区三区| 四季av中文字幕| 国产一区二区视频在线| 日韩一级片播放| 国产视频一区三区| 亚洲精品一卡二卡三卡四卡| 日本午夜精品久久久| av成人午夜| 亚洲国产高清在线观看| 欧美黄色免费网站| 九色porny丨首页在线| 色妞欧美日韩在线| 91se在线| 日韩中文理论片| jizz日韩| 精品国产伦一区二区三区观看体验 | 黄色网页网址在线免费| 中文字幕久热精品视频在线| 高清日韩av电影| 少妇精69xxtheporn| av在线免费观看网站| 伊是香蕉大人久久| 免费网站免费进入在线| 久久精品国产久精国产思思| 日本在线视频网| 久热精品视频在线免费观看| 欧美 日韩 国产 成人 在线| 日韩女优视频免费观看| 亚洲黄色小说网址| 亚洲国产精品高清久久久| 亚洲av毛片成人精品| 欧美午夜片在线看| 久久精品女人毛片国产| 日本一区二区三区视频视频| 免费看黄色av| 亚洲欧洲成人自拍| 青娱乐91视频| 性欧美大战久久久久久久久| 黄色大片网站在线观看| 在线视频亚洲一区| 日本中文字幕网| 精品女厕一区二区三区| 国产精品 欧美激情| 国产午夜精品久久久久久久| 日本中文字幕有码| 蜜臀av一级做a爰片久久| 国产av人人夜夜澡人人爽麻豆| 大色综合视频网站在线播放| 亚洲一区二区三区加勒比| 日韩aaa久久蜜桃av| 欧美午夜视频在线| 久久激情电影| 欧洲精品久久| 99久久久久国产精品| 国产成人在线小视频| 久久久久久久欧美精品| 日本中文字幕亚洲| 久久综合导航| 精品人妻一区二区乱码| 91免费国产视频网站| 战狼4完整免费观看在线播放版| 一区二区三区国产精品| 久久精品无码av| 狠狠色狠狠色综合日日小说| 成人一级免费视频| 日韩精品一区二区三区中文精品 | 亚洲天堂中文字幕在线观看| 久久精品magnetxturnbtih| 97国产精品| 久久无码高潮喷水| 国产精品一区二区三区四区| 精品无码人妻一区| 伊人一区二区三区| 久久久久久视频| 色婷婷综合五月| 亚洲国产精品久久久久久6q | 国内精品久久国产| 国产精品久久久久一区二区三区厕所| 黄页网站大全在线观看| 激情综合一区二区三区| 污片在线免费看| caoporn国产精品| 久久福利免费视频| 色综合久久久网| 国产91久久久| 久久这里只有精品99| 精品免费av一区二区三区| 国产欧美日韩一区| 午夜久久tv| 99国产精品久久久久久| 国产精品综合在线视频| 精品人妻无码一区二区三区换脸| 亚洲自拍偷拍麻豆| 97人妻精品一区二区三区软件 | 男人的天堂在线视频免费观看| 人九九综合九九宗合| 久久sese| 国产日本欧美一区二区三区在线| 成人看片黄a免费看视频| 国内精品国语自产拍在线观看| 亚洲成人精品| 奇米视频888| 丰满放荡岳乱妇91ww| 97在线观看免费高| 欧美日韩一区二区三区不卡| 久久电影中文字幕| 欧美综合激情网| 天海翼亚洲一区二区三区| 可以在线看的av网站| 成人免费毛片嘿嘿连载视频| 欧美色图亚洲激情| 亚洲第一狼人社区| 俄罗斯嫩小性bbwbbw| 欧美激情免费看| 国产成人在线中文字幕| 欧美色欧美亚洲另类七区| 在线亚洲免费| 国产精品久久久免费观看| 国产精品丝袜黑色高跟| 中文字幕精品一区二| 欧美不卡123| 都市激情一区| 国产精品高精视频免费| 成人激情免费视频| 自拍偷拍21p| 亚洲婷婷在线视频| 亚洲av少妇一区二区在线观看| 欧美另类老女人| 韩国成人在线| 亚洲一区二区不卡视频| 韩国成人在线视频| 免费无码毛片一区二区app| 精品国产欧美一区二区| 无码小电影在线观看网站免费| 欧美精品一区二区三区四区五区| 久久国产直播| 男人的午夜天堂| 日韩精品在线一区二区| 麻豆免费在线| 天堂资源在线亚洲视频| 国产一区二区在线看| 久久久久久久久艹| 欧美日韩大陆在线| 日本高清中文字幕二区在线| 国产精品96久久久久久又黄又硬 | 国产免费一区二区视频| 日本不卡一区二区| 欧美一级片在线视频| 精品国产91乱码一区二区三区 | 欧美日韩亚洲视频| aaa日本高清在线播放免费观看| 91精品视频一区| 99精品国产在热久久| 色婷婷国产精品免| 日韩欧美国产综合一区 | 欧美三级日韩三级国产三级| 先锋影音在线资源站91| 欧美欧美一区二区| 国产麻豆成人精品| www.伊人久久| 久久精品国产电影| 五月天亚洲一区| 午夜不卡福利视频| 欧美性色视频在线| gogo在线观看| 91免费在线视频| 国产一区二区高清| 日本在线一级片| 亚洲视频日韩精品| 成人偷拍自拍| 亚洲男人天堂av在线| 欧美性xxxxx极品| 视频在线这里都是精品| 天堂av一区二区|