Skip to content

YJY-XYYC/lms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📚 图书管理系统 (Library Management System)

版本: 1.0.0 | 状态: ✅ 稳定版

高效、智能、易用的现代化图书管理解决方案

License: MIT Java Version Spring Boot Vue.js MySQL


📖 项目简介

背景与目标

图书管理系统(Library Management System, LMS)是一个基于 前后端分离架构 的企业级图书馆管理平台。针对传统图书馆管理中存在的效率低下、数据分散、统计困难等痛点,本系统采用现代化的技术栈,提供了一套完整的数字化解决方案。

核心价值

  • 🎯 高效管理 - 全流程自动化处理借阅、归还、续借业务
  • 📊 数据驱动 - ECharts可视化图表实时展示运营数据
  • 🔒 安全可靠 - JWT认证 + AOP日志 + 统一异常处理机制
  • ⚡ 易于部署 - 一键启动,支持Docker容器化部署
  • 🌐 响应式设计 - 适配多终端访问体验

✨ 功能特性

👤 用户管理模块

  • ✅ 用户注册、登录(支持JWT Token认证)
  • ✅ 个人中心信息维护
  • ✅ 管理员资料管理
  • ✅ 密码重置功能(邮箱验证码)

📚 图书管理模块

  • ✅ 图书CRUD操作(增删改查)
  • ✅ 分类管理与层级展示
  • ✅ 图书详情查看与搜索
  • ✅ 收藏功能(用户个性化推荐)
  • ✅ 封面上传与管理

🔄 借阅管理模块

  • ✅ 借书流程控制
  • ✅ 还书与逾期检测
  • ✅ 续借申请处理
  • ✅ 我的借阅记录查询
  • ✅ 逾期自动提醒(定时任务)
  • ✅ 批量还书/续书操作

📈 数据统计模块

  • ✅ 借阅趋势分析图表
  • ✅ 图书分类占比可视化
  • ✅ 用户活跃度统计
  • ✅ 词云展示热门书籍标签
  • ✅ ECharts 6.0 动态交互图表

⚙️ 系统管理模块

  • 公告管理 - 发布、编辑、删除公告
  • 轮播图管理 - 首页轮播配置
  • 系统配置 - 参数动态调整
  • 操作日志 - AOP注解自动记录(谁、何时、做了什么)
  • 系统监控 - OSHI库实时监控CPU、内存、磁盘
  • 数据管理 - Excel导入导出(Apache POI)

💬 名言警句模块

  • ✅ 名言增删改查
  • ✅ 首页随机展示
  • ✅ 分类标签管理

🛠️ 技术栈

后端技术

技术 版本 说明
Spring Boot 3.1.10 核心框架
Java 17 运行环境 (LTS)
MyBatis-Plus 3.5.5 ORM框架
MySQL 8.0+ 关系型数据库
JWT (jjwt) 0.12.3 身份认证
Hutool 5.8.23 工具类库
Apache POI 5.2.3 Excel处理
Lombok 1.18.30 代码简化
OSHI 6.4.0 系统监控

前端技术

技术 版本 说明
Vue.js 3.4.21 渐进式框架
Vite 5.2.0 构建工具
Element Plus 2.7.0 UI组件库
ECharts 6.0.0 数据可视化
vue-echarts 8.0.1 Vue封装
echarts-wordcloud 2.1.0 词云插件
Vue Router 4.3.0 路由管理
Axios 1.6.8 HTTP客户端
Sass 1.72.0 CSS预处理器

🏗️ 系统架构说明

┌─────────────────────────────────────────────────────────────┐
│                        用户浏览器                            │
│                    (Chrome / Firefox / Edge)                │
└───────────────────────┬─────────────────────────────────────┘
                        │ HTTP/HTTPS
                        ▼
