RuoYi-Vue-Plus开源项目:企业级多租户后台管理系统实战指南
RuoYi-Vue-Plus开源项目企业级多租户后台管理系统实战指南【免费下载链接】RuoYi-Vue-Plus多租户后台管理系统 重写RuoYi-Vue所有功能 集成 Sa-Token、Mybatis-Plus、WarmFlow、SpringDoc、Hutool、OSS 定期同步项目地址: https://gitcode.com/GitHub_Trending/ru/RuoYi-Vue-PlusRuoYi-Vue-Plus是基于Spring Boot 3.x和Vue3技术栈构建的企业级多租户后台管理系统它全面重写了RuoYi-Vue的所有功能并集成了Sa-Token、Mybatis-Plus、WarmFlow、SpringDoc等现代化技术栈。本文将从实战角度深入解析该项目的架构设计、核心功能模块配置要点帮助开发者快速掌握这一强大的企业级开发框架。项目架构深度解析模块化设计理念RuoYi-Vue-Plus采用了高度模块化的设计思想将系统拆分为多个独立的模块每个模块职责清晰便于维护和扩展。项目采用Maven多模块结构主要包含以下几个核心模块ruoyi-admin系统主模块包含启动类和Web层控制器ruoyi-common公共模块提供工具类、配置类和通用组件ruoyi-modules业务模块包含系统管理、工作流、代码生成等业务功能ruoyi-extend扩展模块提供监控管理、任务调度等扩展功能这种模块化设计使得系统具有良好的可扩展性开发者可以根据需要灵活添加或移除功能模块。技术栈选型优势与传统的RuoYi框架相比RuoYi-Vue-Plus在技术栈选择上进行了全面升级技术组件原RuoYi方案RuoYi-Vue-Plus方案优势分析权限认证Spring SecuritySa-Token JWT配置更简单功能更丰富支持注解式权限控制ORM框架MyBatis XMLMyBatis-Plus减少90%的SQL编写支持Lambda查询缓存框架Redis TemplateRedisson支持分布式锁、限流等高级特性接口文档SpringfoxSpringDoc基于OpenAPI 3.0支持JavaDoc自动生成文档文件存储本地存储MinIO OSS支持分布式存储云原生友好工作流无WarmFlow支持复杂审批流程可视化配置快速开始环境搭建与项目启动环境要求与准备在开始使用RuoYi-Vue-Plus之前需要确保开发环境满足以下要求JDK 17或更高版本Maven 3.6MySQL 8.0 / PostgreSQL / Oracle / SQL ServerRedis 6.0Node.js 16前端开发需要数据库初始化项目支持多种数据库这里以MySQL为例说明初始化步骤创建数据库并执行初始化脚本-- 创建数据库 CREATE DATABASE IF NOT EXISTS ruoyi-vue-plus DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 执行基础SQL脚本 source /path/to/ry_vue_5.X.sql; source /path/to/ry_job.sql; source /path/to/ry_workflow.sql;多租户数据表会自动在运行时创建无需手动初始化。后端项目配置项目的核心配置文件位于ruoyi-admin/src/main/resources/application.yml主要配置项包括# 数据库配置 spring: datasource: dynamic: primary: master datasource: master: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ruoyi-vue-plus?useUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLtrueserverTimezoneGMT%2B8 username: root password: 123456 # Redis配置 redis: redisson: config: | singleServerConfig: address: redis://127.0.0.1:6379 database: 0 password: connectionMinimumIdleSize: 10 connectionPoolSize: 32 # 多租户配置 tenant: enable: true ignore-tables: sys_config, sys_dict_type, sys_dict_data exclude-sql: SELECT 1项目启动与验证启动类位于ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java启动方式如下SpringBootApplication public class DromaraApplication { public static void main(String[] args) { SpringApplication application new SpringApplication(DromaraApplication.class); application.setApplicationStartup(new BufferingApplicationStartup(2048)); application.run(args); System.out.println((♥◠‿◠) RuoYi-Vue-Plus启动成功 ლ(´ڡლ)); } }启动成功后可以通过以下方式验证系统状态访问http://localhost:8080查看系统首页访问http://localhost:8080/doc.html查看API文档访问http://localhost:8080/druid查看数据库监控核心模块功能详解多租户架构实现RuoYi-Vue-Plus的多租户设计采用了数据库层面的隔离方案每个租户拥有独立的数据表前缀。系统通过TenantIgnore注解和租户ID拦截器实现数据隔离。租户配置示例// 租户实体类 Data EqualsAndHashCode(callSuper true) TableName(sys_tenant) public class SysTenant extends BaseEntity { TableId(value id, type IdType.INPUT) private String id; NotBlank(message 租户名称不能为空) Size(min 0, max 30, message 租户名称长度不能超过30个字符) private String tenantName; private String contactUserName; private String contactPhone; private String companyName; JsonFormat(pattern yyyy-MM-dd) private Date licenseExpireTime; private Integer accountCount; private String status; }租户数据隔离配置mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: logic-delete-field: delFlag logic-delete-value: 2 logic-not-delete-value: 0 mapper-locations: classpath*:mapper/**/*.xml # 多租户插件配置 tenant: column: tenant_id tables: - sys_user - sys_role - sys_dept权限管理系统系统采用Sa-Token作为权限认证框架支持细粒度的权限控制权限注解使用示例RestController RequestMapping(/system/user) public class SysUserController { SaCheckPermission(system:user:list) GetMapping(/list) public TableDataInfo list(SysUser user) { // 查询用户列表 } SaCheckRole(admin) SaCheckPermission(system:user:add) PostMapping public R add(Validated(AddGroup.class) RequestBody SysUser user) { // 添加用户 } }权限配置层级菜单权限控制页面访问权限按钮权限控制功能操作权限数据权限基于部门、角色等条件过滤数据接口权限基于注解的API访问控制工作流引擎集成系统集成了WarmFlow工作流引擎支持复杂的业务流程管理请假流程定义示例RestController RequestMapping(/workflow/instance) public class FlwInstanceController { Autowired private IFlwInstanceService instanceService; PostMapping(/start) public R start(RequestBody StartProcessDTO dto) { // 启动工作流实例 return R.ok(instanceService.startProcess(dto)); } PostMapping(/complete) public R complete(RequestBody CompleteTaskDTO dto) { // 完成任务 return R.ok(instanceService.completeTask(dto)); } }工作流支持的功能包括流程定义与部署流程实例管理任务审批与转办会签、或签、加签等复杂审批模式流程监控与统计代码生成器配置代码生成器是提高开发效率的重要工具RuoYi-Vue-Plus提供了强大的代码生成功能生成器配置示例RestController RequestMapping(/tool/gen) public class GenController extends BaseController { Autowired private IGenTableService genTableService; SaCheckPermission(tool:gen:list) GetMapping(/list) public TableDataInfo genList(GenTable genTable) { startPage(); ListGenTable list genTableService.selectGenTableList(genTable); return getDataTable(list); } SaCheckPermission(tool:gen:code) GetMapping(/code/{tableId}) public void code(PathVariable Long tableId) throws IOException { // 生成代码 byte[] data genTableService.generatorCode(tableId); // 下载代码 } }代码生成器支持的功能单表和多表代码生成支持多种模板引擎支持自定义模板支持多数据源代码生成自动生成前端Vue3代码高级配置与优化性能优化配置数据库连接池配置spring: datasource: hikari: minimum-idle: 10 maximum-pool-size: 20 idle-timeout: 30000 max-lifetime: 1800000 connection-timeout: 30000 validation-timeout: 5000Redis缓存优化spring: cache: type: redis redis: time-to-live: 60000 cache-null-values: false key-prefix: cache: use-key-prefix: true安全配置建议接口加密传输RestController RequestMapping(/api) ApiEncrypt public class EncryptController { PostMapping(/secure) public R secure(RequestBody EncryptField String data) { // 数据会自动解密 return R.ok(处理成功); } }敏感数据脱敏Data public class UserVO { Sensitive(strategy SensitiveStrategy.PHONE) private String phone; Sensitive(strategy SensitiveStrategy.ID_CARD) private String idCard; Sensitive(strategy SensitiveStrategy.EMAIL) private String email; }分布式部署配置集群会话同步sa-token: # token名称 token-name: satoken # token有效期单位s 默认30天 timeout: 2592000 # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 activity-timeout: -1 # 是否允许同一账号并发登录 is-concurrent: true # 在多人登录同一账号时是否共用一个token is-share: true # token风格 token-style: uuid # 是否输出操作日志 is-log: true分布式任务调度Component public class DistributedJob { XxlJob(demoJob) public void demoJob() { // 分布式任务执行逻辑 XxlJobHelper.log(分布式任务执行开始); // 分片参数 int shardIndex XxlJobHelper.getShardIndex(); int shardTotal XxlJobHelper.getShardTotal(); // 业务逻辑 XxlJobHelper.log(分片参数当前分片序号 {}, 总分片数 {}, shardIndex, shardTotal); XxlJobHelper.handleSuccess(); } }常见问题排查指南启动问题排查问题1数据库连接失败检查数据库服务是否启动验证数据库连接配置是否正确确认数据库用户权限问题2Redis连接失败检查Redis服务状态验证Redis配置信息确认网络连通性问题3端口被占用# 查看端口占用情况 netstat -tlnp | grep 8080 # 或使用lsof lsof -i:8080运行时问题排查问题1权限认证失败检查Sa-Token配置验证用户角色权限配置查看登录日志定位问题问题2多租户数据混乱检查租户ID是否正确传递验证数据表是否有tenant_id字段确认TenantIgnore注解使用是否正确问题3工作流审批异常检查流程定义是否正确部署验证审批人配置查看工作流日志性能问题优化数据库查询优化合理使用索引避免N1查询问题使用Mybatis-Plus的性能分析插件缓存策略优化合理设置缓存过期时间使用本地缓存减少Redis压力缓存穿透和雪崩防护生产环境部署建议Docker容器化部署项目提供了完整的Docker部署方案位于script/docker目录docker-compose.yml配置示例version: 3.8 services: mysql: image: mysql:8.0 container_name: ruoyi-mysql environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: ruoyi-vue-plus ports: - 3306:3306 volumes: - ./mysql/data:/var/lib/mysql - ./mysql/conf:/etc/mysql/conf.d redis: image: redis:7-alpine container_name: ruoyi-redis ports: - 6379:6379 volumes: - ./redis/data:/data - ./redis/conf/redis.conf:/usr/local/etc/redis/redis.conf ruoyi-app: build: . container_name: ruoyi-app depends_on: - mysql - redis ports: - 8080:8080 environment: - SPRING_PROFILES_ACTIVEprod监控与告警配置Spring Boot Admin监控spring: boot: admin: client: url: http://localhost:9090 instance: service-url: http://localhost:8080健康检查端点RestController RequestMapping(/actuator) public class HealthController { GetMapping(/health) public ResponseEntityHealth health() { // 自定义健康检查逻辑 return ResponseEntity.ok(Health.up().build()); } }日志管理策略Logback配置优化configuration property nameLOG_PATH value./logs/ property nameLOG_PATTERN value%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/ !-- 按天滚动日志 -- appender nameFILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_PATH}/application.log/file rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy fileNamePattern${LOG_PATH}/application.%d{yyyy-MM-dd}.log/fileNamePattern maxHistory30/maxHistory totalSizeCap3GB/totalSizeCap /rollingPolicy encoder pattern${LOG_PATTERN}/pattern charsetUTF-8/charset /encoder /appender /configuration扩展开发指南自定义模块开发新建业务模块步骤在ruoyi-modules目录下创建新模块配置pom.xml依赖创建包结构controller/service/mapper/domain实现业务逻辑配置数据源和Mybatis-Plus注册到主应用模块配置示例!-- pom.xml -- dependency groupIdorg.dromara/groupId artifactIdruoyi-common-core/artifactId /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId /dependency插件化扩展系统支持插件化扩展可以通过以下方式添加新功能自定义注解扩展系统注解体系拦截器扩展添加自定义拦截逻辑事件监听基于Spring事件机制扩展AOP切面实现横切关注点国际化支持系统内置国际化支持配置方式如下spring: messages: basename: i18n/messages encoding: UTF-8 cache-duration: 3600使用示例RestController public class I18nController { Autowired private MessageSource messageSource; GetMapping(/hello) public String hello(RequestHeader(value Accept-Language, defaultValue zh-CN) String lang) { Locale locale Locale.forLanguageTag(lang); return messageSource.getMessage(hello.message, null, locale); } }总结与最佳实践RuoYi-Vue-Plus作为企业级多租户后台管理系统在架构设计、功能完整性和技术先进性方面都表现出色。通过本文的深入解析我们可以看到架构优势模块化设计易于扩展和维护多租户支持满足SaaS应用需求现代化技术栈保持技术先进性开发效率代码生成器大幅减少重复工作完善的权限体系降低安全风险工作流引擎简化业务流程开发运维便利Docker容器化部署完善的监控体系多环境配置支持在实际项目中使用时建议充分理解多租户架构设计合理规划数据库分库分表策略利用代码生成器提高开发效率建立完善的监控告警机制定期进行安全审计和性能优化通过掌握RuoYi-Vue-Plus的核心功能和最佳实践开发者可以快速构建出稳定、高效、安全的企业级应用系统。【免费下载链接】RuoYi-Vue-Plus多租户后台管理系统 重写RuoYi-Vue所有功能 集成 Sa-Token、Mybatis-Plus、WarmFlow、SpringDoc、Hutool、OSS 定期同步项目地址: https://gitcode.com/GitHub_Trending/ru/RuoYi-Vue-Plus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考