Spring Boot + Vue3 全栈博客项目实战:从零搭建到部署上线
2026/7/22 7:41:49 网站建设 项目流程

这次我们来看一个基于 Spring Boot 和 Vue3 的博客管理项目。对于 Java 开发者,尤其是正在准备毕业设计或丰富简历的同学来说,一个功能完整、技术栈主流的个人博客系统是极具价值的实战项目。它不仅能帮你串联起前后端分离开发的核心流程,更能作为你技术能力的直接展示。

这个项目的核心是让你快速拥有一个属于自己的、可部署的博客网站。它采用了当前企业级开发中非常流行的技术组合:后端使用 Spring Boot 提供 RESTful API,前端使用 Vue3 构建现代化的用户界面。文章将带你从零开始,完成环境搭建、项目启动、功能测试到部署上线的完整流程。你会了解到如何配置数据库、如何启动前后端服务、如何进行基本的文章管理操作,以及如何将这个项目转化为你简历上的一个亮点。

无论你是想深入学习 Spring Boot 和 Vue3 的整合,还是急需一个高质量的毕设项目,这篇文章提供的“手把手”指南都能让你在一小时内看到成果,并理解其背后的技术脉络。

1. 核心能力速览

在深入代码之前,我们先快速了解这个博客项目的核心特性和技术栈,判断它是否适合你的需求。

能力项说明
项目类型前后端分离的个人博客管理系统
技术栈后端:Spring Boot, MyBatis/MyBatis-Plus, MySQL
前端:Vue3, Element Plus, Axios
主要功能用户登录、文章分类管理、文章发布/编辑/删除、文章列表展示、标签管理、评论功能(通常具备)
部署方式后端可打包为 Jar 独立运行;前端打包后由 Nginx 等静态服务器托管
启动门槛需本地安装 JDK 8+、Node.js 16+、MySQL 5.7+ 或 Docker 环境
是否提供API是,标准的 RESTful API,便于二次开发或对接其他客户端
是否支持一键启动通常提供详细的启动脚本或 Docker Compose 配置,但需先完成环境配置
适合场景Java/Vue 初学者练手、毕业设计、个人博客搭建、全栈项目经验积累

2. 适用场景与使用边界

这个博客项目主要面向以下几类开发者:

  1. Java 后端与 Vue 前端学习者:希望通过一个完整项目理解前后端如何通过 API 交互。
  2. 计算机相关专业毕业生:需要一个结构清晰、技术栈不过时、文档齐全的毕业设计项目。
  3. 求职者:需要能体现自身 Spring Boot 和 Vue3 开发能力的实战项目填充简历。
  4. 技术博客爱好者:希望拥有一个代码可控、可自定义功能的个人博客平台。

它能解决的问题:

  • 技术整合实践:将 Spring Boot、MyBatis、Vue3、Vue Router、Pinia/Vuex、Element Plus 等流行技术栈串联应用。
  • CRUD业务理解:通过文章、分类、标签、用户等实体的增删改查,深入理解后台管理系统的典型业务逻辑。
  • 前后端协作流程:掌握从接口设计、后端实现、前端调用到页面渲染的完整开发链路。
  • 项目部署经验:获得将 Spring Boot 应用和 Vue 前端打包并部署到服务器的基础经验。

使用边界与注意事项:

  • 非生产级:作为学习或毕设项目,其在安全性(如更细粒度的权限控制、SQL注入深度防护)、高并发、数据备份等方面的考虑可能不如成熟开源项目(如 WordPress、Halo)。
  • 版权与内容合规:部署后发布的内容需遵守相关法律法规,尊重原创,避免侵权。
  • 自定义需求:项目提供了基础框架,但深度的UI美化、附加功能(如SEO优化、第三方登录、图床集成)需要自行开发。

3. 环境准备与前置条件

开始之前,请确保你的开发环境满足以下要求。这是项目能成功运行的基础。

1. 后端开发环境:

  • JDK:版本 1.8 或更高(推荐 JDK 8, 11, 17)。在终端输入java -version验证。
  • Maven:用于管理项目依赖和构建。版本 3.6+。输入mvn -v验证。
  • IDE:IntelliJ IDEA(推荐)或 Eclipse。
  • MySQL:版本 5.7 或 8.0。你需要准备一个空的数据库,例如my_blog

