首页 > 编程语言 >立志在线学习系统,基于java、vue开发的在线教育平台

立志在线学习系统,基于java、vue开发的在线教育平台

时间:2023-12-17 18:03:47浏览次数:81  
标签:vue java spring boot 接口 lizhi 在线教育 日志 starter

立志在线学习系统,是基于java、vue开发的在线教育平台,将开发PC、小程序、手机端,集成RABC权限+在线考试+文档预览+视频播放+代码生成器等功能。目标是基于此项目可以巩固学习spring boot、vue、Mybatis等技术,欢迎star哟~~

一、技术架构

版本控制:git

依赖管理:maven

接口文档:Swagger

权限验证:Spring Security

数据库:MySql、Druid连接池

数据访问层:Mybatis、Mybatis-Plus 3.1.0

框架:Spring Boot 2.2.6.RELEASE、Spring Cloud Hoxton.SR6、Spring Cloud Alibaba 2.2.0.RELEASE

工具类:commons-lang3、lombok、hutool工具类、swagger、jwt、oshi-core(系统监控框架)、UserAgentUtils

二、开发规范

请参考 :

1.阿里巴巴开发手册:https://pan-yz.chaoxing.com/preview/showpreview_251847117296263168.html?v=1702802710561&enc=a7f61c316467a1a381b19336e857cb1a&wps=false

2.MyBatis Plus手册:https://mp.baomidou.com/

3.开发网站示例:https://www.xuankadashi.com/

三、工程结构

lizhi-edu-parent
│
├─lizhi-edu-admin-server  Spring Boot Admin监控服务端
│
├─lizhi-edu-auth  评估服务
│  ├─api 文档接口
│  ├─common 公共包
│  ├─config 配置包
│  ├─controller 控制器
│  ├─dto 数据传输对象
│  │  ├─query 数据查询对象
│  │  ├─vo 数据展示对象
│  ├─entity 数据库对象
│  ├─mapper Mybatis Mapper
│  ├─service 业务逻辑层
│  │  ├─impl 具体实现类
│  ├─AssessApplication Spring Boot启动器
│
│
├─lizhi-edu-common  公共模块
│  ├─lizhi-edu-common-core 公共核心模块
│  ├─lizhi-database-spring-boot-starter 数据库启动器
│  ├─lizhi-log-spring-boot-starter 日志启动器
│  ├─lizhi-security-spring-boot-starter 权限启动器
│  ├─lizhi-swagger-spring-boot-starter 接口文档启动器
│
├─lizhi-edu-dto  公共数据传输对象
│
├─lizhi-edu-gateway  网关
├─lizhi-edu-generator  代码生成器
│
├─lizhi-edu-rpc  调用第三方rpc接口

四、公共模块使用

1.lizhi-database-spring-boot-starter 数据库模块

1.1基本介绍

lizhi-database-spring-boot-starter提供了对MySql数据库的访问及监控能力,内置Mybatis Plus,及Druid连接池,并为其提供了默认的优化配置,开发者无需了解具体的实现细节,只需引入此模块便可使用Mybatis Plus和Druid的高级特性和功能。

功能预览

1.逻辑删除

2.乐观锁控制

3.字段填充

4.Druid连接池监控、优化

1.2使用

1)导入依赖

在pom.xml文件中导入以下依赖

<dependency>
            <groupId>com.chengxiaoxiao</groupId>
            <artifactId>lizhi-database-spring-boot-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

2)配置文件中添加配置信息

1.数据库配置

可在配置文件中配置数据源信息。

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/database?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
      username: root
      password: 123456789
2.Druid连接池配置

Druid监控界面用户名密码可通过以下进行配置。默认情况下用户:admin,密码:admin

lizhi:
  database:
    #Druid连接池配置
    druid:
      #登录用户名
      user-name: admin
      #登录密码
      password: admin

同时,Druid连接池已默认增加如下默认配置,也可在配置文件中覆盖。

spring:
  datasource:
    druid:
      # 初始化物理连接个数
      initial-size: 1
      # 最大连接池数量
      max-active: 20
      # 最小连接池数量
      min-idle: 5
      # 获取连接时最大等待时间(ms)
      max-wait: 60000
      # 开启缓存preparedStatement(PSCache)
      pool-prepared-statements: true
      # 启用PSCache后,指定每个连接上PSCache的大小
      max-pool-prepared-statement-per-connection-size: 20
      # 用来检测连接是否有效的sql
      validation-query: select 'x'
      # 申请连接时不检测连接是否有效
      test-on-borrow: false
      # 归还连接时不检测连接是否有效
      test-on-return: false
      # 申请连接时检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效(不影响性能)
      test-while-idle: true
      # 检测连接的间隔时间,若连接空闲时间 >= minEvictableIdleTimeMillis,则关闭物理连接
      time-between-eviction-runs-millis: 60000
      # 连接保持空闲而不被驱逐的最小时间(ms)
      min-evictable-idle-time-millis: 300000
      # 配置监控统计拦截的filters(不配置则监控界面sql无法统计),监控统计filter:stat,日志filter:log4j,防御sql注入filter:wall
      filters: stat,log4j,wall
      # 支持合并多个DruidDataSource的监控数据
      use-global-data-source-stat: true
      # 通过connectProperties属性来打开mergeSql(Sql合并)功能;慢SQL记录(配置超过5秒就是慢,默认是3秒)
      connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
