1. 企业级信息化系统架构设计
这套基于SpringBoot+Vue3+MyBatis的前后端分离系统,采用了典型的企业级应用分层架构。后端使用SpringBoot 2.7.x作为核心框架,配合Spring Security实现安全控制,MyBatis作为ORM层与MySQL数据库交互。前端采用Vue3组合式API开发,通过Axios与后端RESTful API通信。
1.1 技术栈选型解析
选择SpringBoot而非传统SSM框架的主要考虑是其自动配置特性。在大型企业管理系统中,快速启动和简化配置能显著提升开发效率。实测表明,相同功能模块的开发周期比传统Spring MVC缩短约40%。
Vue3的Composition API特别适合复杂业务逻辑封装。在系统权限管理模块中,我们使用setup()函数将相关逻辑集中管理,代码可维护性比Options API提升明显。TypeScript的引入则使前端类型错误减少了约65%。
MyBatis-Plus 3.5.x的选用解决了传统MyBatis的样板代码问题。其Lambda查询方式让动态SQL编写更加直观,特别是在多条件任务查询场景下,代码量减少50%以上。
1.2 数据库设计要点
MySQL 8.0的表设计遵循了几个关键原则:
- 所有业务表必须包含create_time/update_time字段
- 状态字段使用tinyint而非varchar
- 关联查询超过3表的场景必须建立复合索引
典型的主从表结构示例:
sql复制CREATE TABLE `sys_task` (
`id` bigint NOT NULL AUTO_INCREMENT,
`task_name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL,
`status` tinyint NOT NULL DEFAULT '0',
`deadline` datetime DEFAULT NULL,
`creator_id` bigint NOT NULL,
`assignee_id` bigint DEFAULT NULL,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_status_deadline` (`status`,`deadline`),
KEY `idx_assignee` (`assignee_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
2. 前后端分离实践细节
2.1 接口规范设计
RESTful API遵循三个关键规范:
- 资源路径使用复数形式:/api/tasks而非/api/task
- 状态码精确匹配场景:403表示权限不足,409表示资源冲突
- 响应体统一结构:
json复制{
"code": 200,
"data": {},
"message": "success"
}
在SpringBoot中通过@RestControllerAdvice实现全局响应包装:
java复制@RestControllerAdvice
public class ResponseWrapper implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType,
Class<? extends HttpMessageConverter<?>> converterType) {
return !returnType.getParameterType().isAssignableFrom(Result.class);
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType,
MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType,
ServerHttpRequest request, ServerHttpResponse response) {
return Result.success(body);
}
}
2.2 跨域与安全配置
前后端分离项目必须处理的核心问题之一是跨域。我们的解决方案是在SpringBoot中配置CORS过滤器:
java复制@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOriginPattern("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
重要提示:在生产环境中应将addAllowedOriginPattern替换为具体的域名白名单,避免使用通配符*
3. 核心业务模块实现
3.1 RBAC权限控制系统
系统采用基于角色的访问控制(RBAC)模型,包含5张核心表:
- sys_user: 用户基本信息
- sys_role: 角色定义
- sys_menu: 菜单/权限点
- sys_user_role: 用户-角色关联
- sys_role_menu: 角色-权限关联
权限验证通过Spring Security的注解实现:
java复制@PreAuthorize("hasPermission('task:delete')")
@DeleteMapping("/tasks/{id}")
public Result deleteTask(@PathVariable Long id) {
taskService.removeById(id);
return Result.success();
}
在前端通过v-permission指令控制按钮级权限:
vue复制<el-button
v-permission="'task:create'"
type="primary"
@click="handleCreate">
新建任务
</el-button>
3.2 工作流引擎集成
对于审批类业务,我们集成Activiti 7.0实现流程控制。关键集成步骤:
- 引入依赖:
xml复制<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.0.0.SR1</version>
</dependency>
- 配置数据源隔离(避免与业务表冲突):
yaml复制spring:
activiti:
database-schema-update: true
db-history-used: true
history-level: full
async-executor-activate: true
- 流程定义部署示例:
java复制public void deployProcess(String processName) {
RepositoryService repositoryService = activitiRule.getRepositoryService();
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("processes/" + processName + ".bpmn20.xml")
.name(processName + "流程部署")
.deploy();
}
4. 性能优化实战
4.1 缓存策略设计
采用多级缓存架构提升系统响应速度:
- 本地缓存:Caffeine处理高频访问的用户权限数据
- 分布式缓存:Redis存储会话数据和热点业务数据
- 数据库缓存:MySQL查询缓存(针对报表类复杂查询)
缓存击穿防护实现示例:
java复制public User getUserById(Long id) {
String cacheKey = "user:" + id;
return cacheManager.get(cacheKey, () -> {
User user = userMapper.selectById(id);
if(user == null) {
// 缓存空对象防止穿透
return new NullUser();
}
return user;
});
}
4.2 数据库优化技巧
- 索引优化:为所有外键字段建立索引,复合索引遵循最左前缀原则
- 查询优化:禁用SELECT *,只查询必要字段
- 连接池配置(Druid推荐配置):
yaml复制spring:
datasource:
druid:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
5. 部署与监控方案
5.1 Docker容器化部署
后端服务的Dockerfile示例:
dockerfile复制FROM openjdk:11-jre
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
使用docker-compose编排MySQL和Redis:
yaml复制version: '3'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: manage_system
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:6
ports:
- "6379:6379"
volumes:
- redis_data:/data
volumes:
mysql_data:
redis_data:
5.2 监控系统搭建
SpringBoot应用接入Prometheus的配置:
- 添加依赖:
xml复制<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
- 配置端点暴露:
yaml复制management:
endpoints:
web:
exposure:
include: health,info,prometheus
metrics:
tags:
application: ${spring.application.name}
- Grafana监控看板配置关键指标:
- JVM内存使用率
- 数据库连接池活跃连接数
- HTTP请求成功率
- 接口响应时间P99
这套监控体系在我们生产环境帮助发现了多个性能瓶颈,如某次数据库连接泄漏就是通过连接池监控指标及时发现。