2. 前端开发环境:

  • Node.js:版本 16.x 或更高(推荐 18.x LTS)。这是运行 Vue 和包管理工具 npm/pnpm/yarn 的前提。输入node -vnpm -v验证。
  • 包管理器:npm(随 Node.js 安装)或更快的 pnpm/yarn。本文以 npm 为例。
  • IDE/编辑器:Visual Studio Code(推荐)或 WebStorm。

3. 可选工具:

  • Git:用于克隆项目源码。
  • Docker & Docker Compose:如果你希望通过容器化方式一键启动所有服务(MySQL + 后端)。
  • Postman 或 Apifox:用于测试后端 API 接口。
  • 浏览器开发者工具:用于前端调试。

4. 资源准备:

  • 从提供的源码地址获取项目。通常项目结构包含backend(Spring Boot)和frontend(Vue3)两个独立目录。
  • 准备好你的 MySQL 连接信息:主机(通常是localhost)、端口(通常是3306)、数据库名、用户名和密码。

4. 安装部署与启动方式

我们将分步启动后端和前端服务。请严格按照顺序操作。

4.1 后端服务启动

步骤一:导入项目并配置数据库

  1. 使用 IDEA 打开backend目录。
  2. 找到配置文件,通常是src/main/resources/application.ymlapplication.properties
  3. 修改数据库连接配置,填入你在环境准备阶段创建的数据库信息。
# application.yml 示例配置 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/my_blog?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root # 你的数据库用户名 password: yourpassword # 你的数据库密码

步骤二:初始化数据库表项目通常会提供数据库初始化脚本(sql文件),你需要在 MySQL 中执行它来创建表结构和初始数据。如果项目使用了 Flyway 或 MyBatis-Plus 的自动建表功能,则可能在首次启动时自动完成。

步骤三:启动 Spring Boot 应用在 IDEA 中找到主启动类(通常带有@SpringBootApplication注解,类名如BlogApplication),右键运行Run。 或者使用 Maven 命令启动:

cd backend mvn spring-boot:run

看到控制台输出类似Tomcat started on port(s): 8080的信息,说明后端服务启动成功。默认端口通常是8080

4.2 前端服务启动

步骤一:安装依赖frontend目录下打开终端,执行以下命令安装项目所需的所有 npm 包。

cd frontend npm install # 如果网络较慢,可以使用淘宝镜像:npm install --registry=https://registry.npmmirror.com

这个过程会创建node_modules文件夹,下载所有依赖。

