JHipster生成微服务架构的应用栈(三)- 业务微服务示例
本系列文章演示如何用JHipster生成一個微服務架構風格的應用棧。
環境需求:安裝好JHipster開發環境的CentOS 7.4(參考這里)
應用棧名稱:appstack
認證微服務: uaa
業務微服務:microservice1
網關微服務:gateway
實體名:role
主機IP:192.168.220.120
1 生成業務微服務的工程代碼
進入appstack/microservice1目錄,輸入命令后回車:
$ cd appstack/microservice1/ $ jhipster命令行輸出JHipster啟動信息
現在開始問答環節
1.1 Which type of application would you like to create?
選擇生成的微服務類型
這是一個單選題,有4個選項,使用上下鍵切換選項。
這里選擇Microservice application,所有自定義業務邏輯的微服務都可以選擇這個類型。
單擊回車繼續。
1.2 What is the base name of your application?
輸入微服務的名稱
默認名稱是當前目錄名microservice1,也可以自己輸入名稱。
注意:名稱只能是大小寫字母,數字和下劃線的任意組合,不允許任何其它字符。
單擊回車繼續。
1.3 As you are running in a microservice architecture, on which port would like your server to run? It should be unique to avoid port conflicts.
輸入微服務的端口號
默認端口號是8081,也可以自己輸入端口號,注意不要和別的微服務和進程的端口號沖突。
單擊回車繼續。
1.4 What is your default Java package name?
輸入微服務的java包名
根據整個應用棧的目錄層級,這里輸入包名com.mycompany.appstack。
注意:包名要符合Java標準規范的要求。
單擊回車繼續。
1.5 Which service discovery server do you want to use?
選擇一個服務發現組件
這是一個單選題,有3個選項,使用上下鍵切換選項。
根據微服務體系規劃,這里選擇JHipster Registry。
單擊回車繼續。
1.6 Which type of authentication would you like to use?
選擇使用的認證類型
這是一個單選題,有3個選項,使用上下鍵切換選項。
根據微服務體系規劃,這里選擇Authentication with JHipster UAA server (the server must be generated separately)。
單擊回車繼續。
1.7 What is the folder path of your UAA application?
輸入uaa微服務所在的路徑
這是一個相對于microservice1的相對路徑,默認路徑是../uaa,這就是我們之前生成uaa工程的目錄所在;如果之前生成的uaa目錄名是myuaa,那么這里要輸入../myuaa。
注意:這個問題和上一個問題(1.6)的選擇有關聯性,上一個問題的不同選擇,會導致后續不同問題的出現。
單擊回車繼續。
1.8 Which type of database would you like to use?
選擇使用的數據庫類型
這是一個單選題,有4個選項,使用上下鍵切換選項。
可以看到支持的數據庫類型很多,這里選擇默認選項SQL。
單擊回車繼續。
1.9 Which production database would you like to use?
選擇生產環境中使用的數據庫
這是一個單選題,有5個選項,使用上下鍵切換選項。
可以看到目前支持5種SQL數據庫,這里選擇默認選項MySQL。
單擊回車繼續。
1.10 Which development database would you like to use?
選擇開發環境中使用的數據庫
這是一個單選題,有3個選項,使用上下鍵切換選項。
H2調試起來簡單,但為了和生產環境保持一致性,這里選擇MySQL。
單擊回車繼續。
1.11 Do you want to use the Spring cache abstraction?
是否需要使用Spring Cache?
這是一個單選題,有5個選項,使用上下鍵切換選項。
根據實際場景需要,可以選擇不同緩存組件;這里簡單起見,選擇No - Warning, when using an SQL database, this will disable the Hibernate 2nd level cache!。
單擊回車繼續。
1.12 Would you like to use Maven or Gradle for building the backend?
選擇使用Maven還是Gradle來構建微服務
這是一個單選題,有2個選項,使用上下鍵切換選項。
根據自己的開發環境需要,選擇相應的構建工具,這里選擇默認選項Maven。
單擊回車繼續。
1.13 Which other technologies would you like to use?
選擇需要用到的技術組件
這是一個多選題,有4個選項,使用上下鍵切換選項,使用空格鍵選中選項,使用a鍵全選,使用i鍵取消全選。
根據自己的技術架構規劃,選擇相應的技術組件,也可以都不選擇。
單擊回車繼續。
1.14 Would you like to enable internationalization support?
是否需要國際化支持?
默認選擇是Y,如果不需要,輸入n;這里選擇默認選項Y。
單擊回車繼續。
1.15 Please choose the native language of the application
選擇國際化支持中的母語
這是一個單選題,有37個選項,使用上下鍵切換選項。
注意:這個問題和上一個問題(1.14)的選擇有關聯性,上一個問題如果選擇n,這個問題不會出現。
單擊回車繼續。
1.16 Please choose additional languages to install
選擇國際化支持中的其它語言
這是一個多選題,有37個選項,使用上下鍵切換選項,使用空格鍵選中選項,使用a鍵全選,使用i鍵取消全選。
根據自己的業務規劃,選擇相應的語言,也可以都不選擇。
單擊回車繼續。
1.17 Besides JUnit and Jest, which testing frameworks would you like to use?
選擇單元測試工具
這是一個多選題,有2個選項,使用上下鍵切換選項,使用空格鍵選中選項,使用a鍵全選,使用i鍵取消全選。
根據自己的技術架構規劃,選擇相應的技術組件,也可以都不選擇。
單擊回車繼續。
1.18 Would you like to install other generators from the JHipster Marketplace?
是否需要從JHipster市場中安裝其它的開發工具?
默認選擇是N,如果需要啟用,輸入y;這里選擇默認選項N。
單擊回車繼續。
問答結束,開始生成工程代碼
這個過程,根據電腦性能和網速的不同,通常需要1-3分鐘。
至此,生成業務微服務工程代碼成功完成。可以在appstack/microservice1目錄下查看所有生成的文件。
2 生成業務微服務的實體代碼
接下來,創建一個實體表role,并生成相關的后端代碼。
在開始之前,通常需要先把數據庫設計完成,一般情況下不需要手工添加id字段,JHipster默認會生成一個自增的int類型的id主鍵。
進入microservice1目錄,輸入命令后回車:
命令行輸出實體已創建
現在開始創建字段
2.1 Do you want to add a field to your entity?
是否需要添加一個字段到實體?
默認選擇是Y,如果不需要添加,輸入n;這里選擇默認選項Y。
單擊回車繼續。
2.2 What is the name of your field?
輸入字段名
這里輸入第一個字段名roleName,字段名要符合之前所選擇的數據庫的命名規范。
注意:這個問題和上一個問題(2.1)的選擇有關聯性,上一個問題如果選擇n,這個問題不會出現。
單擊回車繼續。
2.3 What is the type of your field?
選擇字段類型
這是一個單選題,有12個選項,使用上下鍵切換選項。
根據你的數據庫設計,選擇相應類型,這里選擇String類型。
單擊回車繼續。
2.4 Do you want to add validation rules to your field?
是否需要為這個字段添加規則?
默認選擇是N,如果需要添加,輸入y;這里選擇默認選項N。
單擊回車繼續。
2.5 Do you want to add a field to your entity?
是否需要繼續添加字段?
成功添加完一個字段后,重新回到了第一個問題(2.1)。如果選擇Y,會重復2.1 ~ 2.4的過程;如果選擇n,則進入新的問題;這里輸入n。
單擊回車繼續。
2.6 Do you want to add a relationship to another entity?
是否需要添加一個與別的實體的關聯關系?
默認選擇是Y,如果不需要添加,輸入n;因為目前還沒有生成別的實體,這里輸入n。
單擊回車繼續。
2.7 Do you want to use separate service class for your business logic?
是否需要使用獨立的service層來封裝業務邏輯?
這是一個單選題,有3個選項,使用上下鍵切換選項。
三個選項的意思分別是不用service層,使用service類,使用service接口和實現類;這里選擇Yes, generate a separate service class。
單擊回車繼續。
2.8 Do you want to use a Data Transfer Object (DTO)?
是否需要使用DTO?
這是一個單選題,有2個選項,使用上下鍵切換選項。
如果選擇No, use the entity directly,可能會帶來一些前后端耦合和傳輸效率的問題;所以這里選擇[BETA] Yes, generate a DTO with MapStruct,雖然還是BETA版本,但實際項目中使用沒出現什么問題。
單擊回車繼續。
2.9 Do you want to add filtering?
是否需要添加篩選功能?
這是一個單選題,有2個選項,使用上下鍵切換選項。
如果選擇添加篩選功能,代碼中會添加JPA動態查詢的邏輯,但實際代碼還需要手動修改,也許將來新版本會不斷完善這個功能;這里為了簡單起見,選擇Not needed。
單擊回車繼續。
2.10 Do you want pagination on your entity?
是否需要分頁功能?
這是一個單選題,有3個選項,使用上下鍵切換選項。
第2個選項適合Web UI,第3個選項適合Mobile UI;這里選擇Yes, with pagination links。
單擊回車繼續。
問答結束,開始生成實體代碼
這個過程中會提示與已有文件有沖突,需要選擇處理方式,提示的輸入選項是Ynaxdh,說明如下:
Y: yes (Default) n: no a: yes to this question and all others (or always yes). x: abort (exit) d: show the differences between the old and the new file h: help, list all options這里選擇a;
單擊回車。業務微服務的實體代碼生成只包括后端代碼,過程會比較快,通常1-2分鐘就能完成。
至此,生成實體代碼成功完成。可以執行maven測試命令來驗證整個工程代碼(如果生成工程代碼時選擇的構建工具是Maven)
$ mvn test如果一切正常,命令行會輸出成功信息:
3 業務微服務的數據庫配置
3.1 啟動一個數據庫容器
在命令行,任意目錄下,啟動一個mysql容器;如果本地沒有mysql:5的鏡像,容器啟動時會自動去docker store下載鏡像。
$ docker container run --name microservice1-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 32700:3306 mysql:53.2 在數據庫中創建schema
通過客戶端連接上剛啟動的數據庫容器,添加一個名為microservice1的schema。微服務啟動時會自動在這個schema里面創建數據表。
3.3 修改微服務的數據庫配置
spring.datasource.url中的端口號32700,與步驟2.1中-p參數指定的值保持一致。
spring.datasource.url中的schema名稱microservice1,與步驟2.2中添加的schema名稱保持一致。
spring.datasource.password的值my-secret-pw,與步驟2.1中MYSQL_ROOT_PASSWORD參數指定的值保持一致。
4 業務微服務的構建和啟動
4.1 構建
進入microservice1目錄,輸入命令后回車:
$ cd microservice1/ $ mvn -Pdev package如果一切正常,命令行會輸出構建成功信息:
4.2 啟動
進入microservice1目錄,輸入命令后回車:
$ nohup ./target/microservice-1-0.0.1-SNAPSHOT.war &通過tail命令,查看啟動日志:
$ tail -f nohup.out如果一切正常,日志會輸出啟動成功信息:
4.3 注冊到JHipster Registry
啟動完成后,可以通過瀏覽器訪問http://192.168.220.120:8761,登錄名和密碼默認都是admin:
可以看到在Instances Registered區域,microservice1已經注冊。
注意:選擇生成Microservice application類型的微服務時,不會生成前端資源,這也符合微服務架構的設計思想;如果需要生成微服務中實體(role)的前端資源,會在網關微服務中生成。
系列文章
JHipster生成微服務架構的應用棧(一)- 準備工作
JHipster生成微服務架構的應用棧(二)- 認證微服務示例
JHipster生成微服務架構的應用棧(三)- 業務微服務示例
JHipster生成微服務架構的應用棧(四)- 網關微服務示例
JHipster生成微服務架構的應用棧(五)- 容器編排示例
你現在的氣質里,藏著你走過的路,讀過的書,愛過的人。
總結
以上是生活随笔為你收集整理的JHipster生成微服务架构的应用栈(三)- 业务微服务示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【技术短文】基于深度负相关学习的人群计数
- 下一篇: 阿里云获得SAP HANA 2T实例公共