首页/新闻资讯/正文详情

Spring Boot全栈开发个人博客系统实践

发布时间:2026/9/23 5:58:54 来源:云帆数科 栏目:资讯中心
Spring Boot全栈开发个人博客系统实践
1. 项目概述这个前后端分离的个人博客系统是我最近完成的一个练手项目主要目的是实践Spring Boot全栈开发和自动化测试流程。系统采用了经典的三层架构前端使用HTMLCSSJavaScript实现页面交互后端基于Spring Boot框架开发数据库选用MySQL存储数据最终部署在云服务器上。作为一个轻量级的博客系统它实现了最基础的博客管理功能用户登录/注销博客文章的增删改查文章列表分页展示文章详情查看虽然功能相对简单但完整实现了从开发到测试再到部署的全流程。特别在测试环节我重点实践了自动化测试方案包括功能测试、接口测试和性能测试确保系统质量的同时也提升了测试效率。2. 技术架构设计2.1 前端架构前端采用传统的HTMLCSSJavaScript技术栈没有使用任何前端框架主要考虑点是项目规模较小引入框架会增加复杂度纯原生实现更有利于理解浏览器工作原理减少依赖部署更简单页面结构设计为四个核心视图登录页处理用户认证列表页展示文章概要详情页显示完整文章内容编辑页支持文章创建和修改2.2 后端架构后端基于Spring Boot构建主要技术选型如下技术组件版本用途说明Spring Boot2.7.0基础框架Spring Security5.7.1认证授权MyBatis2.2.2ORM框架MySQL8.0.29数据存储Lombok1.18.24简化代码分层架构设计com.example.blog ├── config # 配置类 ├── controller # 控制器层 ├── service # 业务逻辑层 ├── mapper # 数据访问层 ├── entity # 实体类 └── util # 工具类2.3 数据库设计数据库仅包含两张核心表用户表(blog_user)CREATE TABLE blog_user ( id int NOT NULL AUTO_INCREMENT, username varchar(50) NOT NULL, password varchar(100) NOT NULL, avatar varchar(255) DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY username (username) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;文章表(blog_post)CREATE TABLE blog_post ( id int NOT NULL AUTO_INCREMENT, title varchar(100) NOT NULL, content text NOT NULL, author_id int NOT NULL, create_time datetime NOT NULL, update_time datetime NOT NULL, PRIMARY KEY (id), KEY author_id (author_id), CONSTRAINT blog_post_ibfk_1 FOREIGN KEY (author_id) REFERENCES blog_user (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;3. 核心功能实现3.1 用户认证模块系统采用基于Session的认证方式主要流程用户提交用户名密码后端校验凭证有效性创建Session并返回认证成功响应前端存储Session ID用于后续请求关键代码实现PostMapping(/login) public Result login(RequestBody LoginDTO dto, HttpSession session) { User user userService.getByUsername(dto.getUsername()); if(user null || !passwordEncoder.matches(dto.getPassword(), user.getPassword())) { return Result.fail(用户名或密码错误); } session.setAttribute(user, user); return Result.ok(); }注意实际项目中应该使用更安全的认证方案如JWTHTTPS。这里为了简化实现使用了Session认证。3.2 博客管理模块文章管理实现了基本的CRUD操作新增文章PostMapping(/posts) public Result addPost(RequestBody PostDTO dto, HttpSession session) { User user (User) session.getAttribute(user); if(user null) { return Result.fail(请先登录); } Post post new Post(); post.setTitle(dto.getTitle()); post.setContent(dto.getContent()); post.setAuthorId(user.getId()); post.setCreateTime(LocalDateTime.now()); post.setUpdateTime(LocalDateTime.now()); postMapper.insert(post); return Result.ok(post); }分页查询GetMapping(/posts) public Result listPosts( RequestParam(defaultValue 1) Integer page, RequestParam(defaultValue 10) Integer size) { PageHelper.startPage(page, size); ListPostVO posts postMapper.selectWithAuthor(); PageInfoPostVO pageInfo new PageInfo(posts); return Result.ok(pageInfo); }4. 自动化测试实践4.1 功能测试方案采用Selenium 4 JUnit 5组合实现Web自动化测试主要特点页面对象模式每个页面封装为独立测试类参数化测试支持多账号登录验证智能等待隐式等待确保元素加载测试套件统一执行所有测试用例测试类结构src/test/java ├── common │ └── AutoTestUtils.java # 公共工具类 ├── tests │ ├── BlogLoginTest.java # 登录页测试 │ ├── BlogListTest.java # 列表页测试 │ ├── BlogEditTest.java # 编辑页测试 │ └── BlogDetailTest.java # 详情页测试 └── runSuite.java # 测试套件典型测试用例示例Test Order(2) public void testLoginSuccess() { driver.findElement(By.id(username)).sendKeys(zhangsan); driver.findElement(By.id(password)).sendKeys(123456); driver.findElement(By.id(login-btn)).click(); // 验证跳转到列表页 String currentUrl driver.getCurrentUrl(); assertTrue(currentUrl.contains(list.html)); // 验证用户信息显示 String username driver.findElement(By.className(user-name)).getText(); assertEquals(张三, username); }4.2 接口自动化测试使用RestAssured JUnit 5实现接口测试关键设计全局Token管理登录后自动传递token统一请求工具封装GET/POST请求方法多环境配置支持测试/生产环境切换Allure报告生成可视化测试报告接口测试示例Test Order(1) public void testLoginSuccess() { MapString, String params new HashMap(); params.put(username, zhangsan); params.put(password, 123456); Response response RequestUtil.post(/api/login, params); assertEquals(200, response.getStatusCode()); String token response.jsonPath().getString(data.token); YamlUtil.writeToken(token); // 保存token供后续使用 }4.3 性能测试实施使用JMeter进行压力测试主要场景登录接口模拟多用户并发登录博客发布测试文章创建性能列表查询验证分页查询效率测试配置参数线程组100并发用户持续时间5分钟响应超时3秒断言规则响应码200响应时间1s性能测试结果分析聚合报告 - 样本数3250 - 平均响应时间428ms - 吞吐量10.8/sec - 错误率0.12%5. 部署与运维5.1 服务器环境准备系统部署在1核2G的云服务器上环境配置如下基础环境CentOS 7.6JDK 11MySQL 8.0Nginx 1.20部署目录结构/opt/blog ├── app # Spring Boot jar包 ├── conf # 配置文件 ├── logs # 日志文件 └── web # 前端静态资源5.2 应用部署脚本使用Shell脚本简化部署流程启动脚本(start.sh)#!/bin/bash # 启动MySQL systemctl start mysqld # 启动后端应用 nohup java -jar /opt/blog/app/blog-api.jar \ --spring.profiles.activeprod \ /opt/blog/logs/application.log 21 # 启动Nginx systemctl start nginx健康检查脚本(healthcheck.sh)#!/bin/bash # 检查MySQL状态 mysql_status$(systemctl is-active mysqld) if [ $mysql_status ! active ]; then echo MySQL is not running! exit 1 fi # 检查应用进程 if ! pgrep -f blog-api.jar /dev/null; then echo Application is not running! exit 1 fi # 检查端口监听 if ! netstat -tulnp | grep :8080 /dev/null; then echo Application port is not listening! exit 1 fi echo All services are running normally exit 06. 经验总结与优化建议6.1 项目亮点完整的自动化测试体系从功能测试到接口测试再到性能测试建立了全方位的质量保障清晰的代码结构严格遵循分层架构模块职责单一高效的部署方案使用脚本实现一键部署降低运维成本详细的文档记录测试用例、部署步骤等均有完整文档6.2 待改进点用户系统不完善缺少注册、密码找回等功能前端交互较简单没有使用现代前端框架体验有待提升安全性不足缺乏XSS防护、CSRF防御等安全措施性能瓶颈高并发场景下数据库连接成为瓶颈6.3 优化方向引入缓存使用Redis缓存热点数据减轻数据库压力前端重构采用Vue/React框架提升交互体验安全加固增加输入校验、防注入等安全措施微服务化将单体应用拆分为微服务提高可扩展性这个项目虽然功能简单但完整走完了从开发到测试再到部署的全流程让我对Spring Boot全栈开发有了更深入的理解。特别是在自动化测试方面积累了不少实战经验这对保证项目质量至关重要。后续计划在此基础上继续迭代将其发展为一个功能更完善的博客平台。