步骤二:配置后端 API 地址前端需要知道后端服务的地址以发起请求。找到前端项目的配置文件,通常是src/config/index.js.env.developmentvite.config.js中关于代理的配置。 你需要将代理目标指向正在运行的后端地址(例如http://localhost:8080)。

// vite.config.js 示例 (Vite项目) import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [vue()], server: { proxy: { '/api': { // 假设你的后端接口都以 /api 开头 target: 'http://localhost:8080', changeOrigin: true, // rewrite: (path) => path.replace(/^\/api/, '') // 根据实际情况决定是否需要重写路径 } } } })

步骤三:启动开发服务器frontend目录下执行:

npm run dev # 或 npm run serve # 取决于项目是用 Vite 还是 Vue CLI 创建的

控制台会输出本地访问地址,通常是http://localhost:5173(Vite) 或http://localhost:8081。用浏览器打开此地址。

5. 功能测试与效果验证

服务启动后,我们通过实际操作来验证核心功能是否正常。这是判断项目是否成功运行的关键。

5.1 用户登录测试

  1. 目的:验证前后端连通性及用户认证模块。
  2. 操作:访问前端首页,找到登录入口。输入默认的管理员账号密码(常见如 admin/123456,具体查看项目文档或数据库初始脚本)。
  3. 预期:点击登录后,页面跳转到后台管理首页或文章列表页,浏览器开发者工具 Network 标签中能看到登录接口(如/api/login)返回成功的状态码(如 200)和 token 信息。
  4. 成功标志:登录后页面显示用户信息或出现登出按钮,并且可以访问需要权限的页面(如文章管理)。

5.2 文章管理功能测试

这是博客的核心。

  1. 新增文章
    • 操作:在管理后台找到“写文章”或“新增”按钮,进入文章编辑页面。填写标题、选择分类、添加标签、编写内容(支持Markdown编辑器是加分项),点击“发布”或“保存”。
    • 预期:页面提示“发布成功”,并在文章列表页能看到刚创建的文章。
    • 验证:同时检查数据库article表,应有一条对应的新记录。
  2. 编辑文章
    • 操作:在文章列表页,找到刚创建的文章,点击“编辑”。
    • 预期:跳转到编辑页面,内容与发布时一致。修改部分内容后保存。
    • 验证:刷新列表或查看详情,确认修改已生效。
  3. 删除文章
    • 操作:点击文章列表的“删除”按钮,并确认。
    • 预期:该文章从列表消失,页面有删除成功提示。
    • 验证:数据库article表中对应记录的deleted字段可能被标记为1(逻辑删除)或记录被物理删除。
  4. 文章列表与详情查看
    • 操作:退出后台,访问博客前台首页(可能是一个不同的端口或路由,如/index)。
    • 预期:首页能正常展示文章列表(标题、摘要、发布时间等)。点击任意文章标题,能进入文章详情页,完整显示内容和格式。

5.3 分类与标签管理测试

  1. 操作:在后台管理页面,尝试新增、编辑、删除文章分类和标签。
  2. 预期:操作后,在文章编辑页面能正确关联到新创建的分类和标签。
  3. 验证:发布一篇带有新分类和标签的文章,然后在前台查看,确认分类和标签显示正确。

5.4 接口直接测试(可选但推荐)

使用 Postman 或 Apifox 直接调用后端 API,绕过前端界面,更纯粹地测试后端逻辑。

  1. 获取文章列表GET http://localhost:8080/api/articles
  2. 发布新文章POST http://localhost:8080/api/article,在 Body 中传入 JSON 格式的文章数据。
  3. 验证响应:检查返回的状态码、数据格式是否符合预期。

6. 接口 API 与批量任务

理解项目的 API 设计是进行二次开发和集成的基础。虽然本项目主要面向 Web 界面,但其后端本质是一个 API 服务器。

6.1 核心 API 概览

一个典型的博客系统会提供以下 RESTful 接口:

功能模块请求方法接口路径示例说明
用户认证POST/api/login用户登录,返回 token
POST/api/logout用户登出
文章管理GET/api/articles分页获取文章列表
GET/api/article/{id}根据ID获取文章详情
POST/api/article新增文章
PUT/api/article修改文章
DELETE/api/article/{id}删除文章
分类管理GET/api/categories获取所有分类
POST/api/category新增分类
DELETE/api/category/{id}删除分类
标签管理GET/api/tags获取所有标签
POST/api/tag新增标签

6.2 API 调用示例

以下是一个使用 Pythonrequests库调用登录和发布文章接口的示例。你可以用任何你熟悉的语言进行测试。

import requests import json # 1. 登录获取 token login_url = "http://localhost:8080/api/login" login_data = { "username": "admin", "password": "123456" } login_resp = requests.post(login_url, json=login_data) if login_resp.status_code == 200: token = login_resp.json().get('data').get('token') # 根据实际返回结构调整 print(f"登录成功,token: {token}") else: print("登录失败") exit() # 2. 使用 token 发布文章 headers = { 'Authorization': f'Bearer {token}', # 或可能是 'X-Token: {token}',根据项目实际 'Content-Type': 'application/json' } article_url = "http://localhost:8080/api/article" article_data = { "title": "通过API发布的测试文章", "content": "这是通过Python脚本调用API发布的文章内容。", "categoryId": 1, "tagIds": [1, 2], "status": 1 # 1表示发布,0可能表示草稿 } article_resp = requests.post(article_url, headers=headers, json=article_data) print(f"发布文章状态码: {article_resp.status_code}") print(f"响应内容: {article_resp.text}")

6.3 关于“批量任务”

对于博客系统,典型的“批量任务”可能包括:

  • 批量导入文章:编写脚本,读取本地 Markdown 文件或从其他平台导出的数据,循环调用POST /api/article接口。
  • 批量更新分类/标签:遍历文章列表,调用更新接口。
  • 数据备份与导出:定期调用查询接口,将数据保存为 JSON 或 SQL 文件。

这些都需要你根据业务需求,基于现有的 API 进行脚本开发。项目本身通常不提供图形化的批量操作界面。

7. 资源占用与性能观察

作为一个 Spring Boot + Vue 的轻量级应用,在开发和学习阶段,其资源占用通常不是问题,但了解如何观察和优化是有益的。

1. 后端服务资源占用:

  • 内存:一个刚启动的 Spring Boot 博客应用,JVM 堆内存占用通常在 200MB - 500MB 之间,具体取决于依赖和启动参数。你可以使用jconsolejvisualvm(JDK 自带)或arthas等工具监控。
  • CPU:在无并发请求时,CPU 占用率极低。在发布文章、处理 Markdown 渲染时会有短暂峰值。
  • 数据库连接:观察 MySQL 的连接数,确保连接池(如 HikariCP)配置合理,没有泄漏。

2. 前端开发服务器资源占用:

  • 内存:Node.js 开发服务器(如 Vite)内存占用通常在 100MB - 300MB。
  • 热更新性能:Vite 的热更新速度远快于传统的 Webpack。如果感觉慢,检查是否安装了过多大型依赖或配置了低效的插件。

3. 生产环境部署考虑:

  • 后端:使用java -jar启动时,可通过-Xms-Xmx参数设置 JVM 堆内存初始大小和最大大小。例如-Xms256m -Xmx512m
  • 前端:运行npm run build后,生成的dist文件夹是纯静态文件,由 Nginx 托管,几乎不消耗服务器动态资源。
  • 数据库:随着文章数量增加,需关注article表的大小,并为经常查询的字段(如category_id,status,create_time)建立索引以优化查询速度。

4. 简单监控命令:

  • 在 Linux/Mac 上,可以使用tophtop查看 Java 和 Node 进程的 CPU 和内存占用。
  • 在 Windows 上,可以通过任务管理器查看。

8. 常见问题与排查方法

在部署和运行过程中,你可能会遇到以下问题。这里提供通用的排查思路。

问题现象可能原因排查方式解决方案
后端启动失败,端口冲突8080 端口被其他程序占用控制台报错Port 8080 was already in use1. 终止占用端口的进程。
2. 在application.yml中修改server.port为其他端口,如8081
前端启动失败,依赖安装报错Node.js 版本不兼容或网络问题查看npm install的错误信息1. 确保 Node.js 版本符合要求。
2. 使用npm cache clean --force清除缓存后重试。
3. 切换 npm 镜像源:npm config set registry https://registry.npmmirror.com
前端页面能打开,但列表为空或登录失败前端代理配置错误,无法连接到后端 API1. 打开浏览器开发者工具,查看 Network 标签中 API 请求的状态码是否为 404 或 500。
2. 检查请求的 URL 是否正确指向后端服务。
1. 确认后端服务是否在运行 (localhost:8080)。
2. 核对前端项目中的代理配置(如vite.config.js),确保 target 地址正确。
登录成功但无法进行增删改操作1. 前端未正确携带 token。
2. 后端接口权限验证失败。
1. 查看请求头中是否有AuthorizationX-Token
2. 查看后端控制台是否有权限相关的日志。
1. 检查前端请求拦截器,确保登录后 token 被正确存储和设置到后续请求头中。
2. 检查后端 Spring Security 或拦截器的配置。
数据库连接失败1. 数据库服务未启动。
2. 配置文件中用户名、密码、数据库名错误。
3. 数据库驱动版本不匹配。
后端启动时控制台会打印详细的数据库连接错误信息。1. 启动 MySQL 服务。
2. 仔细检查application.yml中的数据库连接配置。
3. 确认pom.xml中的 MySQL 驱动版本与安装的 MySQL 版本兼容。
前端打包后,访问页面空白或资源4041. 静态资源路径错误。
2. Nginx 配置未指向正确的dist目录。
查看浏览器控制台报错,确认是哪个 JS/CSS 文件加载失败。1. 在vite.config.js中配置正确的base路径(如果部署在子路径下)。
2. 检查 Nginx 配置,rootalias指向前端dist目录的绝对路径。

9. 最佳实践与使用建议

为了让这个项目更好地为你服务,无论是用于学习、毕设还是作为个人博客的起点,遵循以下建议可以事半功倍。

  1. 代码阅读与理解优先:在急于添加功能之前,先花时间通读一遍前后端的主要代码结构。理解控制器(Controller)、服务(Service)、数据访问层(Mapper/DAO)的分层,以及前端的路由、组件和状态管理。
  2. 版本控制:立即将项目初始化为你的 Git 仓库(如果源码本身不是 Git 仓库)。在修改任何核心代码前进行提交,便于回溯。
  3. 数据库管理:为你的开发、测试环境使用不同的数据库或至少不同的表前缀。考虑使用 Flyway 或 Liquibase 来管理数据库版本变更,而不是手动执行 SQL 脚本。
  4. 配置外部化:不要将数据库密码等敏感信息硬编码在application.yml中。使用 Spring Boot 的@ConfigurationProperties或环境变量来管理配置。对于前端,不同环境的 API 地址可以通过.env.development.env.production文件区分。
  5. 安全性增强(针对毕设或生产)
    • 密码加密:确保用户密码在数据库中是加密存储的(如使用 BCrypt)。
    • API 防护:除了登录接口,其他增删改查接口都应进行身份认证和权限校验。
    • 输入验证:在后端对用户输入(如文章标题、内容)进行有效性验证和过滤,防止 XSS 攻击。
    • SQL 注入:坚持使用 MyBatis 的参数绑定(#{}),避免字符串拼接。
  6. 功能扩展方向
    • SEO 优化:为文章详情页生成静态的、对搜索引擎友好的 URL(如/article/123.html)。
    • 评论系统:集成第三方评论服务(如 Gitalk, Waline)或自行实现。
    • 全文搜索:集成 Elasticsearch 或使用 MySQL 全文索引,实现文章内容搜索。
    • 文件上传:实现将本地图片上传到服务器或第三方图床(如 OSS、七牛云),并在文章中引用。
    • 后台仪表盘:增加数据统计面板,显示文章数、访问量等。
  7. 部署实践
    • 学习使用 Docker 将后端应用和 MySQL 容器化,编写Dockerfiledocker-compose.yml
    • 学习使用 GitHub Actions 或 Jenkins 设置简单的 CI/CD 流程,实现代码推送后自动构建和部署。
    • 购买一个最基础的云服务器(如 1核2G),尝试将你的博客部署到公网,体验完整的运维流程。

10. 总结与下一步

这个 Spring Boot + Vue3 的博客项目为你提供了一个绝佳的、贴近企业开发流程的实战沙盒。它的价值不在于功能有多么惊艳,而在于提供了一个清晰、完整、可运行的全栈应用骨架。通过完成环境搭建、功能测试和问题排查,你已经走完了一个小型软件项目的核心生命周期。

最值得尝试的点:不是简单地运行起来,而是尝试修改它。比如,给文章增加一个“浏览量”字段,并在前台展示;或者增加一个“友情链接”管理模块。这个过程会强迫你去阅读前后端代码,理解数据如何从数据库流动到前端页面,这是提升工程能力的关键。

最先应该验证的功能:确保“登录 -> 发布文章 -> 前台查看”这条主链路完全畅通。这是博客系统的核心价值所在。

最容易踩的坑:环境配置(尤其是 Node.js 和 Java 版本)、前后端联调时的跨域或代理问题、数据库连接配置。按照本文的步骤和排查清单,大部分问题都能解决。

下一步可以做什么

  1. 代码重构:尝试用更优雅的方式实现某个功能,比如用 MyBatis-Plus 的 Service 层封装替换手写的通用 Mapper 方法。
  2. 技术栈升级:将 Vue3 的选项式 API 改为组合式 API;尝试用 Pinia 替换 Vuex 进行状态管理。
  3. 项目文档化:为你修改后的项目编写清晰的 README.md,说明项目特点、部署步骤和配置方法。这既是良好的习惯,也是面试时的加分项。
  4. 接入云服务:尝试将图片存储改为阿里云 OSS,或接入第三方登录(如 GitHub OAuth)。

把这个项目吃透,你收获的不仅仅是一个可以运行的博客,更是一套应对未来更复杂项目的思维方式和实践能力。建议收藏本文,在实践过程中遇到具体问题时,再回来对照相关章节进行排查。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询