这次我们来看一个基于 SpringBoot3 和 Vue3 的前后端分离博客系统。对于 2026 届的 Java 毕业生来说,这是一个非常典型的毕业设计选题,它涵盖了现代企业级 Web 开发的核心技术栈。这个项目的重点不在于概念有多新,而在于它能否让你在本地环境顺利跑起来,并理解前后端分离架构的完整工作流程。
这个项目是一个个人博客系统,后端采用 SpringBoot3 框架,前端使用 Vue3 构建,两者通过 RESTful API 进行通信。从 GitHub 仓库信息来看,项目状态为“正在开发中”,这意味着它可能是一个学习或练手项目,非常适合作为毕业设计的起点或参考。它的核心价值在于提供了一个完整的、可运行的代码框架,让你能快速上手 SpringBoot3 和 Vue3 的整合开发。
本文将带你完成从环境准备、项目启动到核心功能验证的全过程。我们会重点关注几个关键点:项目结构如何组织、前后端如何独立运行与联调、数据库如何配置、以及如何通过接口文档进行测试。如果你正在寻找一个能跑通、能理解、能二次开发的 Java Web 项目,这篇文章可以直接收藏。
1. 核心能力速览
在深入细节之前,我们先通过一个表格快速了解这个项目的核心规格和特点,这有助于你判断它是否适合你的学习和开发环境。
| 能力项 | 说明 |
|---|---|
| 项目类型 | 前后端分离的个人博客系统 |
| 技术栈 |
后端:SpringBoot3, SpringSecurity, MyBatis, MySQL, Redis, Knife4j (接口文档)
前端:Vue3, Element-Plus, Vue Router, Pinia, Axios |
| 核心功能 | 用户认证与授权、博客文章管理(增删改查)、Markdown 编辑器、文章分类/标签、评论系统(可能) |
| 开发状态 | 正在开发中(适合学习、二次开发,生产环境需完善) |
| 硬件门槛 | 无特殊要求,普通开发机即可。需要安装 JDK 17+、Node.js、MySQL、Redis。 |
| 启动方式 | 后端通过 IDE 或 Maven 命令启动;前端通过 npm 命令启动。需分别启动两个服务。 |
| 接口能力 | 提供 RESTful API,并通过 Knife4j 生成可视化接口文档,便于调试和对接。 |
| 适合场景 | Java/Vue 初学者练手、毕业设计项目、前后端分离架构学习、个人博客搭建原型。 |
2. 适用场景与使用边界
这个项目最适合以下几类开发者:
- Java 后端学习者 :希望深入理解 SpringBoot3、SpringSecurity、MyBatis 以及 Redis 缓存的实际应用。
- Vue3 前端学习者 :想学习如何使用 Vue3 的 Composition API、Pinia 状态管理、以及如何与后端 API 进行交互。
- 全栈开发入门者 :希望通过一个完整项目理解前后端分离的开发模式、接口定义、跨域处理及项目部署流程。
- 毕业设计需求者 :需要一个结构清晰、技术栈主流、可扩展性强的项目作为毕设基础。
它能解决什么问题?
- 技术栈整合 :提供了一个 SpringBoot3 与 Vue3 协同工作的现成范例。
- 工程化实践 :展示了如何组织多模块的 Maven 项目、如何管理前端依赖、以及如何配置开发与生产环境。
- 常见功能实现 :包含了用户系统、权限控制、数据持久化、缓存应用等 Web 应用的通用模块。
需要注意的使用边界:
- 非生产就绪 :由于项目状态为“正在开发中”,其代码健壮性、安全性、性能优化可能尚未达到生产级别。直接用于线上服务需要经过严格的代码审查、压力测试和安全加固。
- 功能完整性 :作为学习或毕设项目,其功能可能不如成熟的博客系统(如 WordPress、Hexo)全面,例如可能缺少SEO优化、邮件通知、第三方登录等高级功能。
- 版权与合规 :如果基于此项目进行二次开发并商用,请注意遵守相关开源协议(通常是 MIT 或 Apache 2.0),并确保你添加的所有内容(文章、图片)拥有合法版权或授权。
3. 环境准备与前置条件
在拉取代码之前,请确保你的本地开发环境满足以下要求。这是项目能够成功启动和运行的基础。
操作系统 :Windows 10/11, macOS, 或 Linux 发行版均可。 后端环境 :
-
JDK 17+
:SpringBoot 3.x 要求 JDK 17 或更高版本。可以通过
java -version命令验证。 -
Maven 3.6+
:用于管理项目依赖和构建。通过
mvn -v命令验证。 -
MySQL 5.7+/8.0
:项目的主要数据库。你需要提前安装并启动 MySQL 服务,并创建一个空的数据库(例如
my_blog)。 - Redis :用于缓存会话(Session)或其他热点数据。需要安装并启动 Redis 服务。
前端环境 :
-
Node.js 16+
:建议使用 LTS 版本。通过
node -v和npm -v命令验证。 - 包管理器 :可以使用 npm 或 yarn 或 pnpm。本文以 npm 为例。
开发工具 :
- IDE :推荐使用 IntelliJ IDEA(社区版或旗舰版)进行后端开发,使用 Visual Studio Code 或 WebStorm 进行前端开发。
- 数据库工具 :如 Navicat、DBeaver 或 MySQL Workbench,用于管理数据库。
- API 测试工具 :如 Postman 或 Insomnia,用于测试后端接口。不过项目集成了 Knife4j,可以直接在浏览器中测试。
磁盘空间 :准备至少 1GB 的可用空间用于存放项目代码、依赖包和本地运行时的数据。
4. 安装部署与启动方式
接下来,我们一步步将项目在本地运行起来。整个过程分为克隆项目、配置后端、配置前端、分别启动服务四个主要步骤。
4.1 获取项目代码
首先,从 GitHub 克隆项目到本地。打开终端(或 Git Bash),执行以下命令:
git clone https://github.com/Bsheepcoder/Myblog-SpringBoot.git
cd Myblog-SpringBoot
克隆完成后,用 IDE 打开项目根目录。你会看到类似如下的结构:
Myblog-SpringBoot/
├── backend/ # SpringBoot 后端项目
├── fronted/ # 博客前台 Vue3 项目
├── fronted-admin/ # 博客后台管理 Vue3 项目(如果存在)
├── README.md
└── ... (其他配置文件)
4.2 后端项目配置与启动
步骤 1:导入并配置数据库
-
在你的 MySQL 中创建一个新数据库,例如
my_blog,字符集建议使用utf8mb4。 -
在
backend/src/main/resources/目录下,找到application.yml或application.properties文件(具体看项目使用哪个)。 - 修改其中的数据库连接配置,包括 URL、用户名和密码。
# application.yml 示例配置片段
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/my_blog?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: your_password
redis:
host: localhost
port: 6379
# password: 如果你的Redis有密码,请配置
database: 0
步骤 2:检查并安装依赖
使用 IDE 打开
backend
目录下的
pom.xml
文件,IDE(如 IntelliJ IDEA)通常会提示自动下载 Maven 依赖。你也可以在终端进入
backend
目录,手动执行:
mvn clean install
步骤 3:启动后端服务 依赖下载完成后,有多种方式启动:
-
通过 IDE
:找到
BackendApplication(或类似命名的)主类,右键点击Run。 -
通过命令行
:在
backend目录下执行mvn spring-boot:run。
启动成功后,控制台会输出 SpringBoot 的启动日志,并显示类似
Tomcat started on port(s): 8080
的信息,表示后端服务已在 8080 端口运行。
步骤 4:验证后端接口
打开浏览器,访问
http://localhost:8080/doc.html
。如果项目正确集成了 Knife4j,你将看到一个美观的 API 文档页面。这里列出了所有可用的接口,并可以直接进行调试,这是验证后端是否正常工作的最直观方式。
4.3 前端项目配置与启动
步骤 1:安装依赖
进入
fronted
目录(以及
fronted-admin
目录,如果存在),分别安装 Node.js 依赖。
cd fronted
npm install
# 如果存在admin项目
cd ../fronted-admin
npm install
步骤 2:配置代理(可选但推荐)
为了避免跨域问题,前端项目通常会在开发环境下配置代理,将 API 请求转发到后端服务。检查
fronted
目录下的
vite.config.js
或
vue.config.js
文件,查看是否已配置代理。如果没有,可以手动添加:
// vite.config.js 示例 (Vite)
export default defineConfig({
server: {
proxy: {
'/api': {
target: 'http://localhost:8080', // 你的后端地址
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
}
}
}
})
同时,检查前端代码中请求后端 API 的基地址(baseURL)配置,通常在
src/utils/request.js
或类似文件中,确保其指向本地代理或后端地址。
步骤 3:启动前端开发服务器
在
fronted
目录下运行:
npm run dev
# 或
npm run serve
启动成功后,终端会提示访问地址,通常是
http://localhost:5173
(Vite) 或
http://localhost:8081
(Vue CLI)。用浏览器打开该地址,即可看到博客前台页面。
步骤 4:启动后台管理前端(如果存在)
如果项目包含独立的后台管理前端 (
fronted-admin
),同样进入其目录,运行
npm run dev
,它会启动在另一个端口(如
http://localhost:5174
)。
至此,前后端服务均已独立启动。前端页面发出的 API 请求会通过代理转发到后端
localhost:8080
,完成整个前后端交互链路。
5. 功能测试与效果验证
项目启动后,我们需要系统地验证其核心功能是否正常工作。以下测试流程可以帮助你全面了解项目的运行状态。
5.1 用户认证与登录测试
这是任何带权限系统的基础。
- 访问登录页 :打开前端页面,找到登录入口。
-
尝试登录
:
-
正向测试
:使用项目中可能预设的测试账号(查看后端代码或数据库
user表)进行登录,如admin/123456。观察是否能成功跳转到主页,并且浏览器Application->Storage中是否存有token。 - 反向测试 :输入错误的用户名或密码,检查前端是否给出明确的错误提示。
-
正向测试
:使用项目中可能预设的测试账号(查看后端代码或数据库
-
接口验证
:同时打开 Knife4j 文档页 (
http://localhost:8080/doc.html),找到AuthController或LoginController下的登录接口,直接使用文档页面的“调试”功能发送请求,验证接口返回的token或用户信息是否正确。
5.2 博客文章CRUD测试
这是博客系统的核心。
-
创建文章
:
- 登录后台管理系统(或前台有权限的页面)。
-
找到“写文章”或“新增”按钮,使用集成的 Markdown 编辑器(
md-editor-v3)编写一篇包含标题、分类、标签和正文的测试文章。 -
点击发布或保存。观察页面是否提示成功,并检查数据库
article表中是否新增了一条记录。
-
查询文章列表
:
- 在前台首页或文章列表页,刷新页面,检查刚发布的文章是否出现在列表中。
- 在 Knife4j 中调试对应的文章列表查询接口,观察分页参数、返回的数据结构是否正常。
-
查看文章详情
:
- 点击前台文章列表中的文章标题,跳转到详情页。检查 Markdown 内容是否被正确渲染为 HTML。
-
检查 URL 是否可能为 RESTful 风格,如
/article/{id}。
-
更新与删除文章
:
- 在后台找到文章管理列表,尝试编辑刚才的文章,修改标题或内容后保存。
- 刷新前台详情页,确认修改已生效。
- 尝试删除该测试文章,确认其从前台列表和数据库中消失。
5.3 权限控制测试
测试 SpringSecurity 的配置是否生效。
-
未登录访问受保护资源
:打开浏览器无痕窗口,直接访问需要登录才能查看的页面(如后台首页、用户中心)或调用其对应 API。预期应被重定向到登录页或返回
401/403状态码。 - 角色权限测试 :如果系统设计了不同角色(如 admin、user),使用一个普通用户账号登录,尝试访问仅管理员可见的功能或接口(如用户管理),验证是否被正确拦截。
5.4 缓存功能验证
测试 Redis 是否正常工作。
- 观察日志 :在查询文章列表或详情时,观察后端控制台日志。首次查询应打印 SQL 语句,后续短时间内再次查询可能不打印 SQL,这可能是缓存生效的表现。
-
检查Redis数据
:使用 Redis 客户端工具(如
redis-cli或 Another Redis Desktop Manager)连接本地 Redis,查看是否有以项目名或特定前缀(如blog:)开头的 key,这可能是缓存的文章数据或会话信息。
通过以上测试,你可以基本确认项目的核心业务流程是通畅的。如果在某个环节失败,就需要根据错误信息进入排查阶段。
6. 接口 API 与批量任务
对于前后端分离项目,清晰、稳定的 API 是前后端协同开发的基石。本项目通过 Knife4j 集成了 API 文档,这极大地方便了调试和对接。
6.1 接口文档使用
启动后端服务后,访问
http://localhost:8080/doc.html
即可进入 Knife4j 的文档界面。在这里你可以:
- 查看所有接口 :按控制器分组,清晰展示每个接口的路径、方法、参数和返回值说明。
- 在线调试 :这是最实用的功能。你可以直接在文档页填写请求参数(Path, Query, Body),点击“发送”按钮,即可看到真实的接口响应。这比使用 Postman 更快捷,尤其是在开发初期接口频繁变动时。
- 下载文档 :Knife4j 支持导出 OpenAPI (Swagger) 格式的 JSON 文件,可供其他工具导入。
6.2 前端 API 调用示例
在前端 Vue3 项目中,API 调用通常封装在
src/api/
目录下的模块中。以下是一个典型的基于 Axios 的请求封装和文章接口调用示例:
// src/utils/request.js - Axios 实例封装
import axios from 'axios'
import { ElMessage } from 'element-plus' // 假设使用 Element Plus 的提示组件
import router from '@/router'
const service = axios.create({
baseURL: import.meta.env.VITE_APP_BASE_API, // 从环境变量读取,开发环境可能是 /api
timeout: 10000
})
// 请求拦截器:添加 token
service.interceptors.request.use(
config => {
const token = localStorage.getItem('token')
if (token) {
config.headers['Authorization'] = `Bearer ${token}`
}
return config
},
error => {
return Promise.reject(error)
}
)
// 响应拦截器:统一处理错误
service.interceptors.response.use(
response => {
const res = response.data
// 假设后端统一返回格式为 { code: 200, data: {}, message: 'success' }
if (res.code !== 200) {
ElMessage.error(res.message || 'Error')
// 如果是 401 未授权,跳转登录页
if (res.code === 401) {
router.push('/login')
}
return Promise.reject(new Error(res.message || 'Error'))
} else {
return res
}
},
error => {
ElMessage.error(error.message || 'Request Error')
return Promise.reject(error)
}
)
export default service
// src/api/article.js - 文章相关接口
import request from '@/utils/request'
// 获取文章列表
export function getArticleList(params) {
return request({
url: '/article/list',
method: 'get',
params // { pageNum: 1, pageSize: 10, categoryId: xxx }
})
}
// 获取文章详情
export function getArticleDetail(id) {
return request({
url: `/article/${id}`,
method: 'get'
})
}
// 创建文章
export function createArticle(data) {
return request({
url: '/article',
method: 'post',
data
})
}
// 更新文章
export function updateArticle(id, data) {
return request({
url: `/article/${id}`,
method: 'put',
data
})
}
// 删除文章
export function deleteArticle(id) {
return request({
url: `/article/${id}`,
method: 'delete'
})
}
<!-- 在 Vue 组件中使用 -->
<script setup>
import { onMounted, ref } from 'vue'
import { getArticleList } from '@/api/article'
const articleList = ref([])
const loading = ref(false)
const fetchData = async () => {
loading.value = true
try {
const res = await getArticleList({ pageNum: 1, pageSize: 10 })
articleList.value = res.data.list
} catch (error) {
console.error('Failed to fetch articles:', error)
} finally {
loading.value = false
}
}
onMounted(() => {
fetchData()
})
</script>
6.3 关于“批量任务”
在典型的博客系统中,“批量任务”可能不是核心功能。但我们可以从两个角度理解:
-
后台批量操作
:例如,在文章管理后台,提供“批量删除”、“批量移动分类”等功能。这需要前端传递选中的文章 ID 数组,后端进行循环处理或使用
IN语句。实现时需注意事务控制和性能。 -
数据导入/导出
:作为毕业设计的扩展点,你可以实现“批量导入文章(Markdown文件)”、“导出所有文章为静态文件”等功能。这属于后台作业,可能需要用到 Spring 的
@Async异步处理或更专业的任务队列(如 Quartz)。
对于这类批量操作,后端接口设计上通常接收一个 ID 列表:
// 示例:批量删除文章的接口
@DeleteMapping("/articles/batch")
public Result batchDeleteArticles(@RequestBody List<Long> ids) {
// 1. 参数校验
// 2. 执行删除(注意逻辑删除还是物理删除)
// 3. 返回结果
}
前端则需要构建一个 ID 数组并发起请求。实现时务必加入确认提示,防止误操作。
7. 资源占用与性能观察
作为一个 Java + Vue 的 Web 应用,其资源消耗主要在后端服务。本地开发时,关注以下几点有助于优化体验和了解系统行为。
1. 内存占用观察:
-
后端 (SpringBoot)
:启动后,通过系统任务管理器或
jconsole、jvisualvm(JDK 自带工具)观察 Java 进程的内存占用。一个刚启动的 SpringBoot 应用,堆内存占用通常在 200MB - 500MB 之间,具体取决于依赖的多少和启动时加载的数据。如果发现内存持续增长(内存泄漏),需要检查是否有未关闭的资源(如数据库连接、文件流)或缓存策略不当。 - 前端 (Node.js Dev Server) :开发服务器的内存占用通常不高,几十到一百多 MB。
2. CPU 占用: 在本地开发调试时,CPU 占用通常不是问题。但在执行某些操作时(如启动服务、编译前端资源、数据库全表查询),可能会出现瞬时 CPU 飙升,这属于正常现象。
3. 数据库连接池:
SpringBoot 默认使用 HikariCP 作为数据库连接池。在
application.yml
中可以配置其参数,这对于性能至关重要:
spring:
datasource:
hikari:
maximum-pool-size: 10 # 最大连接数,根据实际负载调整
minimum-idle: 5 # 最小空闲连接
connection-timeout: 30000 # 连接超时时间(ms)
idle-timeout: 600000 # 连接空闲超时时间(ms)
max-lifetime: 1800000 # 连接最大生命周期(ms)
连接池配置不当(如最大连接数过小)可能导致在高并发场景下请求被阻塞,表现为接口响应变慢。
4. 缓存效果验证: 如前所述,Redis 缓存能显著降低数据库压力。你可以通过以下方式验证:
-
关闭缓存
:在
application.yml中注释掉 Redis 配置或设置spring.cache.type=none,然后测试文章列表查询接口,使用工具(如 JMeter)模拟多次请求,观察数据库 QPS 和接口响应时间。 - 开启缓存 :重新启用 Redis,执行同样的测试。理想情况下,首次请求后,后续请求的响应时间会大幅缩短,且数据库压力几乎为零(针对缓存了的数据)。
5. 前端资源加载性能:
在浏览器开发者工具的
Network
面板中,查看前端页面加载的 JS、CSS 等静态资源的大小和耗时。使用 Vue3 + Vite 的项目在开发模式下支持热更新,体验很好。但在生产构建后 (
npm run build
),需要注意打包体积。可以使用
rollup-plugin-visualizer
等插件分析构建产物,优化过大的依赖。
对于毕业设计或学习项目,本地单机运行这些资源占用通常都在可接受范围内。重点在于理解这些指标的含义和优化方向。
8. 常见问题与排查方法
在部署和运行过程中,你可能会遇到以下典型问题。这里提供排查思路和解决方案。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 后端启动失败,端口冲突 | 本地 8080 端口已被其他程序(如另一个SpringBoot应用、Tomcat)占用。 |
1. 查看启动日志中的错误信息。
2. 在命令行执行
netstat -ano | findstr :8080
(Windows) 或
lsof -i :8080
(Mac/Linux) 查看占用进程。
|
1. 终止占用端口的进程。
2. 在
application.yml
中修改
server.port
为其他端口,如
8081
。
|
| 前端启动失败,依赖安装报错 |
1. Node.js 版本不兼容。
2. 网络问题导致 npm 包下载失败。 3.
package-lock.json
或
node_modules
缓存冲突。
|
1. 检查
node -v
和
npm -v
。
2. 查看报错信息,是否提示某个包找不到或版本冲突。 3. 尝试清除 npm 缓存。 |
1. 使用 nvm 切换 Node.js 版本至项目推荐版本。
2. 配置 npm 镜像源:
npm config set registry https://registry.npmmirror.com
。
3. 删除
node_modules
和
package-lock.json
,重新执行
npm install
。
|
| 前端页面能打开,但接口请求报 404 |
1. 后端服务未启动。
2. 前端代理配置错误。 3. 接口路径不正确。 |
1. 确认后端服务是否在运行(访问
http://localhost:8080
是否有响应)。
2. 检查浏览器开发者工具
Network
面板,看请求的 URL 是否正确转发到了后端。
3. 核对 Knife4j 文档中的接口路径与前端的请求路径。 |
1. 启动后端服务。
2. 修正
vite.config.js
或
vue.config.js
中的代理配置。
3. 确保前端请求的 URL 与后端 Controller 定义的
@RequestMapping
匹配。
|
| 数据库连接失败 |
1. MySQL 服务未启动。
2.
application.yml
中的数据库配置(URL、用户名、密码)错误。
3. 数据库驱动版本不匹配。 |
1. 检查 MySQL 服务状态。
2. 使用数据库工具(如 Navicat)尝试用配置的账号密码连接。 3. 查看启动日志中的具体 SQL 异常信息。 |
1. 启动 MySQL 服务。
2. 仔细核对并修正
application.yml
中的配置。
3. 检查
pom.xml
中
mysql-connector-java
的版本,确保与 MySQL 服务器版本兼容。
|
| 登录成功但后续请求报 401/403 |
1. Token 未正确传递。
2. Token 已过期。 3. 用户权限不足。 |
1. 检查浏览器开发者工具
Network
面板,查看请求头中是否包含
Authorization: Bearer <token>
。
2. 检查后端 Token 校验和过期时间的逻辑。 3. 检查 SpringSecurity 的权限配置。 |
1. 确保前端请求拦截器正确添加了 Token。
2. 重新登录获取新 Token。 3. 检查用户角色和接口所需的权限是否匹配,修改数据库或 Security 配置。 |
| Redis 连接失败 |
1. Redis 服务未启动。
2.
application.yml
中 Redis 配置错误(如密码、端口)。
3. 防火墙阻止了连接。 |
1. 检查 Redis 服务状态。
2. 使用
redis-cli
命令行工具测试连接。
3. 查看后端启动日志中关于 Redis 的初始化信息。 |
1. 启动 Redis 服务。
2. 修正 Redis 配置,如果 Redis 有密码,需要在配置中填写。 3. 关闭防火墙或开放对应端口。 |
| 前端页面样式错乱或组件不显示 |
1. Element Plus 等 UI 库未正确引入或版本冲突。
2. 自定义 CSS 覆盖了组件样式。 3. 浏览器缓存。 |
1. 检查
package.json
中 UI 库的版本,并确认在
main.js
或相关入口文件中正确引入。
2. 使用浏览器开发者工具的
Elements
面板检查组件 DOM 结构和应用的 CSS。
|
1. 重新安装 UI 库依赖,并检查引入代码。
2. 调整自定义 CSS 的选择器优先级或使用
scoped
样式。
3. 尝试禁用浏览器缓存或强制刷新(Ctrl+F5)。 |
| 打包部署后,前端访问后端接口跨域 | 开发环境的代理配置在构建后失效。生产环境前端静态文件和后端服务可能不在同一个域名/端口下。 | 生产环境下,跨域问题需要在后端解决,而非前端代理。 |
在后端 SpringBoot 应用中,通过配置
WebMvcConfigurer
或使用
@CrossOrigin
注解来允许前端域的跨域请求。
注意:生产环境应严格限制允许的源(origin),避免安全风险。
|
当遇到问题时,养成查看日志的习惯。后端的日志通常在控制台或
logs
目录下,前端的错误信息则在浏览器控制台 (
Console
) 和网络请求 (
Network
) 中。根据错误信息的关键字进行搜索,通常能找到解决方案。
9. 最佳实践与使用建议
基于这个项目进行学习和二次开发时,遵循以下建议可以让你事半功倍,并写出更高质量的代码。
1. 代码管理与版本控制:
- 立即将项目 fork 到你自己的 GitHub/GitLab 仓库,所有修改都在你自己的仓库中进行。
- 遵循 Git 提交规范,如 Conventional Commits,使提交历史清晰可读。
- 为不同的功能开发创建独立的分支,完成后通过 Pull Request 合并到主分支。
2. 配置分离与环境管理:
-
不要将数据库密码等敏感信息硬编码在
application.yml中。使用 Spring Boot 的 Profile 功能,创建application-dev.yml、application-prod.yml,并通过环境变量或配置中心注入敏感信息。 -
前端同样可以通过
.env.development、.env.production文件来管理不同环境的 API 基地址等变量。
3. 数据库操作:
- 使用 MyBatis 时,充分利用其动态 SQL、结果映射等功能。复杂的查询可以考虑使用 MyBatis Plus 来简化单表操作。
- 为频繁查询的字段(如文章标题、状态)建立合适的索引,但不要过度索引。
-
在设计数据表时,考虑使用逻辑删除(
is_deleted字段)而非物理删除,便于数据恢复和审计。
4. 安全加固:
- 密码存储 :确保用户密码是加盐哈希后存储的(例如使用 BCrypt),绝对不要明文存储。
-
SQL 注入
:使用 MyBatis 的
#{}占位符可以有效防止 SQL 注入,避免使用${}进行字符串拼接。 - XSS 防护 :前端在渲染用户输入的 Markdown 或富文本时,要做好转义或使用安全的渲染库。后端在接收可能包含 HTML 的内容时也要保持警惕。
- CSRF 防护 :如果系统涉及敏感操作,应启用 Spring Security 的 CSRF 防护。
-
接口权限
:细化 SpringSecurity 的权限配置,使用
@PreAuthorize注解在方法级别控制访问,遵循最小权限原则。
5. 前端开发:
- 组件化 :将可复用的 UI 和逻辑抽取成 Vue 组件,提高代码复用性和可维护性。
- 状态管理 :对于跨多个组件的状态(如用户信息),使用 Pinia 进行集中管理,避免复杂的 Prop 逐层传递。
-
API 封装
:如前文所示,将所有的 API 请求统一封装在
src/api/目录下,便于管理和维护。 - 错误处理 :在 Axios 拦截器中实现全局的错误处理(如网络错误、401、403、500等),给用户友好的提示。
6. 部署上线:
-
后端
:使用
mvn clean package打包生成可执行的 JAR 文件。在生产服务器上,建议使用systemd或Docker来管理进程,实现开机自启和故障恢复。 -
前端
:使用
npm run build生成静态文件(在dist目录)。这些文件可以部署到 Nginx、Apache 等静态文件服务器,或者与后端 JAR 包一起打包部署(SpringBoot 可以 serve 静态资源)。 - 域名与HTTPS :为你的博客申请域名,并使用 Nginx 配置反向代理和 SSL 证书,启用 HTTPS 以提升安全性。
7. 扩展功能建议(用于丰富毕设):
- 全文搜索 :集成 Elasticsearch 或使用 MySQL 全文索引,实现博客文章搜索。
- 评论与回复 :实现完整的评论系统,支持盖楼回复、邮件通知。
- 文件上传 :集成阿里云 OSS、腾讯云 COS 或本地存储,支持文章图片上传。
- 数据统计 :集成百度统计或自建访问量统计。
- SEO 优化 :为文章页面生成静态的 meta 标签,支持搜索引擎爬取。
-
Docker 化
:编写
Dockerfile和docker-compose.yml,实现一键容器化部署。
10. 总结与下一步
这个基于 SpringBoot3 和 Vue3 的博客系统项目,为你提供了一个绝佳的、贴近企业实战的 Java 全栈学习样板。它最值得尝试的点在于,你将一个完整的、前后端分离的应用从代码拉取、环境配置、服务启动到功能验证全部跑通,这个过程中遇到的每一个问题和解法,都是宝贵的经验。
对于初学者,我建议你最先验证的功能就是 “登录 -> 发布文章 -> 查看文章” 这个核心闭环。只要这个流程通了,项目的基本骨架就是健康的。最容易踩的坑集中在 环境配置 (JDK、MySQL、Redis版本)和 前后端联调 (跨域、代理、接口路径)上,按照本文第 8 节的排查方法,大部分问题都能解决。
完成基础功能验证后,下一步可以深入代码:
- 读源码 :仔细阅读后端的 Controller、Service、Mapper 层是如何协作的;前端的路由、状态管理、组件通信是如何实现的。
- 改样式 :尝试修改前端 UI,使用你喜欢的配色或组件库,理解 Vue 单文件组件的结构。
- 加功能 :从“扩展功能建议”里挑一个你感兴趣的,尝试自己实现,比如给文章增加一个“点赞”功能,这需要设计数据库表、编写后端接口、并修改前端页面。
- 学部署 :尝试在云服务器(如阿里云、腾讯云的学生机)上部署这个项目,体验从开发到上线的完整流程。
把这个项目吃透,不仅能让你顺利完成毕业设计,更能为你后续面试 Java 后端或 Vue 前端岗位打下坚实的项目基础。建议收藏本文,在搭建和开发过程中随时参考。

316

被折叠的 条评论
为什么被折叠?



