本系列文章演示如何用JHipster生成一個微服務架構風格的應用棧。
環境需求:安裝好JHipster開發環境的CentOS 7.4(參考這裏)
應用棧名稱:appstack
認證微服務: uaa
業務微服務:microservice1
網關微服務:gateway
實體名:role
主機IP:192.168.220.120html
進入appstack/microservice1目錄,輸入命令後回車:前端
$ cd appstack/microservice1/ $ jhipster
選擇生成的微服務類型
這是一個單選題,有4個選項,使用上下鍵切換選項。
這裏選擇Microservice application
,全部自定義業務邏輯的微服務均可以選擇這個類型。java
單擊回車繼續。mysql
輸入微服務的名稱
默認名稱是當前目錄名microservice1
,也能夠本身輸入名稱。
注意:名稱只能是大小寫字母,數字和下劃線的任意組合,不容許任何其它字符。git
單擊回車繼續。github
輸入微服務的端口號
默認端口號是8081
,也能夠本身輸入端口號,注意不要和別的微服務和進程的端口號衝突。spring
單擊回車繼續。sql
輸入微服務的java包名
根據整個應用棧的目錄層級,這裏輸入包名com.mycompany.appstack
。
注意:包名要符合Java標準規範的要求。docker
單擊回車繼續。數據庫
選擇一個服務發現組件
這是一個單選題,有3個選項,使用上下鍵切換選項。
根據微服務體系規劃,這裏選擇JHipster Registry
。
單擊回車繼續。
選擇使用的認證類型
這是一個單選題,有3個選項,使用上下鍵切換選項。
根據微服務體系規劃,這裏選擇Authentication with JHipster UAA server (the server must be generated separately)
。
單擊回車繼續。
輸入uaa微服務所在的路徑
這是一個相對於microservice1的相對路徑,默認路徑是../uaa
,這就是咱們以前生成uaa工程的目錄所在;若是以前生成的uaa目錄名是myuaa,那麼這裏要輸入../myuaa
。
注意:這個問題和上一個問題(1.6)的選擇有關聯性,上一個問題的不一樣選擇,會致使後續不一樣問題的出現。
單擊回車繼續。
選擇使用的數據庫類型
這是一個單選題,有4個選項,使用上下鍵切換選項。
能夠看到支持的數據庫類型不少,這裏選擇默認選項SQL
。
單擊回車繼續。
選擇生產環境中使用的數據庫
這是一個單選題,有5個選項,使用上下鍵切換選項。
能夠看到目前支持5種SQL數據庫,這裏選擇默認選項MySQL
。
單擊回車繼續。
選擇開發環境中使用的數據庫
這是一個單選題,有3個選項,使用上下鍵切換選項。
H2調試起來簡單,但爲了和生產環境保持一致性,這裏選擇MySQL
。
單擊回車繼續。
是否須要使用Spring Cache?
這是一個單選題,有5個選項,使用上下鍵切換選項。
根據實際場景須要,能夠選擇不一樣緩存組件;這裏簡單起見,選擇No - Warning, when using an SQL database, this will disable the Hibernate 2nd level cache!
。
單擊回車繼續。
選擇使用Maven仍是Gradle來構建微服務
這是一個單選題,有2個選項,使用上下鍵切換選項。
根據本身的開發環境須要,選擇相應的構建工具,這裏選擇默認選項Maven
。
單擊回車繼續。
選擇須要用到的技術組件
這是一個多選題,有4個選項,使用上下鍵切換選項,使用空格鍵選中選項,使用a鍵全選,使用i鍵取消全選。
根據本身的技術架構規劃,選擇相應的技術組件,也能夠都不選擇。
單擊回車繼續。
是否須要國際化支持?
默認選擇是Y
,若是不須要,輸入n
;這裏選擇默認選項Y
。
單擊回車繼續。
選擇國際化支持中的母語
這是一個單選題,有37個選項,使用上下鍵切換選項。
注意:這個問題和上一個問題(1.14)的選擇有關聯性,上一個問題若是選擇n
,這個問題不會出現。
單擊回車繼續。
選擇國際化支持中的其它語言
這是一個多選題,有37個選項,使用上下鍵切換選項,使用空格鍵選中選項,使用a鍵全選,使用i鍵取消全選。
根據本身的業務規劃,選擇相應的語言,也能夠都不選擇。
單擊回車繼續。
選擇單元測試工具
這是一個多選題,有2個選項,使用上下鍵切換選項,使用空格鍵選中選項,使用a鍵全選,使用i鍵取消全選。
根據本身的技術架構規劃,選擇相應的技術組件,也能夠都不選擇。
單擊回車繼續。
是否須要從JHipster市場中安裝其它的開發工具?
默認選擇是N
,若是須要啓用,輸入y
;這裏選擇默認選項N
。
單擊回車繼續。
這個過程,根據電腦性能和網速的不一樣,一般須要1-3分鐘。
至此,生成業務微服務工程代碼成功完成。能夠在appstack/microservice1目錄下查看全部生成的文件。
接下來,建立一個實體表role,並生成相關的後端代碼。
在開始以前,一般須要先把數據庫設計完成,通常狀況下不須要手工添加id字段,JHipster默認會生成一個自增的int類型的id主鍵。
進入microservice1目錄,輸入命令後回車:
$ cd microservice1/ $ jhipster entity role
是否須要添加一個字段到實體?
默認選擇是Y
,若是不須要添加,輸入n
;這裏選擇默認選項Y
。
單擊回車繼續。
輸入字段名
這裏輸入第一個字段名roleName
,字段名要符合以前所選擇的數據庫的命名規範。
注意:這個問題和上一個問題(2.1)的選擇有關聯性,上一個問題若是選擇n,這個問題不會出現。
單擊回車繼續。
選擇字段類型
這是一個單選題,有12個選項,使用上下鍵切換選項。
根據你的數據庫設計,選擇相應類型,這裏選擇String
類型。
單擊回車繼續。
是否須要爲這個字段添加規則?
默認選擇是N
,若是須要添加,輸入y
;這裏選擇默認選項N
。
單擊回車繼續。
是否須要繼續添加字段?
成功添加完一個字段後,從新回到了第一個問題(2.1)。若是選擇Y
,會重複2.1 ~ 2.4的過程;若是選擇n
,則進入新的問題;這裏輸入n
。
單擊回車繼續。
是否須要添加一個與別的實體的關聯關係?
默認選擇是Y
,若是不須要添加,輸入n
;由於目前尚未生成別的實體,這裏輸入n
。
單擊回車繼續。
是否須要使用獨立的service層來封裝業務邏輯?
這是一個單選題,有3個選項,使用上下鍵切換選項。
三個選項的意思分別是不用service層,使用service類,使用service接口和實現類;這裏選擇Yes, generate a separate service class
。
單擊回車繼續。
是否須要使用DTO?
這是一個單選題,有2個選項,使用上下鍵切換選項。
若是選擇No, use the entity directly
,可能會帶來一些先後端耦合和傳輸效率的問題;因此這裏選擇[BETA] Yes, generate a DTO with MapStruct
,雖然仍是BETA版本,但實際項目中使用沒出現什麼問題。
單擊回車繼續。
是否須要添加篩選功能?
這是一個單選題,有2個選項,使用上下鍵切換選項。
若是選擇添加篩選功能,代碼中會添加JPA動態查詢的邏輯,但實際代碼還須要手動修改,也許未來新版本會不斷完善這個功能;這裏爲了簡單起見,選擇Not needed
。
單擊回車繼續。
是否須要分頁功能?
這是一個單選題,有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
若是一切正常,命令行會輸出成功信息:
在命令行,任意目錄下,啓動一個mysql容器;若是本地沒有mysql:5的鏡像,容器啓動時會自動去docker store下載鏡像。
$ docker container run --name microservice1-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 32700:3306 mysql:5
經過客戶端鏈接上剛啓動的數據庫容器,添加一個名爲microservice1
的schema。微服務啓動時會自動在這個schema裏面建立數據表。
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
參數指定的值保持一致。
$ cd microservice1/ $ vi src/main/resources/config/application-dev.yml # 修改數據庫鏈接相關配置 spring: datasource: url: jdbc:mysql://localhost:32700/microservice1?useUnicode=true&characterEncoding=utf8&useSSL=false username: root password: my-secret-pw
進入microservice1目錄,輸入命令後回車:
$ cd microservice1/ $ mvn -Pdev package
若是一切正常,命令行會輸出構建成功信息:
進入microservice1目錄,輸入命令後回車:
$ nohup ./target/microservice-1-0.0.1-SNAPSHOT.war &
經過tail命令,查看啓動日誌:
$ tail -f nohup.out
若是一切正常,日誌會輸出啓動成功信息:
啓動完成後,能夠經過瀏覽器訪問http://192.168.220.120:8761
,登陸名和密碼默認都是admin
:
能夠看到在Instances Registered區域,microservice1已經註冊。
注意:選擇生成Microservice application
類型的微服務時,不會生成前端資源,這也符合微服務架構的設計思想;若是須要生成微服務中實體(role)的前端資源,會在網關微服務中生成。
JHipster生成微服務架構的應用棧(一)- 準備工做
JHipster生成微服務架構的應用棧(二)- 認證微服務示例
JHipster生成微服務架構的應用棧(三)- 業務微服務示例
JHipster生成微服務架構的應用棧(四)- 網關微服務示例
JHipster生成微服務架構的應用棧(五)- 容器編排示例