保姆级教程:用RuoYi-Cloud微服务框架,从零搭建一个员工管理系统
从零构建企业级员工管理系统:RuoYi-Cloud微服务实战指南
第一次接触微服务架构时,面对Nacos、Gateway、Sentinel这些组件,很多开发者会陷入"每个工具都会用,但不知道如何串联"的困境。RuoYi-Cloud作为国内流行的企业级开发框架,其价值不仅在于提供现成的技术栈,更在于展示了这些组件如何协同工作。本文将从一个具体业务场景——员工管理系统出发,带您体验从数据库设计到前后端联调的完整流程。
1. 环境准备与框架初始化
1.1 基础环境配置
在开始前确保已安装以下组件(版本需严格匹配):
# 验证Java版本
java -version # 要求JDK 1.8+
# 检查Nacos运行状态
curl http://localhost:8848/nacos/ # 需返回登录页面
推荐使用Docker快速搭建依赖服务:
# docker-compose.yml示例
version: '3'
services:
nacos:
image: nacos/nacos-server:2.0.3
ports:
- "8848:8848"
redis:
image: redis:6.2-alpine
ports:
- "6379:6379"
1.2 项目初始化
从GitHub获取最新代码:
git clone https://github.com/ruoyi-vue-pro/ruoyi-cloud.git
cd ruoyi-cloud && mvn clean install
关键目录结构说明:
ruoyi-cloud
├── ruoyi-auth # 认证中心
├── ruoyi-gateway # API网关
├── ruoyi-system # 系统模块(业务主模块)
├── ruoyi-gen # 代码生成器
└── ruoyi-modules # 自定义模块目录
2. 数据库设计与代码生成
2.1 员工表结构设计
在ry-cloud数据库执行以下SQL:
CREATE TABLE `sys_employee` (
`employee_id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '姓名',
`gender` char(1) DEFAULT '0' COMMENT '性别(0男 1女)',
`mobile` varchar(11) COMMENT '手机号',
`dept_id` bigint COMMENT '所属部门',
`position` varchar(50) COMMENT '职位',
`entry_date` datetime COMMENT '入职日期',
`status` char(1) DEFAULT '0' COMMENT '状态(0在职 1离职)',
PRIMARY KEY (`employee_id`)
) ENGINE=InnoDB COMMENT='员工信息表';
注意:字段命名需遵循框架规范,系统表以
sys_前缀开头
2.2 使用代码生成器
-
启动
ruoyi-gen模块 -
访问
http://localhost:80/dev-api/code进入生成界面 - 导入刚创建的表后,关键配置项如下:
| 配置项 | 示例值 | 说明 |
|---|---|---|
| 生成包路径 | com.ruoyi.system | 对应system模块 |
| 生成模块名 | system | 路由前缀 |
| 生成业务名 | employee | 形成/employee/**路由 |
| 上级菜单 | 系统管理 | 菜单归属位置 |
生成后的代码结构:
src/main/java/com/ruoyi/system
├── domain # 实体类
├── mapper # MyBatis接口
├── service # 服务层
└── controller # 控制器
3. 微服务组件集成实战
3.1 网关路由配置
在
ruoyi-gateway
的application.yml中添加:
spring:
cloud:
gateway:
routes:
- id: ruoyi-employee
uri: lb://ruoyi-system
predicates:
- Path=/employee/**
filters:
- StripPrefix=1
3.2 权限控制实现
框架默认采用JWT鉴权,员工管理接口需添加权限注解:
@RestController
@RequestMapping("/employee")
public class EmployeeController {
@PreAuthorize("@ss.hasPermi('system:employee:list')")
@GetMapping("/list")
public TableDataInfo list(Employee employee) {
// 查询逻辑
}
}
权限标识与数据库
sys_menu
表中
perms
字段对应:
INSERT INTO sys_menu VALUES
(10600, '员工管理', 1, 1, 'employee', null, 0, 0, 'C', '0', '0', 'system:employee:list', '#', 'admin', NOW(), '', NULL);
3.3 熔断保护配置
在
ruoyi-system
模块集成Sentinel:
- 添加依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
- 配置降级规则:
@GetMapping("/info/{employeeId}")
@SentinelResource(value = "employeeInfo",
blockHandler = "handleBlock",
fallback = "handleFallback")
public AjaxResult getInfo(@PathVariable Long employeeId) {
// ...
}
// 熔断处理
public AjaxResult handleBlock(Long employeeId, BlockException ex) {
return AjaxResult.error("请求过于频繁");
}
4. 前端联调与功能优化
4.1 Vue组件开发
生成的前端代码位于
src/views/system/employee
:
<template>
<div class="app-container">
<el-table :data="list" v-loading="loading">
<el-table-column prop="name" label="姓名" width="120" />
<el-table-column prop="mobile" label="手机号" width="150" />
<el-table-column label="操作">
<template #default="scope">
<el-button size="mini" @click="handleEdit(scope.row)">编辑</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
4.2 API接口封装
在
src/api/system/employee.js
中扩展自定义方法:
import request from '@/utils/request'
export function searchEmployee(params) {
return request({
url: '/employee/search',
method: 'get',
params
})
}
4.3 性能优化技巧
- 启用MyBatis二级缓存:
<!-- 在mapper.xml中添加 -->
<cache eviction="LRU" flushInterval="60000"/>
- 添加Redis缓存:
@Cacheable(key = "'employee:' + #employeeId",
value = "employeeCache")
public Employee selectEmployeeById(Long employeeId) {
return employeeMapper.selectById(employeeId);
}
5. 生产环境部署建议
5.1 容器化部署方案
构建Docker镜像示例:
FROM openjdk:8-jdk-alpine
COPY target/ruoyi-system.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
使用Kubernetes部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ruoyi-system
spec:
replicas: 3
selector:
matchLabels:
app: system
template:
spec:
containers:
- name: system
image: registry.example.com/ruoyi-system:v1.0
ports:
- containerPort: 8080
5.2 监控配置
集成Prometheus监控:
- 添加依赖:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
- 配置端点暴露:
management:
endpoints:
web:
exposure:
include: health,info,prometheus
在项目开发过程中,发现RuoYi-Cloud的代码生成器对复杂关联关系的支持有限,对于多表联查场景需要手动扩展Mapper文件。建议在生成基础代码后,根据业务需求进行二次开发,特别是涉及复杂查询时,可以结合QueryDSL等工具提升开发效率。
更多推荐
所有评论(0)