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 |