Java个人博客系统

Java个人博客系统

项目简介

这是一个基于Spring Boot + MyBatis + Thymeleaf开发的个人博客系统,功能完善、界面简洁美观,支持Markdown文章编写、文章管理、评论管理、分类标签等核心博客功能。系统采用前后端不分离架构,适合Spring Boot初学者学习和个人博客搭建使用。

技术栈

后端技术

技术 版本/说明
核心框架 Spring Boot 1.5.14
持久层框架 MyBatis 1.3.2
模板引擎 Thymeleaf 3.0.2
数据库 MySQL 5.7+
数据库连接池 Druid 1.1.9
分页插件 PageHelper 1.2.5
缓存框架 Ehcache (Spring Boot Cache)
Markdown解析 Commonmark 0.8.0
文件存储 七牛云 SDK 7.2.11
API文档 Swagger 2.2.2
工具类 Apache Commons Lang3 3.4

前端技术

技术 说明
JS框架 jQuery
CSS框架 Bootstrap
富文本编辑器 Editor.md (Markdown编辑器)
文件上传 Dropzone
弹框插件 SweetAlert

第三方服务

  • 七牛云对象存储(图片/文件上传)
  • 百度统计(网站访问统计)

项目特点

  • Markdown支持:完整支持Markdown语法,支持.md文件导入
  • Hexo兼容:模仿Hexo生成的访问路径,方便从Hexo迁移
  • 后台管理:提供完善的后台管理界面,方便文章管理
  • 评论系统:内置评论功能,支持评论管理
  • 分类标签:支持文章分类和标签管理
  • 文件上传:集成七牛云存储,支持图片上传
  • 缓存优化:使用Ehcache提升访问性能
  • 响应式设计:前台界面响应式布局,适配移动端

功能模块

前台功能

1. 首页
  • 文章列表展示
  • 分页浏览
  • 文章摘要预览
  • 侧边栏(分类、标签、最新文章)
2. 文章详情
  • Markdown渲染展示
  • 文章信息(发布时间、分类、标签、浏览量)
  • 评论列表
  • 评论发表
  • 上一篇/下一篇导航
3. 文章归档
  • 按时间归档
  • 按分类浏览
  • 按标签浏览
4. 关于页面
  • 个人介绍
  • 社交链接

后台管理功能

1. 文章管理 (/admin/article)
  • 文章列表
  • 新增文章
  • 编辑文章
  • 删除文章
  • Markdown编辑器
  • 文章发布/草稿
  • 设置分类和标签
  • 上传封面图
2. 评论管理 (/admin/comments)
  • 评论列表
  • 评论审核
  • 评论删除
  • 评论回复
3. 分类管理 (/admin/category)
  • 分类列表
  • 新增分类
  • 编辑分类
  • 删除分类
4. 标签管理 (/admin/tag)
  • 标签列表
  • 新增标签
  • 编辑标签
  • 删除标签
5. 文件管理 (/admin/attach)
  • 文件列表
  • 文件上传(本地/七牛云)
  • 文件删除
6. 系统设置 (/admin/setting)
  • 网站标题
  • 网站描述
  • 网站备案号
  • 社交链接配置
  • 百度统计配置
  • Google验证配置
7. 操作日志 (/admin/logs)
  • 系统操作记录
  • 登录日志
  • 操作时间/IP记录

项目结构

