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 - 用户表
uidINT用户ID usernameVARCHAR(32)用户名 passwordVARCHAR(64)密码(MD5加密) emailVARCHAR(200)邮箱 screenNameVARCHAR(32)昵称 homeUrlVARCHAR(200)个人主页 createdINT创建时间 groupNameVARCHAR(16)用户组2. t_contents - 文章表
cidINT文章ID titleVARCHAR(200)文章标题 titlePicVARCHAR(55)封面图 slugVARCHAR(200)文章路径 createdINT创建时间 modifiedINT修改时间 contentTEXT文章内容 authorIdINT作者IDtypeVARCHAR(16)类型(post/page)statusVARCHAR(16)状态(publish/draft) tagsVARCHAR(200)标签 categoriesVARCHAR(200)分类 hitsINT浏览量 commentsNumINT评论数 allowCommentTINYINT允许评论3. t_comments - 评论表
coidINT评论ID cidINT文章ID createdINT评论时间 authorVARCHAR(200)评论者 authorIdINT评论者ID mailVARCHAR(200)邮箱 urlVARCHAR(200)网址 ipVARCHAR(64)IP地址 contentTEXT评论内容statusVARCHAR(16)状态(approved/waiting) parentINT父评论ID4. t_metas - 分类/标签表
midINTID nameVARCHAR(200)名称 slugVARCHAR(200)路径typeVARCHAR(32)类型(category/tag) descriptionVARCHAR(200)描述 sortINT排序5. t_relationships - 关联表
cidINT文章ID midINT分类/标签ID6. t_attach - 附件表
idINT附件ID fnameVARCHAR(100)文件名 ftypeVARCHAR(50)文件类型 fkeyTEXT文件路径 authorIdINT上传者ID createdINT上传时间7. t_options - 系统配置表
nameVARCHAR(32)配置名valueVARCHAR(1000)配置值 descriptionVARCHAR(200)描述8. t_logs - 操作日志表
idINT日志IDactionVARCHAR(100)操作dataVARCHAR(2000)数据 authorIdINT操作者ID ipVARCHAR(20)IP地址 createdINT操作时间运行环境要求
开发环境
- 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. 克隆项目
gitclone<repository-url>cdjava-blog2. 创建数据库
CREATEDATABASElu_taleCHARACTERSETutf8mb4COLLATEutf8mb4_general_ci;3. 导入数据库
mysql-uroot-plu_tale<lu_tale.sql4. 修改配置
编辑src/main/resources/application-dev.yml:
spring:datasource:url:jdbc:mysql://localhost:3306/lu_tale?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername:root# 修改为你的数据库用户名password:root# 修改为你的数据库密码driver-class-name:com.mysql.jdbc.Driver5. 配置七牛云(可选)
如需使用七牛云存储,编辑配置文件添加:
qiniu:access-key:your_access_keysecret-key:your_secret_keybucket:your_bucket_namedomain:your_domain6. 编译运行
方式一:IDE运行
- 使用IDE导入Maven项目
- 运行
MyBlogApplication.java主类
方式二:Maven命令运行
# 编译打包mvn clean package# 运行java-jartarget/springboot-blog-1.0.0-SNAPSHOT.jar方式三:Maven插件运行
mvn spring-boot:run7. 访问系统
- 前台地址:http://localhost:8888
- 后台地址:http://localhost:8888/admin
- 默认账号:
- 用户名:
admin - 密码:
123456
- 用户名:
配置说明
端口配置
修改application.yml:
server:port:8888# 修改为你想要的端口文件上传配置
# 本地上传路径upload:path:/path/to/upload/# 修改为你的上传目录缓存配置
系统使用Ehcache作为缓存,配置文件位于src/main/resources/ehcache.xml
日志配置
日志配置位于application.yml:
logging:level:com.wip:debugorg.springframework:info使用指南
1. 发布文章
- 登录后台管理系统
- 点击"文章管理" → “发布文章”
- 填写文章标题
- 使用Markdown编辑器编写内容
- 选择分类和标签
- 上传封面图(可选)
- 点击"发布"
2. 导入Markdown文件
- 进入"文章管理"
- 点击"导入文章"
- 选择.md文件
- 系统自动解析并创建文章
3. 管理评论
- 进入"评论管理"
- 查看所有评论
- 可以删除或回复评论
4. 设置分类和标签
- 进入"分类管理"或"标签管理"
- 添加新的分类/标签
- 编辑或删除现有分类/标签
5. 系统设置
- 进入"系统设置"
- 配置网站基本信息
- 设置社交链接
- 配置统计代码
主要功能实现
Markdown渲染
使用Commonmark库实现Markdown解析:
// MarkdownUtils.javapublicstaticStringmdToHtml(Stringmarkdown){Parserparser=Parser.builder().build();Nodedocument=parser.parse(markdown);HtmlRendererrenderer=HtmlRenderer.builder().build();returnrenderer.render(document);}文章分页
使用PageHelper实现分页:
PageHelper.startPage(page,limit);List<ContentDomain>articles=contentDao.getArticles();PageInfo<ContentDomain>pageInfo=newPageInfo<>(articles);缓存使用
使用Spring Cache注解:
@Cacheable(value="articleCache",key="#cid")publicContentDomaingetArticleById(Integercid){returncontentDao.selectByKey(cid);}文件上传
支持本地和七牛云两种方式:
// 本地上传publicStringuploadLocal(MultipartFilefile){StringfileName=file.getOriginalFilename();StringfilePath=uploadPath+fileName;file.transferTo(newFile(filePath));returnfilePath;}// 七牛云上传publicStringuploadQiniu(MultipartFilefile){Authauth=Auth.create(accessKey,secretKey);Stringtoken=auth.uploadToken(bucket);Responseresponse=uploadManager.put(file.getBytes(),fileName,token);returndomain+fileName;}扩展建议
如需进一步完善项目,可考虑以下扩展:
- 用户系统:支持用户注册、登录、个人中心
- 文章搜索:集成Elasticsearch实现全文搜索
- RSS订阅:生成RSS feed
- SEO优化:添加sitemap、robots.txt
- 社交分享:集成社交媒体分享功能
- 邮件通知:评论通知、订阅通知
- 多主题支持:支持切换不同主题
- Markdown增强:支持更多Markdown扩展语法
- 图片压缩:上传时自动压缩图片
- 访问统计:更详细的访问统计分析
注意事项
- 首次运行需要导入SQL文件创建数据库表
- 默认管理员密码为123456,建议首次登录后修改
- 生产环境建议使用HTTPS
- 定期备份数据库数据
- 上传文件建议使用七牛云等对象存储服务
- 注意配置文件中的敏感信息安全
常见问题
Q: 数据库连接失败?
A: 检查MySQL服务是否启动,数据库配置是否正确
Q: 图片无法显示?
A: 检查上传路径配置,确保目录有写入权限
Q: 后台无法登录?
A: 确认数据库中users表有管理员账号,密码是否正确
Q: Markdown渲染异常?
A: 检查Commonmark依赖是否正确引入
Q: 缓存不生效?
A: 检查Ehcache配置,确保缓存注解正确使用
演示视频
项目包含演示视频文件:个人博客.mp4,展示了系统的完整功能。
适用对象
- Spring Boot初学者:综合运用Spring Boot核心知识
- 博客搭建者:快速搭建个人博客网站
- Hexo用户:提供后台管理界面,兼容Hexo路径
- 学习者:学习完整的Web项目开发流程
许可证
本项目仅供学习交流使用,请勿用于商业用途。
如有问题,欢迎提Issue或联系作者。
祝使用愉快!📝✨
- 完整代码:https://www.aiyuanma.vip/posts/java-blog