RuoYi-Cloud-Plus 实战案例

RuoYi-Cloud-Plus 实战案例

【免费下载链接】RuoYi-Cloud-Plus 微服务管理系统 重写RuoYi-Cloud所有功能 整合 SpringCloudAlibaba、Dubbo3.0、Sa-Token、Mybatis-Plus、MQ、Warm-Flow工作流、ES、Docker 全方位升级 定期同步 【免费下载链接】RuoYi-Cloud-Plus 项目地址: https://gitcode.com/dromara/RuoYi-Cloud-Plus

RuoYi-Cloud-Plus 是一个功能强大的微服务通用权限管理系统,适用于企业级应用的开发。本节将通过实战案例,展示如何利用 RuoYi-Cloud-Plus 快速构建一个企业级应用,涵盖从项目初始化到功能开发的完整流程。

企业级应用开发实战

RuoYi-Cloud-Plus 是一个功能强大的微服务通用权限管理系统,适用于企业级应用的开发。本节将通过实战案例,展示如何利用 RuoYi-Cloud-Plus 快速构建一个企业级应用,涵盖从项目初始化到功能开发的完整流程。

1. 项目初始化与配置

1.1 环境准备

在开始之前,确保以下环境已配置完成:

  • JDK 17 或更高版本
  • Maven 3.6+
  • MySQL 8.0+
  • Redis 5.0+
  • Nacos 2.0+
1.2 克隆项目
git clone https://gitcode.com/dromara/RuoYi-Cloud-Plus.git
cd RuoYi-Cloud-Plus
1.3 数据库初始化

执行以下 SQL 脚本初始化数据库:

-- 创建数据库
CREATE DATABASE IF NOT EXISTS `ry-cloud` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 导入数据
USE `ry-cloud`;
SOURCE /path/to/ry-cloud.sql;
1.4 配置文件修改

修改 application.yml 文件中的数据库和 Redis 配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: your_password
  redis:
    host: localhost
    port: 6379
    password: your_password

2. 核心功能开发

2.1 用户管理模块

RuoYi-Cloud-Plus 提供了完善的用户管理功能,包括用户增删改查、角色分配等。以下是一个用户查询的代码示例:

@RestController
@RequestMapping("/system/user")
public class SysUserController {

    @Autowired
    private ISysUserService userService;

    @GetMapping("/list")
    public TableDataInfo list(SysUser user) {
        startPage();
        List<SysUser> list = userService.selectUserList(user);
        return getDataTable(list);
    }
}
2.2 权限控制

通过 Sa-Token 实现权限控制,支持注解式权限校验:

@SaCheckPermission("system:user:list")
@GetMapping("/list")
public TableDataInfo list(SysUser user) {
    // 业务逻辑
}
2.3 数据权限

使用 Mybatis-Plus 插件实现数据权限过滤:

@DataScope(deptAlias = "d", userAlias = "u")
public List<SysUser> selectUserList(SysUser user) {
    return userMapper.selectUserList(user);
}

3. 高级功能扩展

3.1 分布式事务

通过 Seata 实现分布式事务:

@GlobalTransactional
public void transfer(Long fromUserId, Long toUserId, BigDecimal amount) {
    // 扣减余额
    accountService.decrease(fromUserId, amount);
    // 增加余额
    accountService.increase(toUserId, amount);
}
3.2 文件存储

使用 Minio 实现文件上传:

@PostMapping("/upload")
public AjaxResult uploadFile(MultipartFile file) {
    String fileName = minioService.upload(file);
    return success(fileName);
}

4. 部署与监控

4.1 Docker 部署

使用 docker-compose.yml 快速部署:

version: '3'
services:
  ruoyi-auth:
    image: ruoyi-auth:latest
    ports:
      - "8080:8080"
  ruoyi-gateway:
    image: ruoyi-gateway:latest
    ports:
      - "9999:9999"
4.2 监控配置

通过 PrometheusGrafana 监控系统运行状态:

spring:
  application:
    name: ruoyi-monitor
  metrics:
    export:
      prometheus:
        enabled: true

5. 总结

通过以上步骤,我们完成了从项目初始化到核心功能开发的完整流程。RuoYi-Cloud-Plus 提供了丰富的功能和灵活的扩展性,能够满足企业级应用开发的需求。