复制代码
java-blog/
├── src/
│   └── main/
│       ├── java/
│       │   └── com/wip/
│       │       ├── config/              # 配置类
│       │       │   ├── WebMvcConfig.java    # MVC配置
│       │       │   ├── CacheConfig.java     # 缓存配置
│       │       │   └── SwaggerConfig.java   # Swagger配置
│       │       ├── controller/         # 控制器
│       │       │   ├── admin/          # 后台控制器
│       │       │   │   ├── ArticleController.java
│       │       │   │   ├── CategoryController.java
│       │       │   │   ├── CommentController.java
│       │       │   │   ├── AttachController.java
│       │       │   │   └── SettingController.java
│       │       │   └── home/           # 前台控制器
│       │       │       ├── IndexController.java
│       │       │       └── ArticleController.java
│       │       ├── dao/                # 数据访问层
│       │       │   ├── AttachDao.java
│       │       │   ├── CommentDao.java
│       │       │   ├── ContentDao.java
│       │       │   ├── LogDao.java
│       │       │   ├── MetaDao.java
│       │       │   ├── OptionDao.java
│       │       │   └── UserDao.java
│       │       ├── model/              # 实体类
│       │       │   ├── AttachDomain.java
│       │       │   ├── CommentDomain.java
│       │       │   ├── ContentDomain.java
│       │       │   ├── LogDomain.java
│       │       │   ├── MetaDomain.java
│       │       │   └── UserDomain.java
│       │       ├── service/            # 业务逻辑层
│       │       │   ├── IArticleService.java
│       │       │   ├── ICommentService.java
│       │       │   ├── IMetaService.java
│       │       │   ├── IAttachService.java
│       │       │   └── impl/           # 实现类
│       │       ├── utils/              # 工具类
│       │       │   ├── TaleUtils.java
│       │       │   ├── DateKit.java
│       │       │   ├── IPKit.java
│       │       │   └── MarkdownUtils.java
│       │       ├── interceptor/        # 拦截器
│       │       │   └── BaseInterceptor.java
│       │       └── MyBlogApplication.java  # 启动类
│       │
│       └── resources/
│           ├── mapper/                 # MyBatis映射文件
│           │   ├── AttachMapper.xml
│           │   ├── CommentMapper.xml
│           │   ├── ContentMapper.xml
│           │   ├── LogMapper.xml
│           │   ├── MetaMapper.xml
│           │   └── UserMapper.xml
│           ├── static/                 # 静态资源
│           │   ├── admin/              # 后台静态资源
│           │   │   ├── css/
│           │   │   ├── js/
│           │   │   └── plugins/
│           │   └── user/               # 前台静态资源
│           │       ├── css/
│           │       ├── js/
│           │       └── img/
│           ├── templates/              # Thymeleaf模板
│           │   ├── admin/              # 后台页面
│           │   │   ├── article_edit.html
│           │   │   ├── article_list.html
│           │   │   ├── comment_list.html
│           │   │   ├── category.html
│           │   │   ├── attach.html
│           │   │   ├── setting.html
│           │   │   └── login.html
│           │   └── themes/             # 前台主题
│           │       └── default/
│           │           ├── index.html
│           │           ├── post.html
│           │           ├── archive.html
│           │           └── about.html
│           ├── application.yml         # 主配置文件
│           ├── application-dev.yml     # 开发环境配置
│           └── application-prod.yml    # 生产环境配置
│
├── upload/                             # 本地上传文件目录
├── lu_tale.sql                         # 数据库SQL文件
├── pom.xml                             # Maven配置
├── README.md                           # 项目说明
└── 个人博客.mp4                         # 演示视频

数据库设计

核心数据表

1. t_users - 用户表
sql 复制代码
uid          INT          用户ID
username     VARCHAR(32)  用户名
password     VARCHAR(64)  密码(MD5加密)
email        VARCHAR(200) 邮箱
screenName   VARCHAR(32)  昵称
homeUrl      VARCHAR(200) 个人主页
created      INT          创建时间
groupName    VARCHAR(16)  用户组
2. t_contents - 文章表
sql 复制代码
cid          INT          文章ID
title        VARCHAR(200) 文章标题
titlePic     VARCHAR(55)  封面图
slug         VARCHAR(200) 文章路径
created      INT          创建时间
modified     INT          修改时间
content      TEXT         文章内容
authorId     INT          作者ID
type         VARCHAR(16)  类型(post/page)
status       VARCHAR(16)  状态(publish/draft)
tags         VARCHAR(200) 标签
categories   VARCHAR(200) 分类
hits         INT          浏览量
commentsNum  INT          评论数
allowComment TINYINT      允许评论
3. t_comments - 评论表
sql 复制代码
coid         INT          评论ID
cid          INT          文章ID
created      INT          评论时间
author       VARCHAR(200) 评论者
authorId     INT          评论者ID
mail         VARCHAR(200) 邮箱
url          VARCHAR(200) 网址
ip           VARCHAR(64)  IP地址
content      TEXT         评论内容
status       VARCHAR(16)  状态(approved/waiting)
parent       INT          父评论ID
4. t_metas - 分类/标签表
sql 复制代码
mid          INT          ID
name         VARCHAR(200) 名称
slug         VARCHAR(200) 路径
type         VARCHAR(32)  类型(category/tag)
description  VARCHAR(200) 描述
sort         INT          排序
5. t_relationships - 关联表
sql 复制代码
cid          INT          文章ID
mid          INT          分类/标签ID
6. t_attach - 附件表
sql 复制代码
id           INT          附件ID
fname        VARCHAR(100) 文件名
ftype        VARCHAR(50)  文件类型
fkey         TEXT         文件路径
authorId     INT          上传者ID
created      INT          上传时间
7. t_options - 系统配置表
sql 复制代码
name         VARCHAR(32)  配置名
value        VARCHAR(1000) 配置值
description  VARCHAR(200) 描述
8. t_logs - 操作日志表
sql 复制代码
id           INT          日志ID
action       VARCHAR(100) 操作
data         VARCHAR(2000) 数据
authorId     INT          操作者ID
ip           VARCHAR(20)  IP地址
created      INT          操作时间

