跳转至

OBPM 后端架构总览

OBPM(myApps 低代码平台)后端是基于 Spring Boot 3.3.5 + Java 17 + Spring Cloud 2023.0.3 的微服务系统,源码位于 trunk2018/java(Maven 多模块工程,groupId com.teemlink,版本 5.x.nightbuild)。平台提供表单/视图/流程/报表的设计、运行与管理能力,支持多种服务发现(Consul / Eureka / Nacos)与多种部署形态(微服务、WAR、Lite 单体)。

本文是 design/java/ 的总览主文档:

专题文档 内容
[[module-dependency]] 模块分层依赖矩阵、每模块职责、Feign 服务间调用
[[service-discovery-variants]] consul/eureka/nacos/war 四类变体差异、主类清单、配置链

核心机制专题(动态表单、工作流引擎、workspace 存储等)见 design/ 上级目录的既有文档([[../dyna-form]]、[[../workspace-structure-and-mechanism]] 等)。


1. 技术栈

类别 选型
语言 / 运行时 Java 17
框架 Spring Boot 3.3.5、Spring Cloud 2023.0.3、Spring Cloud OpenFeign
服务发现 Consul(默认)、Eureka、Nacos(按部署变体选择)
注册中心健康检查 /actuator/health(management.endpoints.web.exposure.include=health,metrics)
数据库 MySQL 5.7+ / Oracle / PostgreSQL / SQL Server / KingBase / OceanBase(每表单字段类型有多数据库 DAO 实现)
连接池 Druid(com.alibaba.druid)
缓存 两级:Caffeine(一级)+ Redis(二级),由 myapps.cache.provider 选择(redis / caffeine)
消息 ActiveMQ(spring.activemq.broker-url=tcp://localhost:61616)
AI(obpm-ai) LangChain4j 1.3.0(open-ai、community-dashscope)、Qwen3、Milvus/Lucene 向量存储、HanLP
报表 ureport3(源码内嵌模块)、DynamicReports 6.0.0
文档转换 Aspose(obpm-converter)
SQL 解析 ANTLR 生成的解析器(obpm-sqlparser,cn.myapps.sqlparser.codegen.SqlBase*)

2. 微服务拆分与端口

以各 *-consul 变体的 application.properties 实际值为准(server.port 与 server.servlet.context-path):

服务 spring.application.name 端口 Context Path 职责
网关 obpm-gateway 8080 / API 网关,路由分发(见 §3)
设计器 obpm-designer 8082 /designer 表单/视图/流程/报表设计,设计内容以 XML 落盘 workspace
运行时 obpm-runtime 8083 /obpm 发布应用的运行时服务
消息 obpm-message 8084 /message 消息推送与通知
知识管理 obpm-kms 8085 /kms KMS 知识管理(企业网盘等)
文件转换 obpm-converter 8086 /converter 文件格式转换(Aspose)
管理中心 obpm-manager 8087 /manager 创建域/部门/用户,为域分配软件
用户中心 obpm-usercenter 8088 /usercenter 用户管理(不能独立使用)
定时任务 obpm-job 8089 /job 定时任务(Quartz,quartz.properties)
认证 obpm-signon 8010 /signon 用户认证、授权、单点登录
日志 obpm-logger 8020 /logger 日志收集
Lite 单体 obpm-lite 8888 — 轻量单体部署(聚合全部服务,见 §4.3)

注意:端口以本文为准;trunk2018/java/CLAUDE.md 中记载的部分端口(如 signon 8085、kms 8084)与源码实际配置不一致。

3. 网关路由

网关(obpm-gateway-consul/src/main/resources/application.properties)采用 Spring Cloud Gateway:

显式路由(4 条):

路径谓词 目标
Path=/signon/** lb://obpm-signon
Path=/obpm/** lb://obpm-runtime
Path=/kms/** lb://obpm-kms
Path=/message/** lb://obpm-message

发现定位器:spring.cloud.gateway.discovery.locator.enabled=true —— 其余服务(designer、manager、job、converter、logger、usercenter 等)通过 Consul 服务发现自动按默认规则(/{service-name}/**)路由,与各服务的 context-path 约定一致。

默认过滤器:PreserveHostHeader。

4. 部署形态

4.1 微服务(默认)

每个服务选择一种服务发现变体(*-consul / *-eureka / *-nacos)独立进程运行,通过网关 8080 统一入口访问。变体差异详见 [[service-discovery-variants]]。

4.2 WAR 部署

*-war 模块打包为 war(packaging=war),主类继承 SpringBootServletInitializer(如 obpm-runtime-war 的 RuntimeApp)。WAR 变体内置 ConsulListener:以 @ConditionalOnConsulEnabled 判断,若类路径存在 Consul 则在容器启动完成后手动触发 ConsulAutoServiceRegistration.start() 完成注册——即 WAR 部署在外部 Tomcat 时仍可接入 Consul 服务发现。

4.3 Lite 单体(obpm-lite)

LiteApp(obpm-lite/src/main/java/cn/myapps/run/LiteApp.java)单进程聚合全部业务模块:

  • @ComponentScan 覆盖 cn.myapps.common/core/designtime/job/kms/logger/manager/message/runtime/signon/usercenter/report/ai/converter 等全部包
  • **默认不依赖**服务发现、MQ、Redis(可通过 application.properties 开启)
  • 服务间调用不再走注册中心:Feign 客户端通过 ${myapps.feign.lite.url:} 直连本进程 HTTP 端口(见 [[module-dependency]] §3)
  • 启动流程:Environment.init(args) → AsposeUtil.ensureMacOsLocaleForAspose()(macOS 下 Aspose 兼容)→ SpringApplicationBuilder.run

obpm-upgrade 依赖 obpm-lite,为系统升级工具。

5. 分层架构

graph TD
    subgraph 变体层["部署变体(薄壳:主类 + 注册中心依赖 + 配置)"]
        CONSUL["*-consul"] --- EUREKA["*-eureka"] --- NACOS["*-nacos"] --- WAR["*-war"]
    end
    subgraph 业务服务层["业务服务(可独立部署)"]
        RUNTIME[runtime 运行时]
        DESIGNER[designer 设计器]
        SIGNON[signon 认证]
        KMS[kms 知识管理]
        MESSAGE[message 消息]
        MANAGER[manager 管理中心]
        USERCENTER[usercenter 用户中心]
        JOB[job 定时任务]
        CONVERTER[converter 文件转换]
        LOGGER[logger 日志]
        REPORT[report 报表]
        AI[ai AI 服务]
    end
    subgraph 核心层
        CORE["core(runtime/dynaform、workflow、designtime、authtime 等核心库)"]
        COMMON["common(工具类、常量、application-base.properties)"]
        SQLPARSER["sqlparser(ANTLR SQL 解析,独立)"]
    end
    LITE["lite(单体聚合,依赖全部业务服务)"]
    UPGRADE["upgrade(升级工具,依赖 lite)"]

    CONSUL & EUREKA & NACOS & WAR --> 业务服务层
    RUNTIME & DESIGNER & KMS & MANAGER & JOB & REPORT & USERCENTER & AI --> CORE
    SIGNON & MESSAGE & CONVERTER & LOGGER --> COMMON
    CORE --> COMMON
    LITE --> 业务服务层
    UPGRADE --> LITE

依赖矩阵与每模块职责详见 [[module-dependency]]。

6. 核心包结构(obpm-core)

obpm-core/src/main/java/cn/myapps/core/
  runtime/            # 运行时核心
    dynaform/         #   动态表单系统
      document/       #     文档管理(DQL 解析器、多数据库 DAO)
      form/           #     表单字段与表单处理
    workflow/         #   工作流引擎(storage 存储实现)
    log/ logger/      #   日志
    scheduler/        #   调度
    widget/ print/ report/ mobile/ macro/ counter/ comment/ callback/ common/
  designtime/         # 设计时服务(application 应用管理、form 表单设计服务)
  authtime/           # 认证授权(user、department、domain 多租户域)
  datamodel/          # 数据模型
  common/             # 通用 DAO 接口、数据模型
  init/               # 初始化(InitApplicationTable 动态表初始化)
  scheduler/ support/ util/ web/ constans/

关键架构模式:

  1. Process 工厂模式:ProcessFactory 为各实体创建进程实例;标准命名 *Process 接口 + *ProcessBean 实现(如 DocumentProcess、UserProcess、DepartmentProcess)。
  2. 动态表单系统:表单对应运行时动态表,每种数据库有独立 DAO 实现(Mysql*DAO、Oracle*DAO、PostgreSQL*DAO…);表单结构由 FormTableProcess / FormDesignTimeService 管理。
  3. 基于域的多租户:Domain 实体(cn.myapps.core.authtime.domain),每域拥有独立的应用与用户集。
  4. 设计态文件存储:设计定义以 JAXB XML 存于 {myapps.storage.root}/workspace,Designer 写盘、Runtime 缓存读取 + url.index 热加载,详见 [[../workspace-structure-and-mechanism]]。

7. 配置管理链

obpm-common/src/main/resources/application-base.properties   # 基础配置(日志、eureka 客户端、feign 超时、缓存、MQ 等)
        ↓ spring.config.import: optional:application-base.properties
各服务 application.yml(提示不要覆盖此文件中的属性)
        ↓
各变体 application.properties(端口、context-path、myapps.storage.root 等)
        ↓ Environment.init(args) 启动时覆盖(存储根路径解析等)

myapps.storage.root(默认示例 C:\storage)决定 workspace 与日志位置:日志写入 ${myapps.storage.root}/logs/service/{app}@{ip}_{port}.log(单文件 200MB,保留 7 天)。

8. 构建与运行

操作 命令
构建指定变体 mvn clean package -Dmaven.test.skip=true -pl obpm-runtime-consul -am
Lite 安装 mvn clean install -Dmaven.test.skip=true -pl obpm-lite -am
单个服务运行 各 *-consul 模块 run.bat / debug.bat
H2 DAO 测试 mvn test -Dtest=H2DocStaticTblDAOTest_Simple -pl obpm-core(或根目录 run-h2-dao-tests.sh)

环境搭建与源码导读见 source-code-development-guid/(环境搭建、web/service 源码解读)。