招生宣传管理系统是高校信息化建设的重要组成部分,它直接关系到学校的招生质量和效率。传统招生宣传工作中存在信息分散、流程繁琐、数据统计困难等问题,亟需一套高效、稳定的数字化解决方案。
作为一名有18年开发经验的全栈工程师,我选择了SpringBoot框架作为系统开发的核心技术栈。SpringBoot的快速开发特性和丰富的生态系统,能够显著缩短开发周期,同时保证系统的稳定性和可扩展性。
在技术选型方面,我们采用了以下技术栈:
选择这些技术的主要考虑因素包括:
系统采用微服务架构,主要划分为以下服务模块:
每个服务都独立部署,通过Spring Cloud Gateway进行统一API网关管理,使用Nacos作为服务注册中心。
用户权限采用RBAC(基于角色的访问控制)模型实现。主要涉及以下核心表设计:
sql复制CREATE TABLE `sys_user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(100) NOT NULL COMMENT '密码',
`real_name` varchar(50) DEFAULT NULL COMMENT '真实姓名',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`phone` varchar(20) DEFAULT NULL COMMENT '手机号',
`status` tinyint DEFAULT '1' COMMENT '状态 0:禁用 1:正常',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
CREATE TABLE `sys_role` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '角色名称',
`code` varchar(50) NOT NULL COMMENT '角色编码',
`remark` varchar(100) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
CREATE TABLE `sys_user_role` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL COMMENT '用户ID',
`role_id` bigint NOT NULL COMMENT '角色ID',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_user_role` (`user_id`,`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';
权限控制采用Spring Security + JWT实现,核心配置如下:
java复制@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/api/auth/**").permitAll()
.antMatchers("/swagger-ui/**").permitAll()
.antMatchers("/v3/api-docs/**").permitAll()
.anyRequest().authenticated();
http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
@Bean
public JwtAuthenticationFilter jwtAuthenticationFilter() {
return new JwtAuthenticationFilter();
}
}
招生信息管理模块支持富文本编辑、分类管理和多级审核流程。核心功能包括:
技术实现上,使用Spring Data JPA进行数据持久化:
java复制public interface RecruitmentInfoRepository extends JpaRepository<RecruitmentInfo, Long> {
@Query("SELECT r FROM RecruitmentInfo r WHERE r.status = :status AND r.publishTime <= CURRENT_TIMESTAMP")
Page<RecruitmentInfo> findPublishedInfos(@Param("status") Integer status, Pageable pageable);
@Query("SELECT r FROM RecruitmentInfo r WHERE r.title LIKE %:keyword% OR r.content LIKE %:keyword%")
Page<RecruitmentInfo> search(@Param("keyword") String keyword, Pageable pageable);
}
宣传资料管理模块实现了文件上传、预览和版本管理功能。技术要点包括:
文件上传接口示例:
java复制@RestController
@RequestMapping("/api/material")
public class MaterialController {
@PostMapping("/upload")
public Result upload(@RequestParam("file") MultipartFile file,
@RequestParam("categoryId") Long categoryId) {
if (file.isEmpty()) {
return Result.fail("请选择上传文件");
}
try {
String originalFilename = file.getOriginalFilename();
String fileType = FilenameUtils.getExtension(originalFilename);
String newFilename = UUID.randomUUID() + "." + fileType;
// 保存到本地或云存储
storageService.store(file, newFilename);
// 保存到数据库
PromotionalMaterial material = new PromotionalMaterial();
material.setTitle(FilenameUtils.getBaseName(originalFilename));
material.setFilePath(newFilename);
material.setCategoryId(categoryId);
material.setFileSize(file.getSize());
material.setFileType(fileType);
materialService.save(material);
return Result.success(material);
} catch (Exception e) {
log.error("文件上传失败", e);
return Result.fail("文件上传失败");
}
}
}
系统采用Docker Compose进行容器化部署,docker-compose.yml配置示例如下:
yaml复制version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: recruitment
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
restart: always
redis:
image: redis:6.2
container_name: redis
ports:
- "6379:6379"
volumes:
- redis_data:/data
restart: always
gateway:
image: recruitment-gateway:1.0.0
container_name: gateway
ports:
- "8000:8000"
depends_on:
- mysql
- redis
environment:
- SPRING_PROFILES_ACTIVE=prod
restart: always
volumes:
mysql_data:
redis_data:
针对高并发场景,我们实施了以下优化措施:
数据库层面:
应用层面:
前端层面:
建议使用以下开发环境配置:
快速启动本地开发环境:
bash复制# 启动依赖服务
docker-compose -f docker-compose-dev.yml up -d
# 后端启动
./mvnw spring-boot:run
# 前端启动
cd frontend
npm install
npm run serve
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*")
.maxAge(3600);
}
}
yaml复制management:
endpoints:
web:
exposure:
include: "*"
metrics:
export:
prometheus:
enabled: true
tags:
application: ${spring.application.name}
在实际开发过程中,我深刻体会到良好的架构设计对项目可维护性的重要性。特别是在需求变更频繁的教育领域,采用微服务架构确实带来了更大的灵活性。同时,自动化测试和持续集成也应该在项目早期就纳入考虑范围,这能显著提高开发效率和代码质量。