复杂审批流程实现

在RuoYi-Cloud-Plus中,复杂审批流程的实现基于工作流引擎,支持多种审批场景,如转办、委派、加减签、会签、或签、票签等。以下将详细介绍其核心实现逻辑和关键代码示例。

1. 审批流程核心组件

1.1 流程定义与实例管理

审批流程的核心组件包括流程定义(FlowDefinition)、流程实例(FlowInstance)和任务(FlowTask)。这些组件通过以下类实现:

public class FlowDefinition {
    private Long id;
    private String name;
    private String key;
    private String tenantId;
    // 其他字段
}

public class FlowInstance {
    private Long id;
    private String businessId;
    private Long definitionId;
    private String status;
    // 其他字段
}

public class FlowTask {
    private Long id;
    private Long instanceId;
    private String assignee;
    private String status;
    // 其他字段
}
1.2 审批操作

审批操作通过TaskOperationBo类封装,支持多种操作类型:

public class TaskOperationBo {
    private Long taskId;
    private String operationType; // 审批、转办、委派等
    private String comment;
    private Map<String, Object> variables;
    // 其他字段
}

2. 审批流程实现逻辑

2.1 流程启动

流程启动通过StartProcessBo类触发,支持动态参数传递:

public class StartProcessBo {
    private Long definitionId;
    private String businessId;
    private Map<String, Object> variables;
    // 其他字段
}

启动流程的核心代码如下:

@Transactional(rollbackFor = Exception.class)
public RemoteStartProcessReturn startWorkFlow(StartProcessBo startProcessBo) {
    // 校验参数
    // 创建流程实例
    // 启动流程
    return new RemoteStartProcessReturn(instanceId, taskId);
}
2.2 任务审批

任务审批通过CompleteTaskBo类封装,支持动态变量传递:

public class CompleteTaskBo {
    private Long taskId;
    private String action; // 通过、拒绝等
    private Map<String, Object> variables;
    // 其他字段
}

审批逻辑的核心代码如下:

@Transactional(rollbackFor = Exception.class)
public void completeTask(CompleteTaskBo completeTaskBo) {
    // 校验任务状态
    // 更新任务状态
    // 触发下一节点
}

3. 复杂审批场景

3.1 会签与或签

会签和或签通过FlowNextNodeBo类实现,支持动态配置:

public class FlowNextNodeBo {
    private String nodeCode;
    private String assigneeType; // 会签、或签等
    private List<String> assignees;
    // 其他字段
}
3.2 转办与委派

转办和委派通过TaskAssigneeEnum枚举类定义:

public enum TaskAssigneeEnum {
    TRANSFER("转办"),
    DELEGATE("委派");
    // 其他枚举值
}

4. 状态机与事件监听

审批流程的状态变更通过事件监听机制实现,核心代码如下:

@EventListener(condition = "#processEvent.flowCode.startsWith('leave')")
public void processHandler(ProcessEvent processEvent) {
    // 处理流程事件
}

@EventListener(condition = "#processTaskEvent.flowCode.startsWith('leave')")
public void processTaskHandler(ProcessTaskEvent processTaskEvent) {
    // 处理任务事件
}

5. 示例流程图

以下是一个审批流程的Mermaid流程图示例:

mermaid

6. 总结

RuoYi-Cloud-Plus的复杂审批流程实现基于灵活的工作流引擎,支持多种审批场景和动态配置。通过核心组件和事件监听机制,开发者可以快速构建符合业务需求的审批流程。

高并发场景优化

在高并发场景下,系统的性能和稳定性是至关重要的。RuoYi-Cloud-Plus 通过多种技术手段优化了高并发场景下的性能表现,包括缓存策略、限流机制、分布式锁等。以下是一些关键优化点及其实现方式:


1. 缓存策略优化

RuoYi-Cloud-Plus 使用多级缓存(如 Redis + Caffeine)来减少数据库访问压力,提高响应速度。

