JeecgBoot 后端架构与技术栈全景导读 01

发布时间:2026/6/9 13:12:02

JeecgBoot 后端架构与技术栈全景导读 01 项目定位 AI 低代码平台前后端分离后端是 Spring Boot 3 / Spring Cloud Alibaba。技术栈主线 JDK 17、Spring Boot 3.5.5、Spring Cloud 2025、Spring Cloud Alibaba、MyBatis-Plus、Shiro、JWT、Druid、Nacos、Gateway。模块结构 - jeecg-boot-base-core 公共核心能力、配置、工具类、安全、MyBatis、Shiro。- jeecg-module-system 系统业务模块包含 API、业务实现、单体启动。- jeecg-boot-module 扩展业务模块如 demo、AI RAG。- jeecg-server-cloud 微服务版本包含 Gateway、Nacos、Cloud Start、监控等。项目定位JeecgBoot 是一个 企业级 AI 低代码开发平台 。核心特点- 基于 Spring Boot 3- 支持 Spring Cloud Alibaba 微服务架构- 使用 MyBatis-Plus 做持久层- 使用 Shiro JWT 做认证授权- 支持代码生成、在线表单、报表、大屏、流程、AI 应用、RAG 知识库等能力技术栈技术作用JDK 17Java 基础运行版本Spring Boot 3.5.5后端应用基础框架Spring Cloud 2025.0.0微服务体系Spring Cloud Alibaba整合 Nacos、Sentinel 等阿里微服务组件MyBatis-PlusORM / DAO 增强Druid数据库连接池、SQL 监控Shiro权限认证框架JWT无状态 Token 登录FastjsonJSON 数据处理Knife4j / Swagger在线接口文档MinIO / OSS文件对象存储XXL-JOB分布式任务调度Nacos注册中心、配置中心Gateway微服务网关Sentinel流量控制、熔断降级JimuReport积木报表、数据大屏能力maven多模块版本管理Maven 多模块项目通常由一个父工程管理多个子模块。以当前项目为例根工程是核心特点- 父工程通常是 pom 打包方式。- 父工程不直接写业务代码主要负责统一管理。- 子模块通过 modules 被父工程聚合。- 子模块可以继承父 POM 的版本、插件、依赖管理配置。- 多模块适合大型项目拆分例如公共模块、业务模块、启动模块、微服务模块。modules modulejeecg-boot-base-core/module modulejeecg-module-system/module modulejeecg-boot-module/module /modulesdependencyManagement !-- 版本管理区只定版本不引入包 -- dependencies !-- 管理 Spring Cloud 全家桶的版本 -- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-dependencies/artifactId version${spring-cloud.version}/version typepom/type !-- 这是一个版本清单文件 -- scopeimport/scope !-- 把这个版本清单导入进来 -- /dependency /dependencies /dependencyManagementproperties 存数字的「变量盒子」**dependencyManagement 用这些数字去「锁版本」的工具标签作用能不能单独锁版本properties定义变量存版本号数字❌ 不能dependencyManagement统一管理、锁定依赖版本✅ 能parent-project├── pom.xml├── common-module├── system-module├── business-module└── start-module聚合和继承Maven 多模块里最容易混淆的是- 聚合modules modulemodule-a/module modulemodule-b/module /modules作用- 让父工程一次性构建多个子模块。- 控制构建顺序。- 常用于根 POM。- 聚合关系主要影响“构建”。一句话聚合解决的是“我一次构建哪些模块”。- 继承parentgroupIdxxx/groupIdartifactIdparent/artifactIdversion1.0.0/version/parent作用- 子模块继承父 POM 的配置。- 可以继承依赖版本、插件版本、属性、仓库、编码配置等。- 继承关系主要影响“配置复用”。一句话继承解决的是“我复用谁的配置”。父工程├── 作为聚合器modules 管理子模块└── 作为父 POMparent 被子模块继承但它们不是一回事。一个模块可以- 被某个 POM 聚合但不继承它。- 继承某个父 POM但不被它聚合。- 既被聚合又继承父 POM。多继承严格来说Maven 不支持真正意义上的多继承。一个 pom.xml 只能有一个 parent 。因为 Maven 可以通过以下方式实现类似效果1. 父 POM 继承祖父 POM。2. 当前模块继承父 POM。3. 使用 dependencyManagement 导入多个 BOM。4. 使用 pluginManagement 管理插件版本。5. 使用 profile 做环境配置切换。Spring Boot Parent↑JeecgBoot Parent↑子模块JeecgBoot 根 POM 就继承了 Spring Boot Parent因此子模块间接获得了 Spring Boot Parent 的部分配置。依赖管理的特点dependencyManagementdependencies.../dependencies/dependencyManagement例如父 POM 写了dependencyManagementdependenciesdependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-spring-boot3-starter/artifactIdversion3.5.12/version/dependency/dependencies/dependencyManagement子模块不会自动拥有这个依赖。子模块还需要显式声明dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-spring-boot3-starter/artifactId/dependency此时可以省略版本号因为版本由父 POM 管理。一句话dependencyManagement 管版本不管引入。### dependencies 会直接引入依赖如果父 POM 直接写dependenciesdependency.../dependency/dependencies那么子模块通常会继承这些依赖。所以标签位置核心作用特点说明dependencies项目根下 /dependencyManagement内直接引入依赖当前模块 / 子模块生效声明后立即引入对应 jar 包所有子模块可直接继承dependencyManagement父 POM / 聚合工程根 POM统一管理依赖版本不实际引入依赖仅锁定版本、groupId、artifactId子模块使用时仍需在dependencies声明无需写版本pluginManagement父 POM / 聚合工程根 POM统一管理插件版本不实际启用插件仅锁定插件版本、坐标子模块需手动声明plugins才会生效plugins项目根下 /pluginManagement内直接启用并配置插件当前模块 / 子模块生效声明后插件立即执行可绑定生命周期、配置参数子模块可继承BOM 的作用dependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion2025.0.0/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagement作用- 批量管理一组依赖版本。- 避免每个依赖都手写版本。- 保证一整套框架版本兼容。JeecgBoot 中就导入了- Spring Cloud BOM- Spring Cloud Alibaba BOM一句话BOM 是一组依赖版本的清单。传递依赖A 依赖 BB 依赖 C那么 A 通常也会间接拥有 C。这就是传递依赖。优点- 减少重复声明。- 框架 starter 可以自动带入所需依赖。缺点- 容易引入你没意识到的 jar。- 容易出现版本冲突。- 可能带来安全漏洞。- 包体积变大。Maven 依赖冲突规则Maven 解决冲突主要有两个规则。如果同一个依赖出现多个版本项目├── A → C:1.0└── B → D → C:2.0Maven 会选 C:1.0 。因为 C:1.0 离项目更近。一句话谁路径短谁优先。路径一样时先声明优先如果路径长度一样项目├── A → C:1.0└── B → C:2.0如果 A 在 pom.xml 里写在 B 前面那么优先选择 C:1.0 。一句话路径一样谁先声明谁优先。依赖冲突解决异常名称含义最常见原因ClassNotFoundException运行时找不到类依赖没引入、jar 包未下载、打包漏包NoClassDefFoundError编译时有运行时没有依赖冲突、版本不兼容、类加载失败NoSuchMethodError找不到方法编译通过运行报错依赖版本不一致运行时版本和编译时不一样NoSuchFieldError找不到字段依赖版本冲突、类版本不匹配BeanCreationExceptionSpring 创建 Bean 失败Spring 组件版本不兼容、配置错误UnsatisfiedDependencyExceptionBean 依赖注入失败依赖缺失、Bean 未被 Spring 管理、循环依赖排查依赖冲突的方法- 看 POM依赖在哪里声明。- 看树依赖从哪里传进来。- 看版本最终使用哪个版本。- 看 scope运行时是否存在。- 看 exclusion是否误排除了依赖。- 看 effective-pom最终 Maven 配置是什么。项目单体到微服务转换项目里有云模式条件类JeecgCloudCondition.java这类配置通常用于判断当前是否启用 Cloud 模式。效果类似如果是单体模式加载本地调用相关 Bean如果是微服务模式加载 Cloud / Feign / Nacos 相关 Bean也就是说通过配置条件决定加载单体 Bean 还是微服务 Bean。

相关新闻