3.逻辑删除、创建时间、修改时间、版本号

模块内置对逻辑删除、创建时间、更新时间、版本的支持。并提供对其进行完全控制。

以下为默认值,可在配置文件中将其覆盖。

lizhi:
  database:
    config:
      #是否开启逻辑删除
      enable-logic-delete: true
      #标识逻辑删除的字段,此处用驼峰
      logic-delete-field: deleteStatus
      #标识未删除的值
      logic-not-delete-value: 0
      #标识删除的值
      logic-delete-value: 1
      #是否开启创建时间填充
      enable-create-time: true
      #标识创建时间的字段,此处用驼峰
      create-time-field: createTime
      #是否开启更新时间填充
      enable-update-time: true
      #标识更新时间的字段,此处用驼峰
      update-time-field: updateTime
      #是否开启乐观锁版本号填充
      enable-version: true
      #标识乐观锁版本号的字段,此处用驼峰
      version-field: version

3)Druid监控页面

在浏览器输入网址:http://${ip}:${port}/druid/ 。即可进入Druid登录界面。输入配置的用户名和密码即可登录。

可在界面查看慢SQL、访问统计、SQL监控等功能。

2.lizhi-log-spring-boot-starter 日志模块

2.1基本介绍

lizhi-log-spring-boot-starter提供了对系统日志及操作日志门面。开发者可使用其内置注解,监听所有的接口请求。便于操作追溯及问题复现。

功能预览

1.系统日志的控制

2.操作日志的控制

2.2使用

1)导入依赖

在pom.xml文件中导入以下依赖

<dependency>
            <groupId>com.chengxiaoxiao</groupId>
            <artifactId>lizhi-log-spring-boot-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

2)配置文件中添加配置信息

1.开关配置

可通过以下配置修改日志的开启与关闭。默认情况下操作日志及HTTP请求日志为开启状态

lizhi:
  #日志配置
  logging:
    #HTTP请求日志开关
    http-log:
      enabled: true
    #系统操作日志开关
    sys-log:
      enabled: true

3)使用

系统操作日志可在controller中的请求方法上添加@SysLog注解,如下所示

@RestController
public class TestController {
    @SysLog("测试接口")
    @RequestMapping("/test")
    public Result<Integer> test() {
        return Result.success(1);
    }
}

开发者可在添加日志模块依赖后,实现SysLogOperateService中的writeLog方法,监控到异步日志信息。可在此方法中添加日志入库或其他逻辑。

3.lizhi-swagger-spring-boot-starter 接口文档模块

3.1基本介绍

lizhi-swagger-spring-boot-starter提供了Swagger接口文档模块功能,开发者只需引入此项目依赖,并添加简单的配置,即可使服务具有Swagger接口文档,便于交互、测试、导入MOCK平台使用

3.2使用

1)导入依赖

<dependency>
            <groupId>com.chengxiaoxiao</groupId>
            <artifactId>lizhi-swagger-spring-boot-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

2)添加配置信息

可通过以下配置进行自定义Swagger设置:

lizhi:
  #接口文档
  swagger:
    #是否开启接口文档
    enabled: true
    #扫描的包,一般为controller所在包名
    base-package: com.chengxiaoxiao.lizhicloud.auth.controller
    #接口文档界面显示的标题
    title: 用户权限模块
    #接口文档界面显示的描述信息
    description: 提供用户鉴权、验证、权限分发的功能
    #接口文档的版本号
    version: 1.0.0
    #是否开启权限验证
    enabled-auth: true
    #TOKEN在HEADER中的值
    token-header: TOKEN
    #联系人信息
    contact:
      email: [email protected]
      name: 联系人
      url: http://www.chengxiaoxiao.com

其中base-package、title为必填项,其他可不填已包含默认值。

3)使用Swagger接口文档

在各服务api包中添加swagger注解,并用controller实现其中的方法。即可在接口文档中展示对应的接口。

在浏览器输入网址:http://${ip}:${port}/swagger-ui/ 。即可进入接口文档展示界面。

4.lizhi-fastjson-spring-boot-starter 统一结果处理模块

4.1基本介绍

lizhi-fastjson-spring-boot-starter提供了对JSON响应数据的统一化配置与展示策略。主要包括以下功能:

1.统一编码为UTF-8

2.统一日期格式为:yyyy-MM-dd HH:mm:ss

3.空数据策略:

1)字符串Null值转换为“”

2)数字Null转换为0

3)Boolean Null值转换为false

4)集合Null转换为空集合

4.2使用

1)导入依赖

<dependency>
            <groupId>com.chengxiaoxiao</groupId>
            <artifactId>lizhi-fastjson-spring-boot-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

2)测试

导入并引入依赖后,可测试默认返回的JSON,校验是否生效。

5.lizhi-login-spring-boot-starter 登录中心模块