相关推荐

重组蛋白表达系统选择与优化指南
重组蛋白表达系统选择与优化指南

1. 重组蛋白表达系统概述重组蛋白表达技术是现代生命科学研究的基石工具之一。作为一名在蛋白表达领域工作多年的研究者,我深刻理解选择合适的表达系统对实验成败的决定性影响。记得刚进实验室时,我曾花费三个月时间在大肠杆菌系统中尝试表达一个需要糖基… · 2026/9/23 5:58:54

高校实验室预约系统设计与SSM框架实践
高校实验室预约系统设计与SSM框架实践

1. 项目背景与核心价值实验室预约管理平台是高校信息化建设中不可或缺的一环。传统的人工预约方式存在诸多痛点:纸质登记易丢失、预约冲突频发、数据统计困难、审批流程冗长。2026届计算机相关专业学生选择这个课题作为毕业设计,既符合当前教育信息化趋势… · 2026/9/23 5:58:54

3天搞懂电脑辐射监控,保姆级教程避开面试坑
3天搞懂电脑辐射监控,保姆级教程避开面试坑

3天搞懂电脑辐射监控,保姆级教程避开面试坑 上周陪一个老弟模拟面试,面试官轻飘飘问了一句:“你们微服务里怎么处理高频的传感器数据?”他愣了三秒,支支吾吾说“用Redis缓存吧”。面试官追问:“如果缓存穿透了,或者辐射值突然飙升触发告警,怎么… · 2026/9/23 5:58:54

