JHipster是生成Java和JavaScript混合應(yīng)用程序的成熟框架,支持你喜歡用的開(kāi)發(fā)工具,并提供現(xiàn)成的監(jiān)控和其他管理功能。
JHipster是一個(gè)長(zhǎng)期存在且雄心勃勃的Java和JavaScript混合項(xiàng)目,致力于使用響應(yīng)式前端簡(jiǎn)化全棧Java應(yīng)用程序的開(kāi)發(fā)。JHipster開(kāi)發(fā)團(tuán)隊(duì)不斷發(fā)布新版本,以跟上IT行業(yè)變化。通過(guò)構(gòu)建一個(gè)簡(jiǎn)單的應(yīng)用程序來(lái)了解這個(gè)框架可以做什么。
JHipster是什么?
JHipster支持前端的React、Vue和Angular。它通過(guò)技術(shù)藍(lán)圖上的插件支持包括Svelte在內(nèi)的其他框架。在后端,Spring Boot起著重要的作用。在這方面,JHipster與Hilla框架類似,但有一個(gè)更雄心勃勃的目標(biāo),即支持多種前端技術(shù)棧。本質(zhì)上,JHipster是一個(gè)高級(jí)構(gòu)建工具,統(tǒng)一了Java和JavaScript構(gòu)建工具鏈,并將各種管理功能分層。
除了支持全棧應(yīng)用程序之外,JHipster還支持構(gòu)建微服務(wù)組件,并為基于JPA的關(guān)系數(shù)據(jù)存儲(chǔ)和NoSQL數(shù)據(jù)存儲(chǔ)(如MongoDB和Cassandra)提供了腳手架。它還具有日志記錄和分析功能。
JHipster的工具集包括命令行和領(lǐng)域特定語(yǔ)言(DSL),其中包含可視化數(shù)據(jù)建模器和基于web的構(gòu)造函數(shù)器(想想Spring的初始化器)。我們通過(guò)命令行開(kāi)始JHipster的使用。請(qǐng)注意,你需要安裝最新版本的Java、Node.js、Git。
JHipster示例應(yīng)用程序
按照J(rèn)Hipster快速啟動(dòng)指南,需安裝generator-jhipster NPM包,并創(chuàng)建一個(gè)新目錄來(lái)運(yùn)行生成器,你會(huì)看到圖1所示的交互式對(duì)話操作畫面。
圖1 Generator-JHipser構(gòu)建
你可以選擇接受大多數(shù)的默認(rèn)設(shè)置。但在本例中,將使用MongoDB作為數(shù)據(jù)庫(kù),并將React作為前端框架(可以選擇任何反映你心情的Bootswatch主題)。一旦設(shè)置了這些選項(xiàng),JHipster會(huì)完成構(gòu)建工作,并在剛剛創(chuàng)建的目錄中出現(xiàn)一個(gè)新的應(yīng)用程序代碼。
構(gòu)建并運(yùn)行應(yīng)用程序
JHipster已分別生成了Java和JavaScript應(yīng)用程序。后端使用Maven構(gòu)建,前端使用webpack構(gòu)建。可以同時(shí)運(yùn)行這兩部分的程序來(lái)啟動(dòng)整個(gè)應(yīng)用程序。(請(qǐng)記住,還需要同時(shí)在后臺(tái)運(yùn)行MongoDB)
在shell中,輸入:./mvn -P-webapp。此命令將構(gòu)建并運(yùn)行Java后端。我們使用-P-webapp避免讓Maven運(yùn)行webpack部分的內(nèi)容。
在另一個(gè)shell中,輸入:npm start。此命令將構(gòu)建前端并在webpack的開(kāi)發(fā)模式下運(yùn)行,通過(guò)API調(diào)用剛剛啟動(dòng)的Java服務(wù)。
如果一切順利,將在localhost:8080上看到圖2所示的頁(yè)面。
圖2 JHipster的歡迎頁(yè)面
創(chuàng)建測(cè)試用戶
如果看一下應(yīng)用程序目錄,你會(huì)發(fā)現(xiàn)JHipster生成器的輸出遠(yuǎn)遠(yuǎn)超過(guò)你常用的生成工具,包括功能性用戶管理功能和基于JWT的身份驗(yàn)證功能。該應(yīng)用程序還具有默認(rèn)帳戶,可使用該帳戶創(chuàng)建測(cè)試用戶。
首先,請(qǐng)使用系統(tǒng)頁(yè)面右上角的Register選項(xiàng)創(chuàng)建新用戶。然后,創(chuàng)建一個(gè)測(cè)試用戶(test@test.com),最后轉(zhuǎn)到登錄頁(yè)面并選擇默認(rèn)的admin/admin用戶。登錄后,導(dǎo)航到用戶管理頁(yè)面(管理->用戶管理)。請(qǐng)注意,新用戶已在列表中。你可以通過(guò)“非活動(dòng)”按鈕切換為“活動(dòng)”來(lái)激活測(cè)試用戶,然后可用測(cè)試用戶身份登錄。請(qǐng)注意,此測(cè)試用戶無(wú)法訪問(wèn)管理控制臺(tái)。
正如前面所說(shuō),JHipster有很多現(xiàn)成的功能。JHipster不僅支持React和MongoDB,而且還支持Angular、Vue以及大多數(shù)的SQL和NoSQL數(shù)據(jù)存儲(chǔ)。
代碼探索
為了支持所有這些功能,JHipster包含了很多的代碼。幸運(yùn)的是,這些基本上是最新的代碼,并且遵循了編程最佳實(shí)踐。例如,React代碼使用功能組件,利用Hooks,并針對(duì)集中式的存儲(chǔ)Redux運(yùn)行。
查看應(yīng)用程序目錄,將看到如下結(jié)構(gòu):
?/foundry-jhipster/
o/webpack/ : Config/utils for the webpack bundle
o/src/main/
?/java/ : Java sources
?/webapp/ : Front-end sources
o/target/ : Output directory for both builds
?/webapp/ : Front-end build output
?/java/ : Back-end build output
?/docker/ : Files to support containerization
Java應(yīng)用程序的入口是src/main/java/com/mycompany/myapp/JhipsterApp.java。它本質(zhì)上是一個(gè)Spring Boot web應(yīng)用程序,可以通過(guò)--spring.profiles.active=your-active-profile命令進(jìn)行配置。
通過(guò)Spring Security執(zhí)行身份驗(yàn)證和授權(quán),開(kāi)箱即用的Java應(yīng)用程序本質(zhì)上是用戶CRUD(創(chuàng)建、讀取、更新和刪除)功能的API。Spring Security系統(tǒng)可在/myapp/Security中配置。請(qǐng)記住,JHipster使用的是JSON Web令牌,所以支持它的類代碼位于/security/jwt中。
應(yīng)用程序的域模型在/domain目錄中定義,與前端/entities目錄相對(duì)應(yīng)。通過(guò)查看package.json,可查找可用的前端腳本。除了現(xiàn)在使用的dev-mode命令外,還包括mongodb prune命令、測(cè)試和生產(chǎn)構(gòu)建命令。
客戶端入口位于/src/main/webapp/index.html,但真正的運(yùn)行位于/sec/main/webapp/app/app.tsx,這里定義了承擔(dān)各種頁(yè)面組件的應(yīng)用程序路由(路由在router.tsx中定義)。
可以在main/webapp/app/modules中找到應(yīng)用程序的頁(yè)面組件。例如,在/home/home.tsx有主頁(yè)頁(yè)面的定義。
在/main/webapp/app/shared目錄中,可以找到整個(gè)應(yīng)用程序使用的代碼。其中大部分用于集中式存儲(chǔ),如model 定義和reducers。目前,應(yīng)用程序只處理用戶,因此只有這些組件和身份驗(yàn)證代碼位于共享目錄中。
在/entities文件夾中,包含建模實(shí)體的代碼。但請(qǐng)注意,用戶模型存儲(chǔ)在共享目錄中。但目前還沒(méi)有實(shí)體(entities),所以接下來(lái)必須添加一些。
定義模型:JDL和JDL Studio
JDL是JHipster用于定義應(yīng)用程序模型的領(lǐng)域特定語(yǔ)言。JDL所做的遠(yuǎn)遠(yuǎn)不止于使用JDL元數(shù)據(jù)定義整個(gè)應(yīng)用程序,但我們將重點(diǎn)關(guān)注模型。
首先,讓我們使用JHipster的在線工具JDL-Studio為域模型快速生成一些CRUD功能。你將看到一個(gè)實(shí)體關(guān)系生成器,如圖3所示。
圖3 JDL編譯器
JDL builder支持定義實(shí)體及其屬性,以及它們之間的關(guān)系。你可以通過(guò)更改左側(cè)的實(shí)體定義并觀察它們顯示出來(lái)的表達(dá)方式來(lái)探索語(yǔ)法。
點(diǎn)擊頁(yè)面右上角的【下載此JDL源代碼】按鈕來(lái)下載已定義好的實(shí)體。(請(qǐng)注意,工具欄中有多個(gè)選項(xiàng)用于相關(guān)的配置)
獲得文件后,通過(guò)命令行轉(zhuǎn)到項(xiàng)目根目錄下,在命令行鍵入jhipster jdl my jdl file.jdl,其中是my-jdl-file.jdl是剛剛導(dǎo)出的文件的名稱。
將會(huì)提示您是否要覆蓋這些文件。選擇是,則繼續(xù)構(gòu)建。完成后,可以重新啟動(dòng)服務(wù)器,并查看添加到應(yīng)用程序的內(nèi)容。在瀏覽器上以9000的端口上再次打開(kāi)應(yīng)用程序,然后以admin/admin登錄。
現(xiàn)在,當(dāng)打開(kāi)導(dǎo)航欄中的Entities菜單項(xiàng)時(shí),你將看到所有剛導(dǎo)入的實(shí)體,以及一個(gè)可完全控制的控制臺(tái)來(lái)管理它們。例如,您可以創(chuàng)建一個(gè)新的“Country”實(shí)體,然后創(chuàng)建一個(gè)新的“Location”實(shí)體,并在Location實(shí)體中引用新創(chuàng)建的Country實(shí)體。請(qǐng)注意,所有CRUD功能都在這里。
監(jiān)測(cè)和API管理
幾個(gè)附加功能對(duì)于管理員用戶來(lái)說(shuō),值得關(guān)注。Administration菜單包括一個(gè)Metrics選項(xiàng),可以深入了解正在運(yùn)行的JVM特性,如圖4所示。有關(guān)其監(jiān)視功能的更多信息,請(qǐng)參閱JHipster文檔。
圖4 使用JVM指標(biāo)監(jiān)視JHipster應(yīng)用程序
JHipster還為其后臺(tái)端生成OpenAPI/Swagger風(fēng)格的定義,以及一個(gè)用于交互的簡(jiǎn)單控制臺(tái)。圖5展示了API管理頁(yè)面。
圖5 通過(guò)API管理頁(yè)面與后臺(tái)端交互
JHipster提供了一個(gè)靈活的體系結(jié)構(gòu),允許不同的數(shù)據(jù)存儲(chǔ)和前端框架??偠灾?,這是一個(gè)令人印象深刻的框架。
譯者介紹
涂承燁,51CTO社區(qū)編輯,信息系統(tǒng)項(xiàng)目管理師、信息系統(tǒng)監(jiān)理師、PMP,某省綜合性評(píng)標(biāo)專家,擁有15年的開(kāi)發(fā)經(jīng)驗(yàn)。對(duì)項(xiàng)目管理、前后端開(kāi)發(fā)、微服務(wù)、架構(gòu)設(shè)計(jì)、物聯(lián)網(wǎng)、大數(shù)據(jù)等較為關(guān)注。目前就職于壹體技術(shù)有限公司,從事較大型項(xiàng)目管理工作。
原文標(biāo)題:??Intro to JHipster: A full-stack framework for Java and JavaScript??,作者:Matthew Tyson