4.1基本介绍

lizhi-login-spring-boot-starter提供了对用户权限校验及用户信息解析器的功能,开发者只需引入此模块,便可实现对用户权限校验、获取当前登录用户的功能。

4.2使用

1)导入依赖

<dependency>
            <groupId>com.chengxiaoxiao</groupId>
            <artifactId>lizhi-login-spring-boot-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

2)使用

1.引入依赖后,此服务便开启了用户权限校验的功能。必须按照规定格式,传入TOKEN才可以访问本服务接口。

2.引入依赖后,可以在本服务controller接口参数中添加LoginUser对象参数,实现获取登录用户功能。例如:

@RestController
@RequestMapping("/operator-info")
public class OperatorInfoController implements OperatorInfoControllerApi {
    @Override
    @GetMapping("/{id}")
    public Result detail(@PathVariable String id, LoginUser loginUser) {
        return Result.success(operatorInfoService.detailById(id));
    }
}

在用户有权限访问本接口的基础上,当前登录的用户信息便可以注入loginUser变量。

6.lizhi-cors-spring-boot-starter 跨域处理模块

4.1基本介绍

lizhi-cors-spring-boot-starter提供了对各个微服务的跨域能力,开发者只需引入此模块,便可使微服务拥有了跨域处理的功能。

4.2使用

1)导入依赖

<dependency>
            <groupId>com.chengxiaoxiao</groupId>
            <artifactId>lizhi-cors-spring-boot-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

2)使用

引入此模块,无需配置即可使用。

标签:vue,java,spring,boot,接口,lizhi,在线教育,日志,starter
From: https://blog.51cto.com/u_16447476/8862453

相关文章

  • MongoDB:Java开发者的新型数据库解决方案
    一、介绍MongoDB是一种高性能、开源的、面向文档的数据库系统,它使用C++语言编写,并提供了一系列强大的功能和特性。MongoDB具有灵活的数据模型、高效的查询性能、强大的扩展性和易用性等特点,使得它成为Java开发者的新型数据库解决方案。二、MongoDB的特点文档型数据模型:MongoDB采用......
  • [前端][Vue] 利用webstorage API存储数据
    关于webstorageAPI官方文档https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API省流说明1️⃣两种--localStorage&sessionStorage2️⃣存多久--local一直存到除非用户主动删,session等浏览器关掉就删3️⃣API--一样的,存setItem,读getItem,删一个remove,删全部......
  • 无涯教程-Java - String substring(int beginIndex, int endIndex)函数
    截取beginIndex索引开始到endIndex结束之间的字符串内容。Stringsubstring-语法这是此方法的语法-publicStringsubstring(intbeginIndex,intendIndex)这是参数的详细信息-beginIndex - 包含开始索引。endIndex   - 不包含结束索引。Stringsubstri......
  • java状态模式
    1定义一个接口2publicinterfaceState{3publicvoidhandle();4}567/**8*具体的状态角色(下单)9*CreatedbyAdministrator10*/11publicclassPlaceAnOrderimplementsState{12//具体化状态的行为13@Override14publ......
  • 我是如何解决java.security.cert.CertPathValidatorException异常的
    在rocky8.5上,有个jdk8跑的程序连接windows上SQLServer2012失败了,环境如下:[zcm@rockymicroService]$cat/etc/redhat-releaseRockyLinuxrelease8.5(GreenObsidian)[root@rockysecurity]#java-versionopenjdkversion"1.8.0_302"OpenJDKRuntimeEnvironment(......
  • Java-与斐波那契数列相关的变体问题
    变体问题指的是提问的方式不一样了,但是解决问题的方法还是用斐波那契数列来解。——写在前面的话。一、变体1-兔子问题1.问题描述第一个月,有一对未成熟的兔子第二个月上述的一对兔子成熟第三个月,他们能产下一对小兔子所有兔子遵循相同规律,求第n个月的兔子个数2.分析例子假设我要求......
  • java实现二叉树前序搜索输出深度完整代码
    importjava.util.Scanner;//1:无需package//2:类名必须Main,不可修改classTreeNode{publicintval;publicTreeNodeleft;publicTreeNoderight;publicTreeNode(intval){this.val=val;this.left=null;this.right=null;}}p......
  • 无涯教程-Java - boolean startsWith(String prefix, int toffset)函数
    判断字符串是否以prefix开头。booleanstartsWith-语法这是此方法的语法-publicbooleanstartsWith(Stringprefix,inttoffset)这是参数的详细信息-prefix   -要匹配的前缀。toffset  -从何处开始查找字符串。booleanstartsWith-返回值如果参数表示......
  • 无涯教程-Java - boolean startsWith(String prefix)函数
    判断字符串是否以prefix开头。booleanstartsWith-语法publicbooleanstartsWith(Stringprefix)这是参数的详细信息-prefix  - 要匹配的前缀。booleanstartsWith-返回值如果是以prefix开头,则返回true,否则为false。booleanstartsWith-示例importjava.io.*......
  • VUE框架指令语法与v-bind实现标签属性内部动态------VUE框架
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title>......