┌─────────────────────────────────────────────────────────────┐
│                     前端应用 (Vue 3)                         │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────────┐ │
│  │ Element+ │  │ ECharts  │  │ Router   │  │ Axios        │ │
│  │ UI组件    │  │ 可视化   │  │ 路由管理  │  │ HTTP请求     │ │
│  └──────────┘  └──────────┘  └──────────┘  └──────────────┘ │
│                          :3000                               │
└───────────────────────┬─────────────────────────────────────┘
                        │ API Proxy (/library/*)
                        ▼
┌─────────────────────────────────────────────────────────────┐
│                  后端服务 (Spring Boot 3.1)                   │
│  ┌─────────────────────────────────────────────────────┐    │
│  │              Controller 层 (RESTful API)             │    │
│  │  Auth | Book | Borrow | User | System | Statistics   │    │
│  └───────────────────────┬─────────────────────────────┘    │
│                          ▼                                   │
│  ┌─────────────────────────────────────────────────────┐    │
│  │               Service 层 (业务逻辑)                   │    │
│  │         业务处理 + JWT验证 + 权限控制                 │    │
│  └───────────────────────┬─────────────────────────────┘    │
│                          ▼                                   │
│  ┌─────────────────────────────────────────────────────┐    │
│  │            Mapper 层 (MyBatis-Plus)                  │    │
│  │          CRUD + 分页 + 逻辑删除                      │    │
│  └───────────────────────┬─────────────────────────────┘    │
│                          ▼                                   │
│  ┌─────────────────────────────────────────────────────┐    │
│  │              MySQL 8.0 (library_system)              │    │
│  └─────────────────────────────────────────────────────┘    │
│  辅助组件:                                                  │
│  • AOP 操作日志记录                                         │
│  • GlobalExceptionHandler 统一异常处理                       │
│  • OverdueTask 定时任务 (逾期检查)                           │
│  • OSHI 系统监控                                             │
└─────────────────────────────────────────────────────────────┘
                          :8080/library

架构特点

1️⃣ 前后端分离

  • 前后端独立开发、独立部署
  • 通过 RESTful API 进行通信
  • 支持跨域请求配置

2️⃣ 分层架构设计

Controller → Service → Mapper → Database
    ↓           ↓          ↓
  参数校验    业务逻辑    SQL执行

3️⃣ 安全机制

  • JWT认证:无状态Token验证,24小时过期
  • AOP日志:自动记录关键操作(@OperationLogAnnotation)
  • 统一响应:Result封装所有API返回值
  • 全局异常:GlobalExceptionHandler捕获并友好提示

4️⃣ 数据持久化

  • MyBatis-Plus简化CRUD操作
  • 逻辑删除保护历史数据
  • 自动填充创建/更新时间

🚀 快速开始指南

前置条件

确保你的开发环境已安装以下软件:

软件 最低版本 推荐版本 下载地址
JDK 17+ 17 LTS OpenJDK
Maven 3.8+ 3.9.x Apache Maven
Node.js 18+ 20.x LTS Node.js
MySQL 8.0+ 8.0.35+ MySQL
Git 最新版 最新版 Git

步骤一:克隆项目

# 使用SSH方式克隆(推荐)
git clone git@gitee.com:cx330-private/lms.git

# 或使用HTTPS方式克隆
git clone https://gitee.com/cx330-private/lms.git

# 进入项目目录
cd lms

步骤二:数据库初始化

-- 1. 创建数据库
CREATE DATABASE library_system DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 2. 创建用户并授权(可选,建议生产环境使用)
CREATE USER 'lms_user'@'localhost' IDENTIFIED BY 'your_secure_password';
GRANT ALL PRIVILEGES ON library_system.* TO 'lms_user'@'localhost';
FLUSH PRIVILEGES;

-- 3. 导入SQL脚本(按顺序执行)
-- 进入 backend/src/main/resources/db/ 目录
-- 依次执行:
--   - banner.sql
--   - alter_borrow_record.sql
--   - alter_operation_log.sql
--   - auto_refresh_config.sql
--   - health_monitor_config.sql

💡 提示:SQL脚本位于 backend/src/main/resources/db/ 目录下,请按照文件名顺序依次导入。

步骤三:启动后端服务

# 1. 进入后端目录
cd backend

# 2. 配置数据库连接(修改 application.yml)
# 编辑 src/main/resources/application.yml
# 修改 spring.datasource.url, username, password

# 3. 安装依赖并编译
mvn clean install -DskipTests

# 4. 启动应用(方式一:Maven命令)
mvn spring-boot:run

# 或(方式二:直接运行JAR包)
java -jar target/library-management-system-1.0.0.jar

成功标志:看到以下日志输出表示启动成功

Started LibraryApplication in X.XXX seconds
Tomcat started on port 8080 (http)

步骤四:启动前端服务

# 1. 新开一个终端,进入前端目录
cd frontend

# 2. 安装依赖
npm install

# 3. 启动开发服务器
npm run dev

成功标志:看到以下输出表示启动成功

VITE v5.2.0  ready in XXX ms

➜  Local:   http://localhost:3000/

访问地址

服务 地址 说明
前端界面 http://localhost:3000 用户访问入口
后端API http://localhost:8080/library API接口基础路径
Swagger文档 暂未启用 可后续集成Swagger

📁 项目结构

lms/                                    # 项目根目录
│
├── backend/                            # 后端工程(Spring Boot)
│   ├── pom.xml                         # Maven依赖配置
│   ├── src/
│   │   └── main/
│   │       ├── java/com/library/
│   │       │   ├── LibraryApplication.java      # 启动类
│   │       │   │
│   │       │   ├── annotation/                  # 自定义注解
│   │       │   │   └── OperationLogAnnotation.java  # 操作日志注解
│   │       │   │
│   │       │   ├── aspect/                      # AOP切面
│   │       │   │   └── OperationLogAspect.java      # 日志记录切面
│   │       │   │
│   │       │   ├── common/                      # 公共类
│   │       │   │   └── Result.java              # 统一响应封装
│   │       │   │
│   │       │   ├── config/                      # 配置类
│   │       │   │   ├── AsyncConfig.java         # 异步任务配置
│   │       │   │   ├── CustomMetaObjectHandler.java  # MP自动填充
│   │       │   │   ├── GlobalExceptionHandler.java  # 全局异常处理
│   │       │   │   ├── MybatisPlusConfig.java   # MP分页插件
│   │       │   │   ├── OverdueTask.java         # 逾期检查定时任务
│   │       │   │   ├── SessionConfig.java       # Session/CORS配置
│   │       │   │   └── WebConfig.java           # Web MVC配置
│   │       │   │
│   │       │   ├── controller/                  # 控制器层
│   │       │   │   ├── AuthController.java      # 认证接口
│   │       │   │   ├── BannerController.java    # 轮播图管理
│   │       │   │   ├── BookController.java      # 图书管理
│   │       │   │   ├── BookFavoriteController.java  # 收藏管理
│   │       │   │   ├── BorrowRecordController.java # 借阅管理
│   │       │   │   ├── CategoryController.java  # 分类管理
│   │       │   │   ├── DataManagementController.java # 数据导入导出
│   │       │   │   ├── NoticeController.java    # 公告管理
│   │       │   │   ├── OperationLogController.java # 操作日志查询
│   │       │   │   ├── QuoteController.java     # 名言警句
│   │       │   │   ├── StatisticsController.java # 数据统计
│   │       │   │   ├── SystemConfigController.java # 系统配置
│   │       │   │   ├── SystemMonitorController.java # 系统监控
│   │       │   │   ├── UploadController.java    # 文件上传
│   │       │   │   └── UserController.java      # 用户管理
│   │       │   │
│   │       │   ├── dto/                         # 数据传输对象
│   │       │   │   ├── LoginDTO.java            # 登录请求体
│   │       │   │   ├── RegisterDTO.java         # 注册请求体
│   │       │   │   ├── BorrowRecordDTO.java     # 借阅记录DTO
│   │       │   │   ├── ResetPasswordDTO.java    # 重置密码DTO
│   │       │   │   ├── SendRegisterCodeDTO.java # 发送注册码DTO
│   │       │   │   └── SendResetCodeDTO.java    # 发送重置码DTO
│   │       │   │
│   │       │   ├── entity/                      # 实体类
│   │       │   │   ├── User.java                # 用户实体
│   │       │   │   ├── Book.java                # 图书实体
│   │       │   │   ├── Category.java            # 分类实体
│   │       │   │   ├── BorrowRecord.java        # 借阅记录实体
│   │       │   │   ├── BookFavorite.java        # 收藏实体
│   │       │   │   ├── Notice.java              # 公告实体
│   │       │   │   ├── Banner.java              # 轮播图实体
│   │       │   │   ├── Quote.java               # 名言实体
│   │       │   │   ├── OperationLog.java        # 操作日志实体
│   │       │   │   └── SystemConfig.java        # 系统配置实体
│   │       │   │
│   │       │   ├── mapper/                      # 数据访问层
│   │       │   │   └── *Mapper.java             # 各实体Mapper接口
│   │       │   │
│   │       │   ├── service/                     # 业务逻辑层
│   │       │   │   ├── *Service.java            # 服务接口
│   │       │   │   └── impl/                    # 服务实现
│   │       │   │       └── *ServiceImpl.java    # 具体实现类
│   │       │   │
│   │       │   └── util/                        # 工具类
│   │       │       ├── JwtUtil.java             # JWT工具类
│   │       │       └── SystemConfigCache.java   # 系统配置缓存
│   │       │
│   │       └── resources/
│   │           ├── db/                          # SQL脚本
│   │           │   ├── banner.sql
│   │           │   ├── alter_borrow_record.sql
│   │           │   ├── alter_operation_log.sql
│   │           │   ├── auto_refresh_config.sql
│   │           │   └── health_monitor_config.sql
│   │           ├── mapper/                      # MyBatis XML映射
│   │           │   └── BorrowRecordMapper.xml
│   │           └── application.yml              # 应用配置文件
│   │
├── frontend/                           # 前端工程(Vue 3)
│   ├── package.json                    # NPM依赖配置
│   ├── vite.config.js                  # Vite构建配置
│   ├── index.html                      # HTML入口
│   ├── src/
│   │   ├── main.js                     # 应用入口
│   │   ├── App.vue                     # 根组件
│   │   │
│   │   ├── api/                        # API接口层
│   │   │   ├── request.js              # Axios封装
│   │   │   ├── auth.js                 # 认证接口
│   │   │   ├── book.js                 # 图书接口
│   │   │   ├── borrow.js               # 借阅接口
│   │   │   ├── category.js             # 分类接口
│   │   │   ├── banner.js               # 轮播图接口
│   │   │   ├── quote.js                # 名言接口
│   │   │   ├── statistics.js           # 统计接口
│   │   │   └── user.js                 # 用户接口
│   │   │
│   │   ├── router/                     # 路由配置
│   │   │   └── index.js                # 路由定义
│   │   │
│   │   ├── views/                      # 页面视图
│   │   │   ├── Home.vue                # 首页
│   │   │   ├── Landing.vue             # 登录落地页
│   │   │   ├── Login.vue               # 登录页
│   │   │   ├── Register.vue            # 注册页
│   │   │   ├── Profile.vue             # 个人中心
│   │   │   ├── AdminProfile.vue        # 管理员资料
│   │   │   ├── Book.vue                # 图书列表
│   │   │   ├── BookDetail.vue          # 图书详情
│   │   │   ├── Category.vue            # 分类管理
│   │   │   ├── Borrow.vue              # 借阅管理
│   │   │   ├── ReturnBooks.vue         # 还书页面
│   │   │   ├── RenewBooks.vue          # 续借页面
│   │   │   ├── MyBorrows.vue           # 我的借阅
│   │   │   ├── MyOverdue.vue           # 逾期记录
│   │   │   ├── Favorite.vue            # 我的收藏
│   │   │   ├── Statistics.vue          # 数据统计
│   │   │   ├── Notice.vue              # 公告管理
│   │   │   ├── Banner.vue              # 轮播图管理
│   │   │   ├── Quote.vue               # 名言管理
│   │   │   ├── SystemConfig.vue        # 系统配置
│   │   │   ├── SysLog.vue              # 操作日志
│   │   │   ├── SystemMonitor.vue       # 系统监控
│   │   │   ├── DataManagement.vue      # 数据管理
│   │   │   └── User.vue                # 用户管理
│   │   │
│   │   ├── components/                 # 公共组件
│   │   │   ├── UserHeader.vue          # 用户头部
│   │   │   ├── LoadingOverlay.vue      # 加载遮罩
│   │   │   └── ErrorBoundary.vue       # 错误边界
│   │   │
│   │   ├── assets/                     # 静态资源
│   │   │   └── background.jpg          # 背景图片
│   │   │
│   │   ├── styles/                     # 全局样式
│   │   │   └── global.css              # CSS变量和通用样式
│   │   │
│   │   └── utils/                      # 工具函数
│   │       ├── jwt.js                  # JWT解析工具
│   │       ├── loading.js              # 加载状态管理
│   │       └── confirm.js              # 确认对话框
│   │
├── images/                            # 项目截图/文档图片
│
├── .gitignore                         # Git忽略规则
├── LICENSE                            # 开源许可证(MIT)
└── README.md                           # 本文档

⚙️ 配置说明

关键配置项

后端配置 (backend/src/main/resources/application.yml)

# 服务器端口配置
server:
  port: 8080
  servlet:
    context-path: /library    # API前缀路径

# 数据源配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/library_system?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
    username: root
    password: 123456           # ⚠️ 请修改为你的密码!
    driver-class-name: com.mysql.cj.jdbc.Driver

# MyBatis-Plus配置
mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: deleted    # 逻辑删除字段
      logic-delete-value: 1          # 已删除
      logic-not-delete-value: 0      # 未删除

# JWT配置
jwt:
  secret: your-secret-key-here       # ⚠️ 请修改为强密钥!
  expiration: 86400000              # Token有效期(毫秒)= 24小时

# 文件上传配置
upload:
  path: ../upload/                   # 上传文件存储路径
  prefix: /upload/                   # 访问URL前缀
  max-size: 5                        # 最大文件大小(MB)
  allowed-types: image/jpeg,image/png,image/gif  # 允许的文件类型

前端代理配置 (frontend/vite.config.js)

export default defineConfig({
  server: {
    port: 3000,
    proxy: {
      '/library': {                    // 匹配以/library开头的请求
        target: 'http://localhost:8080', // 代理目标地址
        changeOrigin: true             // 修改请求头中的Origin
      }
    }
  }
})

🔒 重要安全警告

⚠️ 敏感信息泄露风险

当前 application.yml 文件包含以下敏感信息:

配置项 当前值 风险等级 建议
spring.datasource.password 123456 🔴 高危 使用强密码或环境变量
jwt.secret 明文密钥 🔴 高危 生成随机256位密钥

✅ 生产环境最佳实践

方案一:使用环境变量(推荐)

# application.yml
spring:
  datasource:
    username: ${DB_USERNAME:root}
    password: ${DB_PASSWORD}

jwt:
  secret: ${JWT_SECRET}

设置环境变量:

# Windows PowerShell
$env:DB_PASSWORD="YourSecurePassword123!"
$env:JWT_SECRET="your-random-256-bit-secret-key-here"

# Linux/macOS
export DB_PASSWORD="YourSecurePassword123!"
export JWT_SECRET="your-random-256-bit-secret-key-here"

方案二:创建配置模板

# 复制配置文件为模板
cp backend/src/main/resources/application.yml \
   backend/src/main/resources/application.yml.example

# 编辑application.yml.example,将敏感信息替换为占位符
# 将application.yml添加到.gitignore
echo "backend/src/main/resources/application.yml" >> .gitignore

方案三:Spring Cloud Config(微服务场景)

对于企业级部署,建议使用配置中心统一管理敏感配置。


📡 API文档概览

RESTful API 规范

本项目遵循 RESTful 设计规范,所有API均以 /library 为前缀:

HTTP方法 用途 示例
GET 获取资源 GET /library/books
POST 创建资源 POST /library/books
PUT 更新资源 PUT /library/books/{id}
DELETE 删除资源 DELETE /library/books/{id}

统一响应格式

所有API返回统一的JSON格式:

{
  "code": 200,           // 状态码:200成功,其他失败
  "message": "success",  // 提示消息
  "data": {}             // 业务数据(可为null或数组)
}

常见状态码说明:

code 含义 场景
200 成功 正常业务操作
400 请求参数错误 缺少必填字段、格式错误
401 未认证 Token无效或已过期
403 无权限 角色权限不足
404 资源不存在 ID对应的数据不存在
500 服务器内部错误 异常情况

JWT认证机制

1. 登录获取Token

curl -X POST http://localhost:8080/library/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "username": "admin",
    "password": "admin123"
  }'

响应示例:

{
  "code": 200,
  "message": "登录成功",
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "user": {
      "id": 1,
      "username": "admin",
      "role": "ADMIN"
    }
  }
}

2. 携带Token访问受保护接口

# 在Header中添加Authorization字段
curl -X GET http://localhost:8080/library/books \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

3. Token刷新

Token有效期为 24小时,过期后需重新登录获取新Token。

核心API端点一览

认证模块 (/auth)

端点 方法 说明 权限
/auth/login POST 用户登录 公开
/auth/register POST 用户注册 公开
/auth/send-code POST 发送验证码 公开

图书模块 (/books)

端点 方法 说明 权限
/books GET 获取图书列表 已登录
/books/{id} GET 获取图书详情 已登录
/books POST 新增图书 管理员
/books/{id} PUT 更新图书 管理员
/books/{id} DELETE 删除图书 管理员

借阅模块 (/borrows)

端点 方法 说明 权限
/borrows GET 获取借阅记录 已登录
/borrows POST 借书 已登录
/borrows/{id}/return PUT 还书 已登录
/borrows/{id}/renew PUT 续借 已登录

系统管理模块

模块 端点前缀 主要功能
公告 /notices CRUD操作
轮播图 /banners 图片管理
系统配置 /configs 参数读写
操作日志 /logs 日志查询
系统监控 /monitor 性能指标
数据管理 /data 导入导出

🚢 部署指南

生产环境部署建议

方案一:传统部署(JAR + Nginx)

1. 打包后端

cd backend
mvn clean package -DskipTests
# 生成的JAR文件在 target/library-management-system-1.0.0.jar

2. 打包前端

cd frontend
npm run build
# 生成的静态文件在 dist/ 目录

3. 配置Nginx反向代理

server {
    listen 80;
    server_name your-domain.com;

    # 前端静态文件
    location / {
        root /path/to/frontend/dist;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    # API代理到后端
    location /library {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # 文件上传路径
    location /upload {
        alias /path/to/upload/files;
    }
}

4. 启动服务

# 启动后端(后台运行)
nohup java -jar target/library-management-system-1.0.0.jar --spring.profiles.active=prod > app.log 2>&1 &

# 启动Nginx
sudo systemctl start nginx
#
sudo nginx

方案二:Docker容器化部署(推荐)

1. 创建 Dockerfile(后端)

# Dockerfile.backend
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
COPY target/library-management-system-1.0.0.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

2. 创建 Dockerfile(前端)

# Dockerfile.frontend
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

3. 创建 docker-compose.yml

version: '3.8'
services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_DATABASE: library_system
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    restart: always

  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile.backend
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/library_system
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD}
      JWT_SECRET: ${JWT_SECRET}
    depends_on:
      - mysql
    restart: always

  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile.frontend
    ports:
      - "80:80"
    depends_on:
      - backend
    restart: always

volumes:
  mysql_data:

4. 启动服务

# 创建环境变量文件
cat > .env << EOF
DB_PASSWORD=YourSecurePasswordHere
JWT_SECRET=YourRandomSecretKeyHere
EOF

# 一键启动所有服务
docker-compose up -d --build

# 查看日志
docker-compose logs -f

备份策略

数据库备份

# 手动备份
mysqldump -u root -p library_system > backup_$(date +%Y%m%d_%H%M%S).sql

# 定时备份(Cron任务)
# 每天凌晨2点自动备份
0 2 * * * mysqldump -u root -p'password' library_system | gzip > /backup/db_$(date +\%Y\%m\%d).sql.gz

文件备份

# 上传的图片文件备份
tar -czf upload_backup_$(date +%Y%m%d).tar.gz ../upload/

# 完整项目备份(含代码)
tar -czf lms_project_backup_$(date +%Y%m%d).tar.gz --exclude='node_modules' --exclude='target' .

恢复流程

# 1. 恢复数据库
mysql -u root -p library_system < backup_20240101_020000.sql

# 2. 恢复上传文件
tar -xzf upload_backup_20240101.tar.gz -C ../

# 3. 重启服务
docker-compose restart

❓ 常见问题 FAQ

Q1: 启动后端时报错 "Cannot find database"

A: 确保已完成以下步骤:

  1. MySQL服务正在运行
  2. 已创建 library_system 数据库
  3. 已正确导入SQL脚本
  4. 检查 application.yml 中的数据库连接配置
# 检查MySQL是否运行
mysql -u root -p -e "SHOW DATABASES;"

Q2: 前端无法连接后端API(跨域问题)

A: 确认以下几点:

  1. 后端服务已在8080端口启动
  2. Vite代理配置正确(vite.config.js中的proxy设置)
  3. 浏览器开发者工具Network面板查看具体错误
// 检查vite.config.js配置
proxy: {
  '/library': {
    target: 'http://localhost:8080',  // 确认此地址正确
    changeOrigin: true
  }
}

Q3: JWT Token过期怎么办?

A: 当前Token有效期为24小时。过期后会收到401错误,需要:

  1. 重新调用登录接口获取新Token
  2. 前端会自动跳转到登录页面

如需修改有效期,编辑 application.yml

jwt:
  expiration: 172800000  # 修改为48小时(单位:毫秒)

Q4: 文件上传失败(图片无法保存)

A: 检查以下配置:

  1. 上传目录是否存在且有写权限
  2. 文件大小是否超过限制(默认10MB)
  3. 文件类型是否符合要求(仅允许jpg/png/gif)
# application.yml
upload:
  path: ../upload/           # 确保此目录存在
  max-size: 5                # 单位:MB
  allowed-types: image/jpeg,image/png,image/gif

Q5: 如何修改默认管理员账号?

A: 管理员账号在数据库初始化脚本中创建。你可以:

  1. 直接修改数据库中的 user
  2. 或通过注册接口创建新账号,然后手动将role字段改为 ADMIN
UPDATE user SET role = 'ADMIN' WHERE username = 'your_username';

Q6: 定时任务(逾期检查)没有生效

A: 确认:

  1. OverdueTask.java 中的定时表达式配置正确
  2. 应用正常运行(未被停止)
  3. 查看日志是否有定时任务执行的记录
// 默认配置为每天凌晨3点执行
@Scheduled(cron = "0 0 3 * * ?")
public void checkOverdueBooks() {
    // ...
}

Q7: 生产环境如何优化性能?

A: 建议采取以下措施:

  1. 数据库优化:添加索引、开启慢查询日志
  2. JVM调优:根据服务器内存调整堆大小
  3. Nginx缓存:配置静态资源缓存策略
  4. CDN加速:使用CDN分发静态资源
  5. 连接池配置:优化数据库连接池参数
# JVM参数示例
java -Xms512m -Xmx1024m -jar app.jar

🤝 贡献指南

我们欢迎任何形式的贡献!无论是Bug修复、新功能还是文档改进。

贡献流程

  1. Fork 本仓库

    git clone git@gitee.com:cx330-private/lms.git
  2. 创建特性分支

    git checkout -b feature/AmazingFeature
  3. 提交更改

    git commit -m 'Add some AmazingFeature'
  4. 推送到分支

    git push origin feature/AmazingFeature
  5. 提交 Pull Request

代码规范

  • 后端:遵循阿里巴巴Java开发手册
  • 前端:遵循Vue.js风格指南
  • 提交信息:使用Conventional Commits规范
    • feat: 新功能
    • fix: Bug修复
    • docs: 文档更新
    • style: 代码格式调整
    • refactor: 代码重构
    • test: 测试相关
    • chore: 构建/工具变更

Issue反馈

如果发现Bug或有功能建议,请通过以下方式反馈:

  • 提交 GitHub Issues
  • 详细描述问题现象和复现步骤
  • 附上相关日志或截图

📜 许可证

本项目采用 MIT License 开源协议。

MIT License

Copyright (c) 2024 Library Management System

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

详细许可条款请参见 LICENSE 文件。


📞 联系方式

如有任何问题或合作意向,欢迎通过以下方式联系:


感谢使用图书管理系统! 🎉

如果这个项目对你有帮助,欢迎给一个 ⭐ Star 支持一下!

Made with ❤️ by Library Management System Team

About

图书管理系统

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors