后端常见问题
若在此当中没有获取到有用的信息,可以反馈到 issues 当中,作者会尽快回复
初始密码
- 账号:admin
- 密码:1111111 (7 个 1)
后端目录结构
main
├─config ## 全局配置
├─exception ## 全局异常处理
├─gen ## 代码生成相关
│ ├─config ## 代码生成配置
│ └─service ## 代码生成接口
│ └─impl ## 代码生成接口实现
├─system ## 系统管理相关
│ ├─annotation ## 自定义注解
│ ├─aspectj ## 切面
│ ├─base ## 基础类
│ │ └─controller ## 控制器
│ ├─config ## 系统配置
│ ├─constant ## 系统常量
│ ├─controller ## 控制器
│ ├─enums ## 枚举
│ ├─filter ## 过滤器
│ ├─manager ## 管理类
│ │ └─factory ## 工厂
│ ├─mapper ## 数据层
│ ├─pojo ## 实体类
│ ├─service ## 业务层
│ │ └─impl ## 业务层实现
│ └─vo ## 视图对象
├─utils ## 工具类
└─vo ## 视图对象
上传文件失败
在生产环境中,大多数上传失败的原因为权限不足的问题,请检查项目运行的角色用户是否拥有对应目录的写入权限和读取权限
在线用户统计不准确
在线用户统计主要统计于登录的 COOKIE,由于浏览器的缓存机制,COOKIE 在浏览器关闭后失效,或人为清除 COOIKE,会导致在 Redis 当中存储的在线用户的 COOKIES 不匹配,导致在线用户统计会不准确,若需要更准确的统计,请使用别的方式如:WebSocket
文件列表数据对不上
文件上传有如下几种情况:
文件上传成功,数据库保存失败,导致文件存在,但是数据库中不存在,此时文件列表数据对不上(解决方式:添加 try cach 捕获到异常后删除文件)
文件上传失败,数据库保存成功,导致文件不存在,但是数据库中存在,此时文件列表数据对不上(添加事务 @Transactional 可解决)
文件上传过慢
文件上传过慢的原因可能是:
- 服务器配置过低,如内存不足,CPU 过低,磁盘过低等
- 文件过大,上传时间过长(限制上传文件大小)
- 文件过大,上传时间过长(文件上传添加了文件哈希校验,获得文件哈希需读取一遍文件,若文件过大会导致这里运行的时间过长,可通过修改文件哈希算法解决,或减少文件上传大小)
提示
文件上传接口实现:src/main/java/cn/anlucky/luckyadmin/system/service/impl/SysFilesServiceImp.java
文件上传工具:cn/anlucky/luckyadmin/utils/file/FileUploadUtils.java
注意
文件上传工具类当中,是提供了上传文件,并未提供上传文件后的处理,上传文件成功后保存数据库的操作在接口实现当中
自定义全局工具类
src/main/java/cn/anlucky/luckyadmin/config/LuckyConfig.java 全局配置类
全局配置类提供了全局的设置,SpringBoot 启动后会自动注入在 application.yml 中 Lucky 开头的配置,若您想自定义或新增配置,请按照如下方式添加
- 在 application.yml 当中添加对应的配置
- 创建对应的 Config 配置类
- 添加组件注解,将 bean 对象交给 Sping IOC 进行管理自动注入
- 添加对应属性,添加属性时,请按照驼峰命名法
- 创建对应的 Set 方法(注意,使用 Static 修饰的属性无法被自动注入,框架采用使用私有 set 方式注入,并赋值的方式,参考 LuckyConfig 进行自定义)
文件删除
文件删除使用了逻辑删除并未真正删除文件和数据库的内容,(此方式比较常见),使用 MybatisPlus 的逻辑删除功能
文件删除数据库使用了逻辑删除,文件没有逻辑删除的选项,我们系统针对于本地存储的文件删除,使用了移动的方式,具体可以查询代码
cn/anlucky/luckyadmin/utils/file/FileUploadUtils.java
当然,我们也提供了物理删除的方式,查询代码修改配置即可实现自动切换移动和物理删除方式
七牛存储
框架集成七牛存储,默认情况下上传到本地当中,配置了七牛的情况下会上传到七牛云当中去 注意在 yml 文件中进行配置七牛的上传秘钥
提示
七牛存储的空间类型目前只支持了 公开型空间,私有空间暂不支持 (但提供了私有空间下载链接的方法 src/main/java/cn/anlucky/luckyadmin/utils/file/QiNiuUploadUtils.java getDownloadUrl) 原因:公开空间不需要添加鉴权,所以可直接配置 WebMvcConfigurer.addResourceHandlers 资源映射
/** 七牛文件上传路径 */
registry.addResourceHandler(Constants.RESOURCE_QINIU + "/**")
.addResourceLocations(LuckyConfig.getQiniuDomain() + "/");
提示
私有空间需要添加鉴权,在这里直接添加此映射无法直接访问到资源,故对于系统框架而言暂时只支持了私有空间,若必须实现私有,请自行实现
/**
* 获取下载地址
* @param fileName 文件名
* @param timeOut 下载地址过期时间 默认 3600
* @return
*/
public static String getDownloadUrl(String fileName,Long timeOut) {
// 获取下载地址
Auth auth = Auth.create(LuckyConfig.getQiniuAk(), LuckyConfig.getQiniuSk());
// 编码
String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8).replace("+", "%20");
// 组合 url + / + 文件名
String publicUrl = String.format("%s/%s", LuckyConfig.getQiniuDomain(), encodedFileName);
// 链接过期时间 默认3600秒
if (timeOut == null) {
timeOut = 3600L; // 1小时
}
// 获取下载链接
return auth.privateDownloadUrl(publicUrl, timeOut);
}
其他存储
自行实现 步骤如下:
- 在工具包中创建对应的 upload 工具类,并实现上传文件 如:QiNiuUploadUtils.java
- 在 FileUploadUtils.java 中 uploadFile 方法添加对应的判断系统设置和对应的代码执行
- 检查后续的配置是否正确