运行环境要求

开发环境

  • JDK 1.8+
  • Maven 3.0+
  • MySQL 5.7+
  • IDE(推荐IntelliJ IDEA或Eclipse)

生产环境

  • JDK 1.8+
  • MySQL 5.7+
  • Tomcat 8.0+(可选,Spring Boot内置)

快速开始

1. 克隆项目

bash 复制代码
git clone <repository-url>
cd java-blog

2. 创建数据库

sql 复制代码
CREATE DATABASE lu_tale CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

3. 导入数据库

bash 复制代码
mysql -u root -p lu_tale < lu_tale.sql

4. 修改配置

编辑 src/main/resources/application-dev.yml

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/lu_tale?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root          # 修改为你的数据库用户名
    password: root          # 修改为你的数据库密码
    driver-class-name: com.mysql.jdbc.Driver

5. 配置七牛云(可选)

如需使用七牛云存储,编辑配置文件添加:

yaml 复制代码
qiniu:
  access-key: your_access_key
  secret-key: your_secret_key
  bucket: your_bucket_name
  domain: your_domain

6. 编译运行

方式一:IDE运行
  1. 使用IDE导入Maven项目
  2. 运行 MyBlogApplication.java 主类
方式二:Maven命令运行
bash 复制代码
# 编译打包
mvn clean package

# 运行
java -jar target/springboot-blog-1.0.0-SNAPSHOT.jar
方式三:Maven插件运行
bash 复制代码
mvn spring-boot:run

7. 访问系统

配置说明

端口配置

修改 application.yml

yaml 复制代码
server:
  port: 8888  # 修改为你想要的端口

文件上传配置

yaml 复制代码
# 本地上传路径
upload:
  path: /path/to/upload/  # 修改为你的上传目录

缓存配置

系统使用Ehcache作为缓存,配置文件位于 src/main/resources/ehcache.xml

日志配置

日志配置位于 application.yml

yaml 复制代码
logging:
  level:
    com.wip: debug
    org.springframework: info

使用指南

1. 发布文章

  1. 登录后台管理系统
  2. 点击"文章管理" → "发布文章"
  3. 填写文章标题
  4. 使用Markdown编辑器编写内容
  5. 选择分类和标签
  6. 上传封面图(可选)
  7. 点击"发布"

2. 导入Markdown文件

  1. 进入"文章管理"
  2. 点击"导入文章"
  3. 选择.md文件
  4. 系统自动解析并创建文章

3. 管理评论

  1. 进入"评论管理"
  2. 查看所有评论
  3. 可以删除或回复评论

4. 设置分类和标签

  1. 进入"分类管理"或"标签管理"
  2. 添加新的分类/标签
  3. 编辑或删除现有分类/标签

5. 系统设置

  1. 进入"系统设置"
  2. 配置网站基本信息
  3. 设置社交链接
  4. 配置统计代码

主要功能实现

Markdown渲染

使用Commonmark库实现Markdown解析:

java 复制代码
// MarkdownUtils.java
public static String mdToHtml(String markdown) {
    Parser parser = Parser.builder().build();
    Node document = parser.parse(markdown);
    HtmlRenderer renderer = HtmlRenderer.builder().build();
    return renderer.render(document);
}

文章分页

