news 2026/5/19 23:27:24

RuoYi-Cloud微服务后端 + RuoYi-App移动端:手把手教你从零新增一个业务模块(含Nacos配置与前端联调)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RuoYi-Cloud微服务后端 + RuoYi-App移动端:手把手教你从零新增一个业务模块(含Nacos配置与前端联调)

RuoYi全栈开发实战:从零构建业务模块的避坑指南

在微服务架构中新增一个完整业务模块,往往涉及前后端十余个环节的协同配置。许多开发者虽然熟悉单个技术点,却在模块化开发中频繁遭遇"接口404"、"路由失效"、"跨域报错"等典型问题。本文将基于RuoYi-Cloud与RuoYi-App的实战组合,演示如何系统性地完成从数据库设计到前端联调的全流程开发,特别聚焦那些官方文档未曾明说的配置细节和排错技巧。

1. 后端模块工程化构建

1.1 模块创建与依赖管理

新建ruoyi-app模块时,建议采用继承父pom而非简单复制依赖。在pom.xml中需要特别注意以下关键配置:

<parent> <groupId>com.ruoyi</groupId> <artifactId>ruoyi</artifactId> <version>3.8.0</version> </parent> <dependencies> <!-- 必须包含的starter --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-core</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MyBatis Plus配置 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> </dependency> </dependencies>

常见问题排查表:

问题现象可能原因解决方案
启动报Bean冲突依赖版本不一致使用mvn dependency:tree检查冲突
无法注入Mapper未扫描到包在启动类添加@MapperScan("com.ruoyi.app.mapper")
事务失效代理模式错误确认@EnableTransactionManagement已启用

1.2 领域模型与数据持久化

实体类设计应遵循RuoYi规范,建议采用Lombok简化代码:

@Data @TableName("app_user") public class AppUser { @TableId(type = IdType.AUTO) private Long userId; @NotBlank(message = "用户名不能为空") @Size(min = 2, max = 20) private String userName; // 逻辑删除标记(需配合全局配置) @TableLogic private Integer delFlag; }

Mapper接口需要特别注意动态SQL的编写规范:

<select id="selectUserList" resultType="AppUser"> SELECT * FROM app_user <where> <if test="userName != null and userName != ''"> AND user_name LIKE concat('%', #{userName}, '%') </if> AND del_flag = '0' </where> </select>

提示:MyBatis Plus的@TableField注解可解决字段名映射问题,如@TableField("user_name")

2. Nacos配置中心实战

2.1 服务注册关键参数

bootstrap.yml中,以下配置项直接影响服务发现:

spring: cloud: nacos: discovery: server-addr: 127.0.0.1:8848 namespace: dev # 多环境隔离 group: DEFAULT_GROUP ephemeral: true # 是否临时实例 metadata: version: 1.0 # 元数据可用于灰度发布

2.2 网关路由配置陷阱

网关配置ruoyi-gateway-dev.yml常见问题:

  • 路径匹配冲突:多个服务配置了相同Path前缀
  • 过滤器顺序错误StripPrefix应在认证过滤器之前
  • 负载均衡失效:服务名未正确注册到Nacos

推荐的路由配置模板:

- id: ruoyi-app uri: lb://ruoyi-app predicates: - Path=/app/v1/** filters: - StripPrefix=2 # 去除/app/v1前缀 - name: AuthFilter args: excludePaths: /app/v1/public/*

3. 前端联调深度优化

3.1 请求封装最佳实践

utils/request.js中需要统一处理:

const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, timeout: 10000, headers: { 'X-Requested-With': 'XMLHttpRequest', 'Content-Type': 'application/json;charset=UTF-8' } }) // 请求拦截器 service.interceptors.request.use(config => { // 自动添加Token if (store.getters.token) { config.headers['Authorization'] = 'Bearer ' + getToken() } // 微服务网关标识 config.headers['Gateway-Type'] = 'mobile-app' return config })

3.2 跨域解决方案对比

方案适用场景优缺点
网关CORS配置生产环境安全但配置复杂
开发代理本地开发简单需重启
Nginx反向代理测试环境灵活但需运维

推荐开发环境配置:

devServer: { proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true, pathRewrite: { '^/api': '' } } } }

4. 全链路调试技巧

4.1 日志追踪方案

  1. SkyWalking链路追踪
# 启动参数添加 -javaagent:/path/to/skywalking-agent.jar -Dskywalking.agent.service_name=ruoyi-app
  1. 日志关联ID
@Slf4j @RestController public class AppUserController { @GetMapping("/list") public TableDataInfo list() { log.info("查询用户列表请求到达"); MDC.put("traceId", UUID.randomUUID().toString()); // ... } }

4.2 接口文档自动化

Swagger集成配置:

@Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.ruoyi.app.controller")) .paths(PathSelectors.any()) .build() .globalOperationParameters(Collections.singletonList( new ParameterBuilder() .name("Authorization") .description("访问令牌") .modelRef(new ModelRef("string")) .parameterType("header") .required(false) .build())); }

联调阶段建议开启Knife4j增强UI:

knife4j.enable=true knife4j.production=false

在实际项目交付中,模块初始化时最容易忽略的是Nacos配置的版本控制。我们团队曾因未指定配置版本号导致测试环境读取了生产配置,后来通过建立严格的配置命名规范避免了此类问题,例如采用{应用名}-{环境}-{版本}.yml的格式管理所有配置文件。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/19 23:26:26

在Trae 运行、调试这个项目的时候,我发现有些python子进程内存占用超过32G,导致系统内存跑超到100% 。是否项目存在内存泄漏的隐患?我应该怎么让Trae去处理呢?请给我发给Trae的指令

先上结论&#xff1a;Trae一如既往的好用&#xff01;yan的repo&#xff1a;yan:基于 Python 生态的中文函数式编程语言项目 - AtomGit | GitCode 先问Dumate问题 在Windows10 用Trae 运行、调试yan这个中文编程项目的时候&#xff0c;我发现有些python子进程内存占用超过32G…

作者头像 李华
网站建设 2026/5/19 23:16:43

50W-80W功率等级的优选:1/16砖模块工程应用指南

在现代电子系统中&#xff0c;PCB面积是宝贵的资源。当负载功率需求在50W-80W之间时&#xff0c;1/16砖封装往往比1/8砖或1/4砖更具优势。智腾电源的1/16砖系列产品&#xff08;Z18S、Z28S、Z48S&#xff09;在36.8mm26.7mm12.7mm的紧凑尺寸内集成了隔离DC-DC变换器&#xff0c…

作者头像 李华
网站建设 2026/5/19 23:12:32

别再手画ER图、用例图了!AI可以帮你一键生成全套毕设论文图表

哈喽大家好&#xff01;我是青哥哥&#xff01;最近是毕业季&#xff0c;很多同学赶论文的时候可能会遇到这样的场景&#xff1a; 导师发来消息&#xff1a; “第三章的ER图没画完整&#xff0c;逻辑外键关系都没标&#xff0c;重画一遍。” 你当时的心情&#xff1a; 我他妈已…

作者头像 李华