要说起这个项目,其实已经想了很久了,很早之前就做了第一版的社交管理系统v1.0,也使用了好些年了,但其中一些东西总是让我使用不够满意,然后今年就动手开始了第二版的编写。也就是现在的这个版本。
前端:https://gitee.com/sprouting/personal-system-web
后端:https://gitee.com/sprouting/personal-system-server
由来
为什么写这个系统,做第一版的时候其实就解决2个问题,一是记账,第二是生日提醒。
不知道大家有没这些痛点:
还有一些比较有意思的想法,想在后面加入进来,现阶段可能不会去做
前端过期的时候,一个页面多个请求,会导致大量重复的提示,暂无解决方案。
技术或工具 | 版本 | 备注 |
---|---|---|
jdk | 1.8 + | |
springBoot | 2.3.7.RELEASE | |
sa-token | 1.28.0 | 发展期,还在快速迭代,可以酌情使用最新版本以及最新特性 http://sa-token.dev33.cn/ |
日志 logback | springboot内置版本,使用 sfl4j做日志记录 | |
连接池 durid | 1.2.6 | |
json处理 | hutool自带,hutool版本 5.6.5,如无法满足,则使用springboot官方默认 jackson
|
|
hutool 工具库 | 5.7.16 | https://www.hutool.cn/ |
对象克隆 | springBoot内置,与springboot版本相同 或 使用 hutool BeanUtils.copyProperties | |
mybatis-plus | 3.4.2 | https://mp.baomidou.com/ |
分页 | mybatis-plus内置 | |
mybatis | mybatis-plus内置版本 | |
JSR-303数据校验 | springboot内置版本 | |
liquibase | 4.5.0 | 数据库版本、构建工具 |
翻译 | 有使用到百度翻译、有道、彩云小译,但最终考虑到翻译的效果,使用了百度的API | |
vue-pdf | pdf预览 |
支持局域网手机看电影
update 2023年9月24日16:07:01 新升级
支持作业
支持更高自由度的组合查询
自定义签到任务
统计分析
开发的话直接查看 application.properties
配置文件即可,基本所有的配置都在这里了。
需要额外注意的几个类,AuthenticationInterceptor
这里面配置了权限拦截器和资源映射拦截,如无必要,不建议去修改这里的配置,会导致访问异常。
生产环境只需要关注配置文件即可。 application.properties
中建议只处理修改区。
而且项目启动的时候也必须进行这一块的数据修改。注意,前端的地址不要带中文。
需要注意,前端的地址路径,上面的路径哪些带 /
哪些不带。前端最终的地址是这样的。
访问地址:http://127.0.0.1:8084/index.html
打包的时候注意,我使用的是jdk1.8,建议直接使用发行版,会将配置文件放在外面,另外加启动脚本。需要做的是直接打开配置文件,编辑修改数据库位置以及指定前端位置。
项目下载运行后,直接使用idea 的打包按钮操作
打包成功后,如下路径找到jar
然后将项目合并到一起,如下:
dist中就是前端打包后的包,jre保证在没有安装jdk的环境也可以运行, application.properties 就是配置文件,jar包就不用说了,我们的应用主体,启动的话要使用这个 startup.bat 文件启动,否则不一定会使用外部的配置文件。外部的配置文件是直接从项目拷贝过来的,没有在maven配置了,感觉也没必要
接着修改配置文件
注意,上面使用的是 /
而不是win直接复制过来的\
,否则会有问题,还有没有必要的 /
不要在目录后面乱加。另外,建议使用绝对路径,相对路径很可能引发bug。
运行 startup.bat 后 过一会在浏览器打开 http://127.0.0.1:8084/index.html
配置文件需要说明一点,默认是在当前目录下创建资源文件和数据库
还需要注意一点,日志文件。如果不进行设置的话,那么系统会在项目的磁盘根节点增加一个日志文件,不想放在这里则要进行修改,同样也建议使用绝对路径
另外脚本命令也可以看下,有隐藏cmd弹框的,解决乱码的,也有运行后打开自动打开网页的,但注意,这些配置有些是有冲突的,具体看脚本。
打包后的目录
已使用端口:8084
系统暂时有用2个定时任务,分别是 ClearFileTask
和 DatabaseBackupTask
这2个类
任务 | 原理 | 任务类 | 备注 |
---|---|---|---|
定时清理失效文件、脏数据 | 查询上传文件信息表 ps_upload_file,查询已经过了48小时的临时文件,找到后,根据记录的文件地址信息,删除对应的文件。通常会清理一些上传的图片 | ClearFileTask#start() | 1小时清理一次 |
数据库备份 | 检查是否开启了数据库备份,检查是否sqlite数据库,检查备份记录是否已经备份,从配置文件获取数据库地址进行备份。只保存最新的三条,其他的全部删除。 | DatabaseBackupTask#start() | 2小时一次 |
测试账号: 下雪 密码:123123
master
主分支
1、@CheckLength
针对注解存在的几个问题,比如长度限制这一块,我们需要限制的是数据存储到数据库时候的长度,@Size
和 @Length
注解都不能满足,这2个注解都是活的 str.length
的长度,并不是字符串字节的长度,故而,长度注解采用 @CheckLength
这个自定义注解。这个会验证字节长度,使用的时候,可以参考 RegisterUserPram
类控制层和实体的写法。==暂时只支持String字符串。==
2、@CheckNotNull
检查验证字段是否为空,用来代替 @NotBlank
注解。==暂时只支持String字符串。==
必须空则使用 @Null 注解
3、ID 的校验逻辑
/**
* 如果 @Validated(UpdGroup.class) 修改的时候必须有ID,不能是 undefined 和 null 字符串 等
* 如果 @Validated({AddGroup.class}) 新增的时候ID不能有值,比如 "" 字符串,只能是 null 对象
* 验证的时候,@Validated 注解不加任何参数,不会进入下面的校验逻辑
*/
@CheckNotNull(message = "非法ID", groups = UpdGroup.class)
@Null(message = "无效ID", groups = AddGroup.class)
private String id;
4、当存在 @Validated 注解的时候,如果里面有验证注解,就不需要担心对象为null,但注意,这个时候,这个对象里面的参数很可能是null的。
模拟缓存使用
private static TimedCache<String, String> timedCache = CacheUtil.newTimedCache(30 * 1000);
锁释放则使用如下方式
// 通过再次设置这个值,并将过期时间设置为1毫秒,实现释放锁的功能
timedCache.put(key, "1", 1);
新建的项目总是需要进行一系列的管理非常麻烦,建表,创建语句等等,liquibase可以帮助我们解决这些问题。
脚本已经指定位置,后续需要替换,直接在这里进行路径替换即可。
有道翻译单词发音API
默认的是美音:http://dict.youdao.com/dictvoice?audio=单词,
等号后面接单词,例如:http://dict.youdao.com/dictvoice?audio=the
英音和美音:
英音:http://dict.youdao.com/dictvoice?type=1&audio=
美音:http://dict.youdao.com/dictvoice?type=0&audio=
注意,得到的音频其实就是 mp3格式的,可以修改后缀
单词查询含义
http://dict.youdao.com/suggest?num=1&doctype=json&q=单词
等号后面接单词,例如:http://dict.youdao.com/suggest?num=1&doctype=json&q=the
有道句子翻译
http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=要翻译的名子或短语
等号后面接句子或短语,例如:http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=English-speaking world
如果是链接,将句子的空格替换成%20,例如:http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=English-speaking%20world
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。