缓存配置示例
@Configuration
public class CacheConfiguration {
    @Bean
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder()
                .initialCapacity(100)
                .maximumSize(1000)
                .expireAfterWrite(10, TimeUnit.MINUTES));
        return cacheManager;
    }
}
缓存使用示例
@Service
public class UserServiceImpl implements UserService {
    @Cacheable(value = "userCache", key = "#userId")
    public User getUserById(Long userId) {
        return userMapper.selectById(userId);
    }
}
缓存流程图

mermaid


2. 分布式限流

为了防止系统被突发流量压垮,RuoYi-Cloud-Plus 集成了 Sentinel 和自定义限流注解 @RateLimiter,支持基于 IP、用户或接口的限流。

限流配置示例
@RateLimiter(key = "user:login", limit = 5, expire = 60, message = "操作过于频繁,请稍后再试")
public R<String> login(LoginBody loginBody) {
    // 登录逻辑
}
限流流程图

mermaid


3. 分布式锁

在高并发场景下,分布式锁可以避免资源竞争问题。RuoYi-Cloud-Plus 使用 Redisson 实现分布式锁。

分布式锁示例
public void updateStock(Long productId, int quantity) {
    String lockKey = "product:" + productId;
    RLock lock = redissonClient.getLock(lockKey);
    try {
        if (lock.tryLock(10, TimeUnit.SECONDS)) {
            // 业务逻辑
        }
    } finally {
        lock.unlock();
    }
}
锁机制流程图

mermaid


4. 线程池优化

通过自定义线程池配置,避免线程资源耗尽导致系统崩溃。

线程池配置示例
@Configuration
public class ThreadPoolConfig {
    @Bean
    public ExecutorService asyncExecutor() {
        return new ThreadPoolExecutor(
                10,
                50,
                60L,
                TimeUnit.SECONDS,
                new LinkedBlockingQueue<>(1000),
                new ThreadPoolExecutor.CallerRunsPolicy());
    }
}
线程池参数表
参数说明推荐值
corePoolSize核心线程数10
maxPoolSize最大线程数50
keepAliveTime空闲线程存活时间(秒)60
queueCapacity任务队列容量1000
rejectionPolicy拒绝策略CallerRunsPolicy

5. 数据库优化

通过分库分表、读写分离和索引优化,提升数据库在高并发场景下的性能。

分库分表示例
-- 分库分表规则
CREATE TABLE `order_0` (
    `id` BIGINT PRIMARY KEY,
    `user_id` BIGINT,
    `amount` DECIMAL(10,2)
) ENGINE=InnoDB;
索引优化示例
-- 添加索引
ALTER TABLE `user` ADD INDEX `idx_username` (`username`);
数据库优化流程图

mermaid


通过以上优化手段,RuoYi-Cloud-Plus 能够有效应对高并发场景,确保系统的稳定性和高性能。

项目迁移与升级经验

RuoYi-Cloud-Plus 是一个功能强大的微服务通用权限管理系统,其架构和功能相较于原版 RuoYi-Cloud 有了全方位的升级。在实际项目中,迁移和升级是一个复杂的过程,需要综合考虑代码兼容性、数据库迁移、配置调整等多方面因素。以下是一些关键的经验和建议,帮助开发者顺利完成迁移与升级。

1. 数据库迁移与兼容性

RuoYi-Cloud-Plus 支持多种数据库(MySQL、Oracle、PostgreSQL、SQLServer),并提供了详细的 SQL 脚本用于数据迁移。以下是迁移步骤:

  1. 备份原数据库:在进行任何迁移操作前,务必对原数据库进行完整备份。
  2. 执行迁移脚本:根据目标数据库类型,选择合适的 SQL 脚本执行。例如:
    • 对于 PostgreSQL,使用 script/sql/postgres 目录下的脚本。
    • 对于 Oracle,使用 script/sql/oracle 目录下的脚本。
  3. 验证数据完整性:迁移完成后,检查数据是否完整,确保关键表(如用户、角色、权限等)的数据正确。
示例:PostgreSQL 迁移脚本
-- 示例脚本:postgres_ry_cloud.sql
CREATE TABLE sys_user (
    user_id BIGSERIAL PRIMARY KEY,
    user_name VARCHAR(30) NOT NULL,
    password VARCHAR(100) NOT NULL,
    -- 其他字段
);

2. 代码兼容性调整

RuoYi-Cloud-Plus 的代码结构与原版 RuoYi-Cloud 不完全兼容,以下是一些常见的调整点:

  1. 依赖管理:检查 pom.xml 文件,确保所有依赖项与 RuoYi-Cloud-Plus 的版本一致。
  2. 注解调整:原版中的部分注解(如 @RestController)可能需要替换为 RuoYi-Cloud-Plus 提供的扩展注解。
  3. 工具类迁移:RuoYi-Cloud-Plus 提供了丰富的工具类(如 MapstructUtilsDateUtils),可以直接替换原版中的自定义工具类。
示例:工具类替换
// 原版代码
String formattedDate = DateFormatUtils.format(new Date(), "yyyy-MM-dd");

// RuoYi-Cloud-Plus 代码
String formattedDate = DateUtils.dateTimeNow(FormatsType.YYYY_MM_DD);

3. 配置文件调整

RuoYi-Cloud-Plus 的配置文件结构与原版有所不同,需要特别注意以下几点:

  1. Nacos 配置:确保 application.yml 中的 Nacos 配置与 RuoYi-Cloud-Plus 的要求一致。
  2. Redis 配置:RuoYi-Cloud-Plus 使用 Redisson 客户端,配置方式与原版 Lettuce 不同。
  3. 多数据源配置:如果项目使用多数据源,需按照 dynamic-datasource 的规范进行配置。
示例:Redis 配置
# RuoYi-Cloud-Plus Redis 配置
spring:
  redis:
    redisson:
      config: |
        singleServerConfig:
          address: "redis://127.0.0.1:6379"
          database: 0

4. 服务网关与鉴权

RuoYi-Cloud-Plus 的网关模块(ruoyi-gateway)集成了多种过滤器(如黑名单、跨域、日志等),需确保以下配置正确:

  1. 路由规则:检查网关的路由规则是否与原版一致。
  2. 鉴权配置:RuoYi-Cloud-Plus 使用 Sa-Token 进行鉴权,需调整原版的 Spring Security 配置。
示例:网关过滤器配置
@Component
public class BlackListUrlFilter implements GlobalFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 黑名单逻辑
        return chain.filter(exchange);
    }
}

5. 测试与验证

迁移完成后,需进行全面测试,确保以下功能正常:

  1. 用户登录与鉴权:验证用户登录、角色权限控制是否正常。
  2. 数据操作:测试增删改查功能,确保数据库操作无误。
  3. 服务调用:验证微服务之间的调用是否正常。
测试用例示例
@Test
public void testUserLogin() {
    LoginBody loginBody = new LoginBody();
    loginBody.setUsername("admin");
    loginBody.setPassword("admin123");
    R<String> result = authService.login(loginBody);
    Assert.assertTrue(result.isSuccess());
}

6. 升级注意事项

如果是从 RuoYi-Cloud-Plus 的旧版本升级到新版本,需执行以下步骤:

  1. 检查升级脚本:在 script/sql/update 目录下找到对应的升级脚本。
  2. 执行脚本:按照版本顺序依次执行升级脚本。
  3. 验证功能:升级后,重新测试关键功能。
示例:升级脚本
-- 示例脚本:update_2.3.0-2.4.0.sql
ALTER TABLE sys_user ADD COLUMN IF NOT EXISTS last_login_time TIMESTAMP;

通过以上步骤,可以顺利完成 RuoYi-Cloud-Plus 的迁移与升级工作。如果在过程中遇到问题,可以参考官方文档或社区支持。

总结

通过以上步骤,我们完成了从项目初始化到核心功能开发的完整流程。RuoYi-Cloud-Plus 提供了丰富的功能和灵活的扩展性,能够满足企业级应用开发的需求。

【免费下载链接】RuoYi-Cloud-Plus 微服务管理系统 重写RuoYi-Cloud所有功能 整合 SpringCloudAlibaba、Dubbo3.0、Sa-Token、Mybatis-Plus、MQ、Warm-Flow工作流、ES、Docker 全方位升级 定期同步 【免费下载链接】RuoYi-Cloud-Plus 项目地址: https://gitcode.com/dromara/RuoYi-Cloud-Plus

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值