JHipster生成微服務架構的應用棧(三)- 業務微服務示例

本系列文章演示如何用JHipster生成一個微服務架構風格的應用棧。
環境需求:安裝好JHipster開發環境的CentOS 7.4(參考這裏
應用棧名稱:appstack
認證微服務: uaa
業務微服務:microservice1
網關微服務:gateway
實體名:role
主機IP:192.168.220.120html

1 生成業務微服務的工程代碼

進入appstack/microservice1目錄,輸入命令後回車:前端

$ cd appstack/microservice1/
$ jhipster

命令行輸出JHipster啓動信息

如今開始問答環節

1.1 Which type of application would you like to create?

選擇生成的微服務類型
這是一個單選題,有4個選項,使用上下鍵切換選項。
這裏選擇Microservice application,全部自定義業務邏輯的微服務均可以選擇這個類型。java

單擊回車繼續。mysql

1.2 What is the base name of your application?

輸入微服務的名稱
默認名稱是當前目錄名microservice1,也能夠本身輸入名稱。
注意:名稱只能是大小寫字母,數字和下劃線的任意組合,不容許任何其它字符。git

單擊回車繼續。github

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,也能夠本身輸入端口號,注意不要和別的微服務和進程的端口號衝突。spring

單擊回車繼續。sql

1.4 What is your default Java package name?

輸入微服務的java包名
根據整個應用棧的目錄層級,這裏輸入包名com.mycompany.appstack
注意:包名要符合Java標準規範的要求。docker

單擊回車繼續。數據庫

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目錄,輸入命令後回車:

$ cd microservice1/
$ jhipster entity role

命令行輸出實體已建立

如今開始建立字段

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:5

3.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參數指定的值保持一致。

$ 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

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)的前端資源,會在網關微服務中生成。

源碼

jhi-example-appstack

系列文章

JHipster生成微服務架構的應用棧(一)- 準備工做
JHipster生成微服務架構的應用棧(二)- 認證微服務示例
JHipster生成微服務架構的應用棧(三)- 業務微服務示例
JHipster生成微服務架構的應用棧(四)- 網關微服務示例
JHipster生成微服務架構的應用棧(五)- 容器編排示例

相關文章
相關標籤/搜索