JHipster领域语言 (JDL) - 应用程序配置

概要

  1. 语法
  2. 应用程序中的选项
  3. 示例
    1. 简单例子
    2. 多个应用
    3. 关联实体
    4. 配置项
  4. 微服务流程
  5. 详细完整示例
  6. 可用的应用程序配置选项
  7. 更多

语法

应用程序声明如下:

application {
  config {
    <application option name> <application option value>
  }
  [entities <application entity list>]
  [<options>]
}
  • 应用程序配置项(Key/Value)在config(必须在application内)下指定。
  • 您可以根据需要选择0个、1个或任何多个应用程序选项(只要它们有效)。
  • 将在应用程序内部生成的实体通过entities列出,这是在应用程序中生成实体推荐的方法。
    • 你可以不使用以上方法,但要在应用内生成实体必须执行以下操作:
      • 来自应用程序内的另一个JDL文件
      • 或使用CLI
  • 关键字entities是可选的: 如果不配置,文件中的每个实体都将在应用程序内部生成。
  • 应用程序可以有常规选项 (像 dtoservice) ,更多信息 下一节

应用程序中的选项

选项声明 (dtoserviceskipServer等) 在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 应用 dtoA, B and C
    • app2 应用 paginateC (因为有一个例外)
    • app3 应用 serviceE
    • 全局使用 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-scrollservice 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
  • 将生成四个实体
    • AB 在单体应用(monolith)中
    • CD 都在网关(gateway)中
      • C 在第一个微服务
      • D 在第二个微服务
  • 选项microserviceCD而言是隐式的
    • 由于它们是在两个微服务上生成的,因此默认情况下将设置此选项。
  • 选项的工作方式与以前相同

请注意,如果不存在默认值,则生成器将设置默认值(例如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’ 中,将生成实体 AC
  • 在 ‘secondMS’ 中,将生成实体B and C

C 之所以会同时生成,是因为如果没有微服务选项指定在何处生成该实体,将每个都生成。

如果您决定在单体应用中导入此JDL,则会生成每个实体(单体没有限制JDL中的选项)。

注意:如果要在两个不同的微服务中生成同一实体,则可以编写两个JDL文件 而不是每次更新JDL文件。

前面的示例不能这样写:

entity A
entity B
entity C
microservice * except B with firstMS
microservice * except A with secondMS

结果如下:

  • 在 ‘firstMS’ 中,仅有实体 C 被生成。
  • 在 ‘secondMS’ 中, 实体 BC 都会生成。

这是因为,在解析时,如果一个选项与另一个选项重叠,则后者优先。 您还可以使用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

更多

可用常规选项