JHipster領域語言 (JDL) - 應用程式設定
概要
語法
應用程式宣告如下:
application {
config {
<application option name> <application option value>
}
[entities <application entity list>]
[<options>]
}
- 應用程式設定項(Key/Value)在
config
(必須在application
內)下指定。 - 您可以根據需要選擇0個、1個或任何多個應用程式選項(只要它們有效)。
- 將在應用程式內部生成的實體透過
entities
列出,這是在應用程式中生成實體推薦的方法。- 你可以不使用以上方法,但要在應用內生成實體必須執行以下操作:
- 來自應用程式內的另一個JDL檔案
- 或使用CLI
- 你可以不使用以上方法,但要在應用內生成實體必須執行以下操作:
- 關鍵字
entities
是可選的: 如果不設定,檔案中的每個實體都將在應用程式內部生成。 - 應用程式可以有常規選項 (像
dto
或service
) ,更多訊息 下一節 。
應用程式中的選項
選項宣告 (dto
、service
、skipServer
等) 在JDL應用程式中受支援,但有一些規則。
假設我們有這樣的JDL檔案:
application {
config {
baseName app1
}
entities A, B, C
dto * with mapstruct
}
application {
config {
baseName app2
}
entities C, D
paginate * with pagination except D
}
application {
config {
baseName app3
}
entities * except A, B, C, D, F
service * with serviceClass
}
entity A
entity B
entity C
entity D
entity E
entity F
paginate * with infinite-scroll
在此範例中,我們可以看到:
- JDL檔案中有6個宣告的實體:
A, B, C, D, E and F
. - 有3個應用程式:
app1, app2 and app3
app1
使用A, B and C
app2
使用C and D
app3
使用E
(* except A, B, C, D, F
)
- 這些應用程式中的每一個都宣告了選項,並且還宣告了全域選項。
app1
應用dto
於A, B and C
app2
應用paginate
於C
(因為有一個例外)app3
應用service
於E
- 全域使用
pagination
(對每個實體有效)
這是檔案的生成方式:
app1
A
: 將使用paginate with infinite-scroll
(全域選項不會被本地選項覆蓋),並且dto with mapstruct
B
: 將使用相同的選項C
: 也使用相同的選項
app2
:C
: 將使用paginate with pagination
(而不是infinite-scroll
,因為本地優先)D
: 將使用paginate with infinite-scroll
因為上一個選項不包括D
app3
:E
: 將使用paginate with infinite-scroll
和service E with serviceClass
本範例說明了遮蔽原理。 全域選項受支援,並且將在每個已宣告的應用程式中使用,除非在應用程式中也宣告了選項。
另請注意,該片段摘自上一個範例 app3
:
entities * except A, B, C, D, F
service * with serviceClass
這基本上意味著app3
將僅使用E
,而應用程式的實體將使用『 service』選項,意思是E
,而不是 A - F
。
最後,存在不在任何應用程式中的『 F』實體,因此不會生成該實體。
注意:目前支援所有常規選項。
範例
簡單例子
application {
config {
baseName exampleApp
applicationType gateway
}
}
多個應用
application {
config {
baseName exampleApp1
applicationType microservice
serverPort 9001
}
}
application {
config {
baseName exampleApp2
applicationType microservice
serverPort 9002
}
}
application {
config {
baseName exampleApp3
applicationType gateway
serverPort 9000
}
}
關聯實體
application {
config {
baseName exampleApp1
applicationType microservice
serverPort 9001
}
entities A
}
application {
config {
baseName exampleApp2
applicationType microservice
serverPort 9002
}
entities * except A
}
entity A
entity B
entity C
設定項
application {
config {
baseName exampleApp1
applicationType microservice
serverPort 9001
}
entities A
dto A with mapstruct
}
application {
config {
baseName exampleApp2
applicationType microservice
serverPort 9002
}
entities * except A
paginate C with pagination
}
entity A
entity B
entity C
詳細完整範例
範例 1:
application {
config {
baseName myMonolith
applicationType monolith
}
entities * except C, D
}
application {
config {
baseName myGateway
applicationType gateway
serverPort 9042
}
entities * except A, B
}
application {
config {
baseName microserviceA
applicationType microservice
}
entities C
}
application {
config {
baseName microserviceB
applicationType microservice
serverPort 8082
}
entities D
}
entity A
entity B
entity C
entity D
dto * with mapstruct
service * with serviceClass
paginate D with pager
現在,生成這些應用程式和資料夾時將發生以下事件:
- 將建立四個應用程式:
- myMonolith 在
./myMonolith
資料夾中,並且設定服務器連接埠8080
- myGateway 在
./myGateway
資料夾中, 並且設定服務器連接埠9042
- microserviceA 在
./microserviceA
資料夾中,並且設定服務器連接埠8081
- 即使我們沒有指定伺服器端口,JHipster也會預設設定一個連接埠。
- 對於微服務,預設值是
8081
- 對於閘道器和單體應用而言,它是
8080
- microserviceB 在
./microserviceB
資料夾中,並且設定服務器連接埠8082
- myMonolith 在
- 將生成四個實體
A
和B
在單體應用(monolith)中C
和D
都在閘道器(gateway)中C
在第一個微服務D
在第二個微服務
- 選項
microservice
對C
和D
而言是隱式的- 由於它們是在兩個微服務上生成的,因此預設情況下將設定此選項。
- 選項的工作方式與以前相同
請注意,如果不存在預設值,則產生器將設定預設值(例如databaseType
)。JHipster Core可以為您做完全相同的事情。
範例 2: 存在設定項 請看 設定項一節.
微服務工作流程
處理微服務幾乎是一件棘手的事情,但是JDL為您提供了一些您認為合適的選項來處理您的實體。
使用 microservice <ENTITIES> with <MICROSERVICE_APP_NAME>
,您可以指定在哪個微服務中生成哪個實體。
參考以下設定為例:
entity A
entity B
entity C
microservice A with firstMS
microservice B with secondMS
給定兩個JHipster應用程式(’firstMS’和’secondMS’),如果在兩個應用程式中匯入JDL檔案,將獲得以下內容:
- 在 ‘firstMS’ 中,將生成實體
A
和C
。 - 在 ‘secondMS’ 中,將生成實體
B
andC
。
C
之所以會同時生成,是因為如果沒有微服務選項指定在何處生成該實體,將每個都生成。
如果您決定在單體應用中匯入此JDL,則會生成每個實體(單體沒有限制JDL中的選項)。
注意:如果要在兩個不同的微服務中生成同一實體,則可以編寫兩個JDL檔案 而不是每次更新JDL檔案。
前面的範例不能這樣寫:
entity A
entity B
entity C
microservice * except B with firstMS
microservice * except A with secondMS
結果如下:
- 在 ‘firstMS’ 中,僅有實體
C
被生成。 - 在 ‘secondMS’ 中, 實體
B
和C
都會生成。
這是因為,在解析時,如果一個選項與另一個選項重疊,則後者優先。 您還可以使用JDL建立整個微服務棧, 這篇部落格文章 有範例
可用的應用程式設定選項
這是JDL支援的應用程式選項:
不是您要找的,請檢視 常規選項。
JDL選項名稱 | 預設值 | 可選值 | 說明 |
---|---|---|---|
applicationType | monolith | monolith, microservice, gateway | |
authenticationType | jwt | jwt, session, oauth2 | jwt |
baseName | jhipster | ||
blueprint | Name of an additional blueprint (see Marketplace) | 已過時,字元型 | |
blueprints | 其他方案(Blueprint)的名稱 (可檢視 方案和模組市場) | ||
buildTool | maven | maven, gradle | |
cacheProvider | ehcache or hazelcast | caffeine, ehcache, hazelcast, infinispan, memcached, redis, no | ehcache用於單體和閘道器的,否則為hazelcast |
clientFramework | angularX | angularX, react | |
clientPackageManager | npm | npm, yarn | |
clientTheme | none | Something or none | 您可以輸入所需的任何值,前提是您知道它會起作用(例如Yeti)。 |
clientThemeVariant | Something or primary | 您可以輸入所需的任何值,前提是您知道它會起作用(例如深色或淺色),也可以為空 | |
databaseType | sql | sql, mongodb, cassandra, couchbase, no | |
devDatabaseType | h2Disk | h2Disk, h2Memory, * | * 生產用資料庫型別 |
dtoSuffix | DTO | DTO的字尾。 如果為空字串,則為false。 | |
enableHibernateCache | true | ||
enableSwaggerCodegen | false | ||
enableTranslation | true | ||
entitySuffix | 實體的字尾。 如果為空字串,則為false。 | ||
jhiPrefix | jhi | ||
languages | [en, fr] | Languages available in JHipster | 中括號必須有 |
messageBroker | false | kafka, false | |
nativeLanguage | en | JHipster支援的任何語言 | |
packageName | com.mycompany.myapp | 設定套件名選項 | |
prodDatabaseType | mysql | mysql, mariadb, mssql, postgresql, oracle, no | |
reactive | false | ||
searchEngine | false | elasticsearch, false | |
serverPort | 8080, 8081 or 9999 | 取決於應用程式型別 | |
serviceDiscoveryType | false | eureka, consul, no | |
skipClient | false | ||
skipServer | false | ||
skipUserManagement | false | ||
testFrameworks | [] | cypress, protractor, cucumber, gatling | 中括號必須有 |
websocket | false | spring-websocket, false |