项目启动流程说明
Boot 工程介绍
用于管理 core 项目的实例,包含:core 的启动、停止、升级等。
Boot 启动流程

❶ boot 工程,通过启动子进程的方式,启动 core 实例。
❷ 临时目录,boot 和 core 进行数据交换,为操作系统临时目录。
❸ core 工程,通过读临目录来完成相应的动作。
项目架构概述
项目采用了启动器与核心应用分离的架构设计,主要包含以下核心模块:
-
niucloud-boot: 项目启动器模块,负责环境验证、进程管理和核心应用的启动
-
niucloud-core: 核心业务模块,包含基础框架和通用功能
-
niucloud-addon: 插件模块集合,包含各类业务插件(如秒杀、团购、充值等)
-
niucloud-web-app: Web 应用模块,包含 Spring Boot 主应用和 Web 接口
启动架构分析
项目采用了"启动器 + 核心应用"的双层启动架构:
-
启动器层 :由
niucloud-boot模块实现,负责环境验证和核心应用的生命周期管理 -
核心应用层 :由
niucloud-web-app模块实现,包含 Spring Boot 主应用和所有业务功能
启动器模块 (niucloud-boot)
启动器的主入口类为 Boot.java,位于 niucloud-boot 模块中:
package com.niu.boot;
import com.niu.boot.config.BootConfig;
import com.niu.boot.process.EnvironmentValidator;
import com.niu.boot.process.ProcessMonitor;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
public class Boot {
public static void main(String[] args) {
BootConfig bootConfig = new BootConfig(args, "boot.yml");
EnvironmentValidator environmentValidator = EnvironmentValidator.getInstance(bootConfig);
if (environmentValidator.checkEnvironment()) {
if (!environmentValidator.checkJreUsable()) {
System.out.println("当前Java环境是:" + bootConfig.getJavaVersion() + ",请安装Java17的运行环境.");
System.exit(0);
}
if (!environmentValidator.readAppEnv()) {
System.out.println("请在 [" + bootConfig.getAppEnvPath() + "] 文件中进行配置.");
System.exit(0);
}
if (!environmentValidator.checkMysqlUsable()) {
System.out.println("请在 [" + bootConfig.getAppEnvPath() + "] 文件中进行配置, MySQL连接.");
System.exit(0);
}
if (!environmentValidator.checkRedisUsable()) {
System.out.println("请在 [" + bootConfig.getAppEnvPath() + "] 文件中进行配置, Redis连接.");
System.exit(0);
}
}
for (String arg: args) {
if (arg.equals("--install-addon")) {
try (RandomAccessFile raf = new RandomAccessFile("install_addon.dat", "rw");
FileChannel channel = raf.getChannel()) {
MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, 100);
buffer.put("install-addon".getBytes());
} catch (Exception e) {
}
}
}
bootConfig.printArguments();
new ProcessMonitor(bootConfig).start();
Runtime.getRuntime().addShutdownHook(new ProcessMonitor.Shutdown());
}
}
核心应用模块 (niucloud-web-app)
核心应用的主入口类为 WebAppApplication.java,位于 niucloud-web-app 模块中:
package com.niu.app;
import com.niu.app.common.context.SpringBeanNameGenerator;
import com.niu.app.common.loader.PluginBufferingApplicationStartup;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
@EnableAsync
@EnableScheduling
@MapperScan(basePackages = {"com.*.**.mapper.*", "com.niu.*.mapper"})
启动器核心组件
BootConfig
-
功能:加载和管理启动器配置
-
主要职责:
解析命令行参数、加载 boot.yml 配置文件、提供配置信息访问接口
EnvironmentValidator
-
功能:环境验证器
-
主要职责:
-
检查 Java 环境版本(要求 Java 17)
-
验证应用配置文件(application-prod.yml)的存在性
-
检查 MySQL 数据库连接可用性
-
检查 Redis 连接可用性
-
ProcessMonitor
-
功能:进程监控和管理
-
主要职责:
-
启动和监控核心应用进程
-
管理核心应用的生命周期
-
处理启动、停止、重启等命令
-
实现进程间通信(通过命名管道)
-
ProcessManager
-
功能:进程管理具体实现
-
主要职责:
-
执行核心应用的启动命令
-
监控核心应用的运行状态
-
处理插件安装、升级等特殊事件
-
实现自动重启机制
-
核心应用关键注解说明
| 注解 | 作用 |
|---|---|
@SpringBootApplication |
标识这是一个 Spring Boot 应用的主类 |
@EnableAsync |
启用异步方法支持 |
@EnableScheduling |
启用定时任务支持 |
@MapperScan |
扫描 MyBatis Mapper 接口 |
@ComponentScan |
扫描组件并注册到 Spring 容器 |
@Slf4j |
提供日志记录功能 |
启动架构核心功能
-
环境验证:启动器验证 Java 环境、数据库连接等必要条件
-
进程管理:启动器负责核心应用的启动、监控和重启
-
插件支持 :通过
PluginBufferingApplicationStartup支持插件的加载和监控 -
进程通信:启动器与核心应用通过命名管道进行通信
-
生命周期管理:实现完整的应用生命周期管理(启动、运行、停止)
目录结构
niucloud-b2b2c-java/
├── admin/ # admin端前端源代码
│ ├── public/ # 静态资源目录
│ │ ├── ueditor/ # 百度富文本编辑器资源
│ │ └── niucloud.ico # 网站图标
│ ├── src/ # 源代码目录
│ │ ├── addon/ # 插件相关前端代码
│ │ │ ├── mall/ # 商城插件模块
│ │ │ │ ├── api/ # 插件API接口
│ │ │ │ ├── assets/ # 插件资源文件
│ │ │ │ ├── lang/ # 插件语言包
│ │ │ │ └── views/ # 插件视图组件
│ │ │ └── supply/ # 供应链插件模块
│ │ │ ├── api/ # 插件API接口
│ │ │ ├── assets/ # 插件资源文件
│ │ │ ├── lang/ # 插件语言包
│ │ │ └── views/ # 插件视图组件
│ │ ├── app/ # 应用核心代码
│ │ │ ├── api/ # API接口定义
│ │ │ ├── assets/ # 静态资源目录
│ │ │ ├── components/ # Vue公共组件
│ │ │ ├── lang/ # 语言包
│ │ │ └── views/ # 视图组件
│ │ ├── components/ # Vue公共组件
│ │ ├── lang/ # 语言包
│ │ ├── layout/ # 布局组件
│ │ ├── router/ # 路由配置
│ │ ├── stores/ # Pinia状态管理
│ │ ├── styles/ # 样式文件
│ │ ├── types/ # TypeScript类型定义
│ │ ├── utils/ # 工具函数
│ │ ├── App.vue # Vue根组件
│ │ ├── main.ts # TypeScript入口文件
│ │ └── vite-env.d.ts # Vite环境类型声明
│ ├── .env.development # 开发环境变量配置
│ ├── .env.production # 生产环境变量配置
│ ├── .eslintrc.json # ESLint配置
│ ├── .gitignore # Git忽略配置
│ ├── index.html # HTML入口文件
│ ├── package-lock.json # npm包锁定文件
│ ├── package.json # npm项目配置文件
│ ├── postcss.config.cjs # PostCSS配置
│ ├── publish.cjs # 发布脚本
│ ├── README.md # 前端项目说明文档
│ ├── tailwind.config.cjs # Tailwind CSS配置
│ ├── tsconfig.json # TypeScript配置
│ ├── tsconfig.node.json # Node.js环境TypeScript配置
│ └── vite.config.ts # Vite构建配置
├── niucloud-addon/ # 插件模块集合
│ ├── mall/ # 商城插件
│ │ ├── src/ # 源代码
│ │ └── pom.xml # Maven配置
│ ├── supply/ # 供应链插件
│ ├── src/ # 源代码
│ └── pom.xml # Maven配置
│ └── pom.xml # 插件模块集合配置
├── niucloud-boot/ # niucloud框架启动模块
│ ├── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── niu/
│ │ └── boot/
│ │ ├── config/ # 启动配置
│ │ │ └── BootConfig.java # 引导配置类
│ │ ├── dto/ # 数据传输对象
│ │ │ └── UpgradeDTO.java # 升级相关DTO
│ │ ├── process/ # 进程管理
│ │ │ ├── AddonRollback.java # 插件回滚处理
│ │ │ ├── EnvironmentValidator.java # 环境验证
│ │ │ ├── ProcessManager.java # 进程管理器
│ │ │ └── ProcessMonitor.java # 进程监控
│ │ ├── utils/ # 工具类
│ │ └── Boot.java # 应用启动入口
│ └── resources/
│ └── boot.yml # 启动配置文件
│ └── pom.xml # Maven模块配置
├── niucloud-core/ # niucloud框架核心业务模块,所有的核心业务都在这个模块内实现
│ ├── .mvn/
│ │ └── wrapper/ # Maven包装器
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── niu/
│ │ └── core/
│ │ ├── common/ # 通用功能
│ │ │ ├── Constants.java # 常量定义
│ │ │ ├── annotation/ # 自定义注解
│ │ │ ├── component/ # 核心组件
│ │ │ ├── config/ # 配置类
│ │ │ ├── domain/ # 领域模型
│ │ │ ├── enums/ # 枚举类
│ │ │ ├── exception/ # 异常类
│ │ │ ├── loader/ # 加载器
│ │ │ └── utils/ # 工具类
│ │ ├── consts/ # 常量定义
│ │ ├── controller/ # 控制器层
│ │ │ ├── adminapi/ # 管理后台API
│ │ │ ├── api/ # 前端用户API
│ │ │ ├── core/ # 核心系统API
│ │ │ └── siteapi/ # 站点API
│ │ ├── entity/ # 实体类
│ │ ├── enums/ # 业务枚举
│ │ ├── event/ # 事件处理
│ │ ├── job/ # 定时任务
│ │ ├── listener/ # 监听器
│ │ ├── mapper/ # 数据访问层
│ │ ├── service/ # 服务层
│ │ ├── upgrade/ # 升级处理
│ │ └── WebAppApplication.java # Spring Boot应用入口
│ └── resources/
│ ├── META-INF/ # 元信息
│ │ └── spring.factories # Spring工厂配置
│ └── core/ # 核心资源
│ ├── config/ # 配置文件
│ ├── generator/ # 代码生成器
│ ├── i18n/ # 国际化资源
│ ├── lib/ # 外部依赖库
│ ├── loader/ # 加载器配置
│ ├── static/ # 静态资源
│ └── upgrade/ # 升级脚本
│ ├── mvnw # Maven脚本
│ ├── mvnw.cmd # Maven脚本(Windows)
│ └── pom.xml # Maven模块配置
├── niucloud-web-app/ # niucloud框架web application模块
│ ├── src/
│ └── main/ # 主要源代码
│ ├── mvnw # Maven脚本
│ ├── mvnw.cmd # Maven脚本(Windows)
│ └── pom.xml # Maven配置
├── uni-app/ # 前端手机端源代码
│ ├── src/ # 源代码
│ │ ├── addon/ # 插件相关代码
│ │ ├── app/ # 应用核心
│ │ ├── components/ # Vue组件
│ │ ├── hooks/ # Vue Hooks
│ │ ├── layouts/ # 布局组件
│ │ ├── locale/ # 国际化
│ │ ├── payment/ # 支付模块
│ │ ├── stores/ # 状态管理
│ │ ├── styles/ # 样式文件
│ │ ├── types/ # 类型定义
│ │ ├── utils/ # 工具函数
│ │ ├── App.vue # Vue根组件
│ │ ├── main.js # 入口文件
│ │ ├── manifest.json # uni-app配置
│ │ ├── pages.json # 页面配置
│ │ ├── tabbar.json # 底部导航配置
│ │ └── uni.scss # uni-app全局样式
│ ├── .babelrc # Babel配置
│ ├── .env.development # 开发环境变量
│ ├── .env.production # 生产环境变量
│ ├── .gitignore # Git忽略配置
│ ├── index.html # HTML入口
│ ├── package-lock.json # npm包锁定
│ ├── package.json # npm配置
│ ├── publish.cjs # 发布脚本
│ ├── tsconfig.json # TypeScript配置
│ ├── vite.config.ts # Vite配置
│ └── windi.config.ts # Windi CSS配置
├── web/ # 前端PC端源代码
│ ├── addon/ # 插件前端
│ │ ├── mall/ # 商城插件前端
│ ├── app/ # 应用核心
│ │ ├── api/ # API接口定义
│ │ ├── lang/ # 语言包
│ │ ├── pages/ # 页面组件
│ │ └── router.options.ts # 路由配置选项
│ ├── assets/ # 公共资源
│ │ ├── images/ # 图片资源
│ │ └── styles/ # 样式文件
│ ├── components/ # 公共组件
│ │ ├── icon/ # 图标组件
│ │ ├── login-dialog/ # 登录弹窗组件
│ │ ├── sidebar/ # 侧边栏组件
│ │ ├── upload-file/ # 文件上传组件
│ │ └── sms-code/ # 短信验证码组件
│ ├── composables/ # 组合式函数
│ ├── env/ # 环境配置
│ │ ├── .env.dev # 开发环境
│ │ └── .env.product # 生产环境
│ ├── lang/ # 国际化语言
│ │ ├── en/ # 英文
│ │ └── zh-cn/ # 中文
│ ├── layouts/ # 页面布局
│ │ ├── default/ # 默认布局
│ │ ├── container.vue # 容器布局
│ │ └── default.vue # 默认布局组件
│ ├── middleware/ # 中间件
│ ├── plugins/ # 插件配置
│ ├── public/ # 静态资源
│ │ └── favicon.ico # 网站图标
│ ├── stores/ # Pinia状态管理
│ │ ├── app.ts # 应用状态
│ │ ├── config.ts # 配置状态
│ │ ├── member.ts # 会员状态
│ │ └── system.ts # 系统状态
│ ├── types/ # 类型定义
│ │ └── global.d.ts # 全局类型
│ ├── utils/ # 工具函数
│ │ ├── common.ts # 通用工具
│ │ ├── language.ts # 语言工具
│ │ ├── request.ts # 请求工具
│ │ ├── storage.ts # 存储工具
│ │ └── test.ts # 测试工具
│ ├── .gitignore # Git忽略配置
│ ├── .npmrc # npm配置
│ ├── app.vue # Vue根组件
│ ├── nuxt.config.ts # Nuxt配置
│ ├── package-lock.json # npm包锁定
│ ├── package.json # npm配置
│ ├── publish.cjs # 发布脚本
│ ├── README.md # 项目说明
│ ├── tsconfig.json # TypeScript配置
│ └── windi.config.ts # Windi CSS配置
├── webroot/ # 生产环境应用发布模块 (在生产环境,只要把这个目录和下面的文件发布到服务器,就可以了)
│ ├── addon/ # 插件目录
│ │ ├── mall/ # 商城插件
│ │ ├── supply/ # 供应链插件
│ │ └── readme.md # 说明文档
│ ├── jar/ # JAR包目录
│ │ ├── addon/ # 插件JAR包
│ │ ├── application-prod.yml # 生产环境应用程序配置文件
│ │ ├── application.yml # 应用程序配置文件
│ │ ├── web-app-boot-exec.jar # niucloud-web-app打包后的jar文件
│ │ └── web-app-exec.jar # Web应用JAR包
│ ├── logs/ # 日志目录
│ ├── public/ # 静态资源目录
│ │ ├── admin/ # 管理后台静态资源
│ │ └── wap/ # 移动端静态资源
│ ├── niucloud.bat # Windows启动脚本
│ └── niucloud.sh # Linux启动脚本
├── install_addon.dat # 插件安装数据文件
├── mvnw # Maven包装器脚本(Linux)
├── mvnw.cmd # Maven包装器脚本(Windows)
├── package-lock.json # npm包锁定文件
├── pom.xml # Maven主项目配置文件
├── README.en.md # 英文README文档
└── README.md # 中文README文档