社区项目 forest 修改
# 前言
本文为 RYMCU (opens new window) 社区系统项目学习记录,我将会在 review 项目的过程中逐步改进不合理代码,同时修改部分 bug,最后加入部分新 feature,最后
# 开始
# 数据库
目前所有表前缀均为 forest,并不合理,需要集体修改表名称,根据不同功能划分不同前缀,粗略分为
- system:用于存储系统级别的配置信息或者系统管理相关的表。例如,存储系统设置、权限管理等信息。
- member:用于存储与会员、用户或者客户相关的信息。例如,用户账户信息、会员等级信息、用户日志等。
- infra:用于存储基础设施或者基础数据相关的表。例如,存储地区信息、货币信息、语言信息等。
- qrtz:用于存储与调度、定时任务相关的表。例如,存储定时任务的调度信息、任务执行记录等。
手动修改 mysql 表前缀可能比较麻烦,可以使用类似下面 sql 语句实现
下面的语句会生成对应的表 alter 修改语句,之后自行执行得到的 alter 修改语句,即可使得所有 forest 前缀的表转换为 system 前缀(当然 alter 语句可以自行修改)
SELECT
CONCAT(
'ALTER TABLE ',
table_name,
' RENAME TO system_',
SUBSTRING(table_name, 8),
';'
)
FROM
information_schema.TABLES
WHERE
table_name LIKE 'forest%';
2
3
4
5
6
7
8
9
10
11
12
注意,里面的数字 8 是截取字符串的长度,长度为前缀(forest)字母长度加 2,所以其他表需要自行修改
entity,mapper 修改脚本如下,依次执行,之后删除原本文件夹,重命名新文件夹即可
public class FilePrefixProcessTests {
public static void main(String[] args) {
//String sourceFolder = "/path/to/source/folder";
//String destinationFolder = "/path/to/destination/folder";
String sourceFolder = "E:\\Internship\\Projects\\BBS论坛\\forest\\src\\main\\java\\com\\rymcu\\forest\\entity";
String destinationFolder = "E:\\Internship\\Projects\\BBS论坛\\forest\\src\\main\\java\\com\\rymcu\\forest\\entity2";
File sourceDir = new File(sourceFolder);
File destDir = new File(destinationFolder);
// 创建目标文件夹
if (!destDir.exists()) {
destDir.mkdirs();
}
// 获取源文件夹下的所有 Java 文件
File[] files = sourceDir.listFiles((dir, name) -> name.endsWith(".java"));
if (files != null) {
for (File file : files) {
try {
processFile(file, destDir);
} catch (IOException e) {
e.printStackTrace();
}
}
} else {
System.out.println("No Java files found in the source folder.");
}
}
private static void processFile(File file, File destDir) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
StringBuilder content = new StringBuilder();
// 逐行读取文件内容并进行处理
while ((line = reader.readLine()) != null) {
// 判断当前行是否包含 @Table(name = "forest_*")
if (line.contains("@Table(name = \"forest_")) {
// 使用正则表达式替换
line = line.replaceAll("@Table\\(name = \"forest_(.*?)\"\\)", "@Table(name = \"system_$1\")");
}
content.append(line).append("\n");
}
reader.close();
// 创建目标文件并写入处理后的内容
String destFilePath = destDir.getAbsolutePath() + File.separator + file.getName();
BufferedWriter writer = new BufferedWriter(new FileWriter(destFilePath));
writer.write(content.toString());
writer.close();
System.out.println("Processed file: " + file.getName());
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
注意文件 src/main/java/com/rymcu/forest/lucene/model/UserDic.java
文件中也定义表,需要手动修改
数据库表补充,原作者删除了这些表,应该是前端不再使用相关接口
CREATE TABLE system_special_day (
id bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
special_day_name varchar(255) DEFAULT NULL COMMENT '名称',
weights int DEFAULT NULL COMMENT '权重/优先级,小数优秀',
start_time datetime DEFAULT NULL COMMENT '开始时间',
expiration_time datetime DEFAULT NULL COMMENT '过期时间',
is_repeat int DEFAULT NULL COMMENT '是否重复',
repeat_cycle int DEFAULT NULL COMMENT '重复周期',
repeat_cycle_unit int DEFAULT NULL COMMENT '0:天1:周2:月3:年',
created_time datetime DEFAULT NULL COMMENT '创建时间',
img_url varchar(255) DEFAULT NULL COMMENT '图片路径',
css_style varchar(255) DEFAULT NULL COMMENT '执行全局样式',
PRIMARY KEY (id)
) COMMENT '特殊日期' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE system_permission (
id bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
permission_category varchar(255) DEFAULT NULL COMMENT '权限标识',
PRIMARY KEY (id)
) COMMENT='权限表' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 修改简介
技术开发分享社区,你可以在这里分享有关技术开发的独特见解,或是
数据库 system_article、system_article_content 不建议直接修改数据库内部,可以在前端删除文章,再重新创建
给新人的一封信内容
您好,欢迎来到 RYMCU 社区,RYMCU 是一个嵌入式知识学习交流平台。RY 取自”容易”的首字母,寓意为让电子设计变得 so easy。
## 新手的疑问
初学者都有很多疑问,在这里对这些疑问进行一一解答。
- 我英语不好,可以学习编程吗?
对于初学者来说,英语不是主要的障碍,国内有着充足的中文教程。但在接下来的学习过程中,需要阅读大量的英文文档,所以还是需要有一些英语基础和理解学习能力,配合翻译工具(如百度翻译)进行理解。
- 我数学不好,可以学习编程吗?
对于初学者来说,有必要掌握数学逻辑思维和解决问题的思路,这些能力都在数学学习中得到锻炼,想必学习编程的人数学成绩肯定不错。初学者不需要多高的数学知识水平,但在未来的学习过程中需要更高级的数学知识,应随时做好接受学习新知识的准备。
- 我想学习编程,大佬可以教教我吗?
一般我是拒绝的,我认为学习是互相促进的过程,而不是单方面的输出,并且我也有很多事情要做。不仅是我,绝大多数人都会拒绝。
- 学习编程是使用 IDE 好还是 Notepad 好?
最近看到有人在争论这个问题,使用 IDE 是新手的不二选择。
- 好吧,我自学编程,有问题可以问大佬吗?
可以,但是我拒绝回答书中的基础问题和可以通过搜索引擎解决的问题。
- 学习编程是看书好还是看视频好?
萝卜青菜,各有所爱,关键是看哪种方式能让你更好理解和学习。我个人是喜爱书本,可以随时查阅资料,非常方便。
- 我学习了很久,但没有成效,我是不是没有天赋?
我个人觉得对于入门的学习来说,天赋对于学习的影响微乎其微,如果你的学习效率低下,考虑是不是以下原因:
- 单纯的努力不足,三天打鱼两天晒网。如果不能改正,不如考虑干点别的。
- 数学逻辑思维和解决问题的能力不足。这个可以学习一些简单易懂的教程,看看视频等,慢慢锻炼,没有任何捷径。
- 学习方法不对,主要是练得少。只翻书和看视频是没有用的,必须配合大量的练习。个人推荐的方法是:
- 看完书以后把书上给出的例题再敲一遍,不是照着书上写。
- 把课后习题都给做了。
- 做几个自己感兴趣的项目。
- 对于自己不懂的问题,先看看书,再百度谷歌,最后才询问他人。
## 提问的方法
当你遇到**使用搜索引擎、查阅相关文档、进行 Debug**(如果没有做过上述操作的话,请立刻去做)也无法解决的问题的时候,你可能会向别人求助。现在就来讲讲如何正确提问。
当你进行提问时,请保证你准确提供了以下信息:
- 准确的描述你的需求和实际问题情况。
- 准确的描述你所在的平台的信息。例如:
- 开发板型号
- 运行程序( IDE 等)名称及其版本
- Windows/Linux/MacOS 任一平台及其版本
- 依赖的类库及其版本
- 提供你的源代码,将源代码包括开发环境完整上传至源码托管平台(如 Github)。
- 提供你的完整日志、异常输出。
如果你在社区提问,请在你的标题也简略的包含问题描述和平台信息。例如 `stm32f103x 开发板` `win10` 运行串口通信程序时,中文显示乱码
如果你想学习更多关于提问的方法、技巧、礼仪,看看[提问的智慧](https://rymcu.com/article/80)会给予你许多帮助。
## 自学的方法
- 每当学习到新知识的时候应该及时的练习和实践
- 多看看开发文档,每次你都能获得新的收获
- 多看看别人的源代码,很多问题都能得到解决
- 搜索引擎是一个好东西
- 写学习笔记和博客是记录知识的好方式,但不是死记知识点
- 好的提问方式才能获得正确答案
- 合理的规划学习时间,而不是三天打鱼两天晒网
## C 语言基础教程
- [C 语言中文教程](https://doc.yonyoucloud.com/doc/wiki/project/c/c-intro.html)
- [C语言小白变怪兽](http://c.biancheng.net/c/)
## 单片机基础教程
- [51 单片机入门教程(Keil4 版)](https://rymcu.com/portfolio/42)
- [STM32 独家入门秘籍](https://rymcu.com/portfolio/11)
- [51 单片机入门教程(VS Code 版)](https://rymcu.com/portfolio/41)
## 其他教程
- [markdown 教程](https://rymcu.com/guides/markdown)
- [社区编辑器使用教程](https://rymcu.com/guides/vditor)
## 推荐书籍
- 《C 程序设计语言( 第 2 版 ) 》 —— [美] 布莱恩·W.克尼汉(Brian W.Kernighan),[美] 丹尼斯·M.里奇(Dennis M.Ritchie) 著
- 《软技能: 代码之外的生存指南》—— [美] 约翰 Z.森梅兹(John Z.Sonmez) 著
- 《大教堂与集市》—— [美] Eric S Raymond 著
- 《黑客与画家》—— [美] Paul Graham 著
## 愿景
> 关于更多的信息请阅读 [《RYMCU 白皮书》](https://rymcu.com/article/115)
我们致力于构建一个即严谨又活泼、专业又不失有趣的开源嵌入式知识平台。在这里我们可以畅所欲言、以平等、自由的身份获取和分享知识。在这里共同学习、交流、进步、成长。
## 行为准则
> 详细行为准则请参考 [参与者公约](https://rymcu.com/article/20)
无论问题简单与否,欢迎大家积极留言、评论、交流。对他人多一些理解和包容,帮助他人解决问题和自我提升是我们的终极目标。
欢迎您发表原创文章、分享独到见解、作出有价值的评论。所有原创内容著作权均归作者本人所有。所发表内容不得侵犯企业或个人的合法权益,包括但不限于涉及个人隐私、造谣与诽谤、商业侵权。
## 其他
### 微信公众号
![qrcodeforgh245b3234e782258.jpg](https://static.rymcu.com/article/1642081054095.jpg)
### github
[RYMCU](https://github.com/rymcu)
### gitee
[RYMCU 社区](https://gitee.com/rymcu-community)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# 一键改包
# 后端(数据库)
与项目名称有关系的有如下
每个文件的包位置,导入的包位置,entity 实体类数据库表对应,xml 中的数据库表
pom 中相关代码,还有讲启动类也是与项目名有关,也需要更改
数据库名称之后需自行修改
application.yml
# 以下需要手动改动
logging:
level:
com:
rymcu: info
2
3
4
5
我默认没有替换 sql 内容(只有 sql 文件名改变),所以建议按照上面章节自行修改数据库和代码后,再生成新 sql 文件
对于 docker-compose.yml
,有两个自定义容器名修改,可自行改动
项目根目录 Dockerfile 有关 rymcu 自行修改
最后修改 mysql 数据库名即可,或是直接新建数据库再导入数据也可以(推荐)
# 前端
针对后端接口 config\api.config.js
# 修复
# 其他
部分文件夹下添加 pacakge-info.java,提供包级的文档说明或者是包级的注释,示例如下
/**
* This is domain module, the core business logic is implemented here.
*
*/
package com.rickie.tracking.domain;
2
3
4
5
注意,只不过创建该文件在 idea 中应该选择普通文件,如果选择创建 Java Class 则会失败
# 检索引擎
lucene 初始创建是比较耗时间的,
这部分设计者选用 lucene 而不是 solr,我猜测应该是想要实现更加细节的 api,对检索实现更细粒度的控制
分词器默认字典,题词字典,扩展字典,停止词字典等均在 resources/lucene 目录下
我暂时不清楚设计者的意图,后面会逐步修改
# 安全性
JwtConstants.JWT_SECRET
签名密钥(也叫做盐)直接硬编码在源代码中,不够安全(虽然设计者在注释中强调上线需变更),并且修改起来也不够方便
加盐(Salt)是将随机数添加到原始密码数据中,以增加密码的复杂度,并防止密码散列的彩虹表攻击
# 参考链接
- MYSQL批量修改表前缀与表名sql语句 - 慕尘 - 博客园 (cnblogs.com) (opens new window)
- 开源项目 package-info.java 文件-腾讯云开发者社区-腾讯云 (tencent.com) (opens new window)
- 如何使用分页插件 (pagehelper.github.io) (opens new window)
- Shiro安全框架【快速入门】就这一篇! - 我没有三颗心脏 - 博客园 (cnblogs.com) (opens new window)
- TransactionalEventListener使用场景以及实现原理,最后要躲个大坑 - 掘金 (juejin.cn) (opens new window)
- Lucene还可以这样玩?SpringBoot集成Lucene实现自己的轻量级搜索引擎 (opens new window)
- jwt生成token 加盐-掘金 (juejin.cn) (opens new window)