业务域
业务域逻辑上是一个 namespace ,用于划分资源作用域,并使资源可以按业务域粒度分发和复用。而当自定义代码需要被部署和调用时,业务域又将成为物理上存在的微服务,以分布式的方式提供服务。
Trantor 业务域为标准 maven 工程。因为模型(Model)可能会被其他maven模块依赖,同时还有模块间的服务调用。所以推荐分为api、impl、runtime三个maven子模块。
- 工程结构如下:
trantor-example-module├── example-module-api│ ├── pom.xml│ ├── src│ │ └── main│ │ ├── java│ │ │ └── io│ │ │ └── terminus│ │ │ └── trantor│ │ │ └── example│ │ │ ├── ext│ │ │ │ └── StaffNumberRuleExt.java│ │ │ ├── func│ │ │ │ └── CreateStaffFunc.java│ │ │ └── model│ │ │ └── Staff.java│ │ └── resources│ │ └── trantor.yml├── example-module-impl│ ├── pom.xml│ ├── src│ │ ├── main│ │ │ ├── java│ │ │ │ └── io│ │ │ │ └── terminus│ │ │ │ └── trantor│ │ │ │ └── example│ │ │ │ ├── ext│ │ │ │ │ └── impl│ │ │ │ │ └── StaffNumberRuleExtImpl.java│ │ │ │ └── func│ │ │ │ └── impl│ │ │ │ └── CreateStaffFuncImpl.java│ │ │ └── resources│ │ │ └── trantor│ │ │ └── resources│ │ │ └── example_module│ │ │ ├── example_module-menu-item.json│ │ │ └── view│ │ │ ├── StaffCreate.view.ts│ │ │ └── StaffCreate.view.xml├── example-module-runtime│ ├── pom.xml│ ├── src│ │ ├── main│ │ │ ├── java│ │ │ │ └── io│ │ │ │ └── terminus│ │ │ │ └── trantor│ │ │ │ └── example│ │ │ │ └── ModuleApplication.java│ │ │ └── resources│ │ │ └── application.yml└── pom.xmlapi 模块
在线创建
首先需要在线创建一个业务域

创建好业务域之后同样在线的方式生成模型 、字典、逻辑流 、可编排服务 等可供其他模块依赖的资源。
接着将在线创建的资源部署到 Maven 仓库。

部署完成后会弹窗显示该资源对应的依赖:
<dependency> <groupId>io.terminus.erp</groupId> <artifactId>gaia_erp</artifactId> <version>2.2.1-SNAPSHOT</version></dependency>代码创建
api 模块主要放置 业务域、模型 、字典、逻辑流 、可编排服务 等可供其他模块依赖的资源。(当我们选择在线创建这些资源的时候,业务代码中则不需要创建该 api 模块。)
因为在定义 trantor 资源时会用到 trantor 相关 api,所以我们需要在 pom.xml 中添加相关依赖。
<dependency> <groupId>io.terminus.trantor</groupId> <artifactId>trantor-api</artifactId></dependency>trantor 将业务域的定义抽象为了更易于理解的 yaml 文件,所以我们可以在 api 模块的resources目录中添加 trantor.yml
product: key: example_project_product version: 0.0.1-SNAPSHOTmodule: key: example_module name: example_module packageName: io.terminus.trantor.example version: 0.0.1-SNAPSHOT description: Trantor module example业务域定义见参数详情
impl 模块
impl 模块主要放置 视图、逻辑流 、可编排服务 等逻辑实现以及启动类。
因为在该模块中会有具体的逻辑实现,所以我们需要再 pom.xml 中添加 api 模块的依赖。
<dependency> <groupId>io.terminus.trantor.examples</groupId> <artifactId>example-module-api</artifactId> <version>${project.version}</version></dependency>最后引入trantor-sdk依赖
<dependency> <groupId>io.terminus.trantor</groupId> <artifactId>trantor-sdk</artifactId></dependency>runtime 模块
因为 Trantor 的业务域本质上来说还是一个 SpringBoot,所以我们还需要添加application.yml和Main Class
- Application.yml
trantor: mainModule: example_module # tranotr.yml 中定义的业务域 key- Main Class
@SpringBootApplicationpublic class ExampleApplication { public static void main(String[] args) { SpringApplication.run(ExampleApplication.class, args); }}因为在该模块中会有 Trantor 业务域的启动,所以我们需要再 pom.xml 中添加 impl 以及 trantor-runtime 的依赖。
<dependency> <groupId>io.terminus.trantor.examples</groupId> <artifactId>example-module-impl</artifactId> <version>${project.version}</version></dependency><dependency> <groupId>io.terminus.trantor</groupId> <artifactId>trantor-runtime</artifactId></dependency>内嵌业务域
Trantor 业务域一般来说对应一个部署单元,考虑到有一些轻量级的附属业务域,为了方便部署和代码管理,允许在一个主业务域中,同时内嵌多个子业务域。 主业务域为必选业务域,内嵌的子业务域可以在启动时通过配置改变其启用状态。 业务域正常启动完成后,在交付控制台上会看到多个业务域,但是在运行时,对子业务域的调用都会路由到同一个 JVM。
- Application.yml
trantor: mainModule: example_module # 当前业务域下 trantor.yml 中定义的业务域 key embedModules: - moduleA # 对应业务域下 trantor.yml 中定义的业务域 key - moduleB # 对应业务域下 trantor.yml 中定义的业务域 key enabledModuleKeys: moduleA,moduleB # 本次启用的内嵌模块 key ,多个之间用逗号分隔常见问题
- 将 trantor.yml 中的业务域 key 修改后,其他关联资源(
*-view.xml、*-menu-item.json等)的 key 没有改,导致资源找不到。trantor key 规则