以下是基于 SpringBoot + VUE + 前后端分离 的 周边旅游平台系统 的完整开发流程,涵盖需求分析、技术设计、前后端开发、联调测试到部署上线全流程,适合程序员参考实践:
一、需求分析与规划
-
明确核心功能
- 用户端:景点浏览/搜索、路线规划、在线预订(门票/酒店/旅游团)、订单管理、评价分享、个性化推荐。
- 商家端:景点/酒店/旅游团信息管理、订单处理、数据分析。
- 管理后台:用户/商家审核、内容审核、数据统计、系统配置。
-
技术选型确认
- 后端:SpringBoot 2.x + Spring Security(权限控制) + MyBatis-Plus(ORM) + Redis(缓存) + Swagger(API文档)。
- 前端:Vue 3 + Vue Router + Pinia(状态管理) + Element Plus/Ant Design Vue(UI库) + Axios(HTTP请求)。
- 数据库:MySQL 8.0(主库) + MongoDB(可选,存储用户行为日志)。
- 中间件:阿里云OSS(图片存储)、RabbitMQ(异步消息,如订单超时取消)、Elasticsearch(景点搜索优化)。
- 部署:Docker + Nginx(反向代理) + Jenkins(CI/CD,可选)。
-
非功能需求
- 高并发支持(如节假日景点预订峰值)。
- 数据安全(用户隐私、支付信息加密)。
- 响应式设计(适配PC/移动端)。
二、技术设计与架构
-
系统架构图
用户浏览器 → Nginx(静态资源/API转发) → Vue前端服务 ↓ SpringBoot后端服务 → MySQL/Redis/RabbitMQ -
API设计规范
-
使用RESTful风格,统一返回格式:
json { "code": 200, "message": "success", "data": {...} } -
接口文档:Swagger UI或YAPI。
-
-
数据库设计(关键表)
- 用户表:
id, username, password, avatar, role(0-用户/1-商家/2-管理员) - 景点表:
id, name, address, description, price, longitude, latitude, status - 订单表:
id, user_id, order_type(0-门票/1-酒店/2-旅游团), status, create_time - 评价表:
id, user_id, target_id(景点/酒店ID), rating, content, create_time
- 用户表:
-
安全设计
- JWT令牌认证(前后端分离通用方案)。
- 敏感数据加密(如密码使用BCrypt)。
- 接口权限控制(
@PreAuthorize注解)。
三、开发流程
1. 后端开发(SpringBoot)
-
项目初始化
-
使用Spring Initializr生成项目,集成依赖:
xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency> <!-- 其他依赖:Redis、Swagger、Lombok等 --> </dependencies>
-
-
核心模块开发
- 用户模块:注册/登录(短信验证码/邮箱验证)、JWT生成与验证。
- 景点模块:分页查询、条件筛选(按价格/距离排序)、详情页数据聚合。
- 订单模块:支付接口对接(沙箱环境测试)、订单状态机(待支付→已支付→已取消)。
- 推荐模块:基于用户浏览历史的协同过滤算法(可先用规则引擎替代)。
-
代码示例(JWT工具类)
java public class JwtUtil { private static final String SECRET = "your-secret-key"; public static String generateToken(String username) { return Jwts.builder() .setSubject(username) .setExpiration(new Date(System.currentTimeMillis() + 86400000)) .signWith(SignatureAlgorithm.HS512, SECRET) .compact(); } }
2. 前端开发(Vue 3)
-
项目初始化
-
使用Vite创建Vue项目:
bash npm create vite@latest tour-platform --template vue -
安装依赖:
bash npm install axios vue-router pinia element-plus
-
-
核心页面开发
- 首页:景点轮播图、热门推荐(调用后端API
/api/scenic/hot)。 - 景点详情页:图片懒加载、地图集成(高德/百度地图API)。
- 订单页:表单验证(Element Plus的
el-form)、支付弹窗。
- 首页:景点轮播图、热门推荐(调用后端API
-
状态管理(Pinia示例)
javascript // stores/user.js import { defineStore } from 'pinia'; export const useUserStore = defineStore('user', { state: () => ({ token: '', userInfo: null }), actions: { async login(data) { const res = await axios.post('/api/auth/login', data); this.token = res.data.token; localStorage.setItem('token', this.token); } } }); -
API请求封装
javascript // utils/request.js import axios from 'axios'; const service = axios.create({ baseURL: '/api', timeout: 5000 }); service.interceptors.request.use(config => { const token = localStorage.getItem('token'); if (token) config.headers.Authorization = `Bearer ${token}`; return config; }); export default service;
3. 前后端联调
-
跨域配置
-
后端添加CORS支持(
@CrossOrigin或全局配置):java @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**").allowedOrigins("*").allowedMethods("*"); } } -
或前端配置代理(
vite.config.js):javascript export default defineConfig({ server: { proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true } } } });
-
-
联调重点
- 用户登录后前端存储JWT,后续请求携带
Authorization头。 - 统一错误处理(如后端返回
401时前端跳转登录页)。
- 用户登录后前端存储JWT,后续请求携带
四、测试与部署
-
测试策略
- 单元测试:JUnit 5测试后端Service层。
- 接口测试:Postman测试所有API,包括异常场景(如参数缺失、权限不足)。
- UI测试:Cypress模拟用户操作(如预订流程)。
-
部署方案
-
开发环境:本地启动前后端服务,通过Nginx代理联调。
-
生产环境:
-
后端打包为JAR文件,使用Docker容器化:
dockerfile FROM openjdk:17-jdk-slim COPY target/tour-platform.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"] -
前端构建静态资源:
npm run build,上传至Nginx的html目录。 -
Nginx配置反向代理:
nginx server { listen 80; server_name your-domain.com; location / { root /usr/share/nginx/html; index index.html; } location /api { proxy_pass http://backend-server:8080; } }
-
-
五、上线后维护
-
监控与日志
- 使用Spring Boot Actuator监控服务健康状态。
- ELK(Elasticsearch + Logstash + Kibana)收集分析日志。
-
迭代优化
- 根据用户反馈优化搜索推荐算法。
- 引入CDN加速静态资源加载。
总结:通过SpringBoot + VUE实现前后端分离,可显著提升开发效率和系统可维护性。关键点在于 :清晰的接口定义、统一的状态管理、完善的错误处理机制。实际开发中建议使用Git进行版本控制,并通过Jenkins实现自动化部署。