从Prompt到Harness:AI工程实践的新范式
从Prompt到Harness:AI工程实践的新范式

这两年要是在AI圈混,你肯定没少听人聊 Prompt。早先大家比的都是谁的提示词写得“妖”,什么角色扮演、思维链、Few-shot,恨不得把提示词写成八股文。可到2025年,风向突然变了——越来越多团队开始聊 Harness,甚至有人说… · 2026/9/23 7:48:43

3招搞定less命令性能瓶颈,面试高频考点全解析
3招搞定less命令性能瓶颈,面试高频考点全解析

3招搞定less命令性能瓶颈,面试高频考点全解析 配置环境就卡半天?别急着重装系统。很多后端和运维同学在Linux服务器上查看大日志时, less 命令一打开就假死,或者翻页卡顿到怀疑人生。这不仅是体验问题,更是 高频面试题… · 2026/9/23 7:48:37

面试官追问图片剪裁原理?手写实现一次讲透
面试官追问图片剪裁原理?手写实现一次讲透

面试官追问图片剪裁原理?手写实现一次讲透 面试被问“手写实现一个图片剪裁功能”,脑子瞬间空白?别慌,大多数候选人卡在“怎么算坐标”和“内存泄漏”这两个坑上。今天咱们不背八股文,直接拆解底层逻辑,把 Canvas API… · 2026/9/23 7:48:31

I2C开漏输出与上拉电阻的物理层原理及工程实践
I2C开漏输出与上拉电阻的物理层原理及工程实践

1. 为什么I2C的两根线——SDA和SCL——从来不敢“主动拉高”?你拆过任何一块带传感器的开发板,十有八九会看到两根细线标着“SDA”和“SCL”。它们不接电源,不接地,只连着几个上拉电阻,像两条悬在半空的神经。可就是这… · 2026/9/23 7:48:31

OpenClaw技术社会化:从水质监测到赛博养虾的演变
OpenClaw技术社会化:从水质监测到赛博养虾的演变

1. 项目背景与现象解析OpenClaw这个听起来像科技产品的名字,最近在社交平台上却和"养龙虾"产生了奇妙的化学反应。最初只是某个技术论坛里关于自动化养殖的玩笑式讨论,没想到短短两个月就演变成了跨越科技圈、农业圈甚至金融圈的复合型社会现象… · 2026/9/23 7:48:06

极路由1s图解原理:版本升级API全变后的底层重构实战
极路由1s图解原理:版本升级API全变后的底层重构实战

极路由1s图解原理:版本升级API全变后的底层重构实战 版本升级后 API 全变了,接口文档失效,旧代码直接崩盘。 这不是极路由 1s 独有的问题,而是嵌入式 Linux 固件迭代中常见的“断代”现象。… · 2026/9/23 7:48:06

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码