littlebot
Published on 2025-04-03 / 0 Visits
0

【源码】基于Spring Boot的OJ在线判题系统

项目简介

此项目是基于Spring Boot框架开发的OJ在线判题系统,提供功能齐全的在线判题平台。系统整合主流框架与业务示例代码,支持用户在线提交代码并自动判题,还具备用户管理、帖子管理、题目管理等丰富扩展功能。

项目的主要特性和功能

主流框架与特性

  • Spring Boot 2.7.x:快速开发框架,简化Spring应用初始化与开发。
  • Spring MVC:构建Web应用的MVC框架。
  • MyBatis + MyBatis Plus:数据访问框架,支持数据库操作与分页查询。
  • Spring Boot调试工具和项目处理器:提供调试与项目管理工具。
  • Spring AOP切面编程:支持面向切面编程,用于日志记录、权限控制等。
  • Spring Scheduler定时任务:支持定时任务调度。
  • Spring事务注解:简化事务管理。

数据存储

  • MySQL数据库:存储用户、题目、帖子等数据。
  • Redis内存数据库:缓存数据和实现分布式登录。
  • Elasticsearch搜索引擎:全文搜索和灵活检索。
  • 腾讯云COS对象存储:文件上传和存储。

工具类

  • Easy Excel表格处理:Excel文件读写。
  • Hutool工具库:提供丰富工具方法。
  • Gson解析库:JSON数据解析和生成。
  • Apache Commons Lang3工具类:常用工具方法。
  • Lombok注解:简化Java代码,自动生成getter、setter等方法。

业务特性

  • Spring Session Redis分布式登录:支持分布式环境用户登录。
  • 全局请求响应拦截器(记录日志):记录请求和响应日志。
  • 全局异常处理器:统一处理系统异常。
  • 自定义错误码:提供详细错误码和信息。
  • 封装通用响应类:统一API响应格式。
  • Swagger + Knife4j接口文档:自动生成API文档。
  • 自定义权限注解 + 全局校验:支持权限控制和参数校验。
  • 全局跨域处理:支持跨域请求。
  • 长整数丢失精度解决:解决JSON序列化长整数精度问题。
  • 多环境配置:支持不同环境配置管理。

业务功能

  • 用户管理:包含登录、注册、注销、更新、检索、权限管理等。
  • 帖子管理:涵盖创建、删除、编辑、更新、数据库检索、ES灵活检索等。
  • 题目管理:包括添加、删除、更新、获取、分页获取列表、编辑、提交题目及获取提交列表等。
  • 文件上传:支持分业务文件上传。
  • 微信开放平台登录:支持通过微信开放平台登录。
  • 微信公众号订阅:支持订阅、收发消息、设置菜单。

安装使用步骤

MySQL数据库

  1. 修改 application.yml 中的数据库配置,指向自己的数据库: yml spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/my_db username: root password: 123456
  2. 执行 sql/create_table.sql 中的数据库语句,自动创建库表。
  3. 启动项目,访问 http://localhost:8101/api/doc.html 打开接口文档,在线调试接口。

Redis分布式登录

  1. 修改 application.yml 中的Redis配置,指向自己的Redis服务器: yml spring: redis: database: 1 host: localhost port: 6379 timeout: 5000 password: 123456
  2. 修改 application.yml 中的session存储方式: yml spring: session: store-type: redis
  3. 移除 MainApplication 类开头 @SpringBootApplication 注解内的exclude参数: java @SpringBootApplication

Elasticsearch搜索引擎

  1. 修改 application.yml 中的Elasticsearch配置,指向自己的Elasticsearch服务器: yml spring: elasticsearch: uris: http://localhost:9200 username: root password: 123456
  2. 复制 sql/post_es_mapping.json 文件中的内容,通过调用Elasticsearch的接口或者Kibana Dev Tools创建索引: PUT post_v1 { 参数见 sql/post_es_mapping.json 文件 }
  3. 开启同步任务,将数据库的帖子同步到Elasticsearch:
  4. 找到job目录下的 FullSyncPostToEsIncSyncPostToEs 文件,取消掉 @Component 注解的注释,再次执行程序触发同步。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】