使用PageHelper实现分页:

java 复制代码
PageHelper.startPage(page, limit);
List<ContentDomain> articles = contentDao.getArticles();
PageInfo<ContentDomain> pageInfo = new PageInfo<>(articles);

缓存使用

使用Spring Cache注解:

java 复制代码
@Cacheable(value = "articleCache", key = "#cid")
public ContentDomain getArticleById(Integer cid) {
    return contentDao.selectByKey(cid);
}

文件上传

支持本地和七牛云两种方式:

java 复制代码
// 本地上传
public String uploadLocal(MultipartFile file) {
    String fileName = file.getOriginalFilename();
    String filePath = uploadPath + fileName;
    file.transferTo(new File(filePath));
    return filePath;
}

// 七牛云上传
public String uploadQiniu(MultipartFile file) {
    Auth auth = Auth.create(accessKey, secretKey);
    String token = auth.uploadToken(bucket);
    Response response = uploadManager.put(file.getBytes(), fileName, token);
    return domain + fileName;
}

扩展建议

如需进一步完善项目,可考虑以下扩展:

  1. 用户系统:支持用户注册、登录、个人中心
  2. 文章搜索:集成Elasticsearch实现全文搜索
  3. RSS订阅:生成RSS feed
  4. SEO优化:添加sitemap、robots.txt
  5. 社交分享:集成社交媒体分享功能
  6. 邮件通知:评论通知、订阅通知
  7. 多主题支持:支持切换不同主题
  8. Markdown增强:支持更多Markdown扩展语法
  9. 图片压缩:上传时自动压缩图片
  10. 访问统计:更详细的访问统计分析

注意事项

  1. 首次运行需要导入SQL文件创建数据库表
  2. 默认管理员密码为123456,建议首次登录后修改
  3. 生产环境建议使用HTTPS
  4. 定期备份数据库数据
  5. 上传文件建议使用七牛云等对象存储服务
  6. 注意配置文件中的敏感信息安全

常见问题

Q: 数据库连接失败?

A: 检查MySQL服务是否启动,数据库配置是否正确

Q: 图片无法显示?

A: 检查上传路径配置,确保目录有写入权限

Q: 后台无法登录?

A: 确认数据库中users表有管理员账号,密码是否正确

Q: Markdown渲染异常?

A: 检查Commonmark依赖是否正确引入

Q: 缓存不生效?

A: 检查Ehcache配置,确保缓存注解正确使用

演示视频

项目包含演示视频文件:个人博客.mp4,展示了系统的完整功能。

适用对象

  • Spring Boot初学者:综合运用Spring Boot核心知识
  • 博客搭建者:快速搭建个人博客网站
  • Hexo用户:提供后台管理界面,兼容Hexo路径
  • 学习者:学习完整的Web项目开发流程

许可证

本项目仅供学习交流使用,请勿用于商业用途。


如有问题,欢迎提Issue或联系作者。

祝使用愉快! 📝✨

相关推荐
leoZ2311 小时前
第 7 篇:进阶——校验、联动、列表页
开发语言·前端·javascript·vue.js·人工智能·目标检测·ecmascript
秋名RG1 小时前
Java 集合框架完全指南:从核心接口到 JDK 21 有序集合新特性
java·windows
luj_17681 小时前
虚实交融中的真实人物塑造
c语言·开发语言·网络·经验分享·算法
蜡台1 小时前
Kotlin 五大作用域函数详解|let/run/apply/also/with 选型指南+实战避坑
android·java·kotlin
haolin123.2 小时前
STL vector底层揭秘:从构造到迭代器失效
开发语言·c++·算法
大模型码小白2 小时前
ChatGPT 的回答也能被结构化抓取?AI Bot Scraper 对比测评
服务器·开发语言·数据库·人工智能·spring·chatgpt
尘中远2 小时前
给C++工业软件搭建 Agent
开发语言·c++·qt·ai·agent
AC赳赳老秦2 小时前
农产品公开数据应用:OpenClaw 抓取农产品价格、产销公开数据,实现农产品行情动态监测
java·c语言·javascript·python·php·deepseek·openclaw
1001101_QIA2 小时前
从 CPU 到 GPU:高速缓存、指令并行与 CUDA 执行原理入门
java·后端·spring