深入解析Zheng框架:搭建与部署实战指南

前提条件

群里面有一篇 zheng- 环境搭建及系统部署文档 20170213(三版).docx, 里面详细讲解了各个依赖软件的安装和配置,
所以这里不会再讲依赖的搭建过程.
假设你已经将所有的依赖环境搭建完毕.

我的环境

名称 版本
系统 MacOS 10.12.6
IDE Intellij IDEA 2017.2.3
JDK 1.8
Maven 3.3.9
Dubbo 2.5.3
Zookeepe 3.4.10
Nginx 1.12.1
ActiveMQ 5.15.0
MySQL 5.7.16
Redis 3.2.3
Dubbo-admin
Dubbo-monitor

用到的工具

  1. IDEA
  2. LICEcap –> gif 制作
  3. MWeb –> Markdown 编辑器
  4. iTerm –> 替代 Terminal 的工具

环境搭建

我记得去年还是前年, 用 Intellij IDEA 的人已经超过了 Eclipse, 如果你还在用 Eclipse, 我想安利你马上转到 IDEA 来, 不是一般的好用, 我已经安利了不下
50 人 使用 IDEA 了.

之后的系列文章, 会穿插一些 IDEA 的教程, 在实践中学习, 效果杠杠的.

这里强烈推荐一个专门写 IDEA 的教程, 希望能帮助你一些

https://github.com/judasn/IntelliJ-IDEA-Tutorial.git

不要怕不会用, 等你学会了以后, 效率是别人的几倍

20241229154732_BGyuUh4B.webp

clone 项目, 使用 Intellji IDEA 导入这些就不说了

这步完成的样子是这样的

20241229154732_yKJSQxsX.webp

项目结构和命名看着非常舒服

导入 SQL

找到 project-datamodel --> zheng.sql , 双击打开

如果是第一次打开这个项目, 你肯定会看到这个

20241229154732_FpAPd2IP.webp

设置数据库

设置之前你得使用命令或者 navicat 创建一个叫 zheng 的数据库

问题 1: [1067] Invalid default value for ‘last_login_time’

导入 SQL 报错

首先复习下 MySQl 中 datetime, timestamp, date 的区别.

日期类型 存储空间 日志格式 日期范围
datetime 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
timestamp 4 bytes YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~ 2037-12-31 23:59:59
date 3 bytes YYYY-MM-DD 1000-01-01 ~ 9999-12-31

这里用 timestamp

  1. 占用空间小
  2. 在进行 insert, update 数据时,timestamp 列会自动以当前时间(CURRENT_TIMESTAMP)填充 / 更新.

但是到 2038-00-00 00:00:00 时, 系统就崩溃了, 想想就刺激, 😂

然而并不是这个问题

这种报错多半是你 MySQl 升级到 5.7 而引起的默认值不兼容的问题.
想到可能是类型的默认值被限制了,查看 sql_mode.

1
show variables like 'sql_mode';

sql_mode STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

果然 NO_ZERO_IN_DATE, NO_ZERO_DATE 这两个参数限制时间不能为 0

1
2
# 临时解决
set session sql_mode='STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
1
2
3
4
5
6
# 永久方案
# 直接修改 my.cnf 文件

在 [mysqld] 下面添加如下列:

sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

20241229154732_pW5gOynv.webp

风骚的操作, 完美的表名 😁

修改配置文件

密码值使用了 AES 加密,使用 com.zheng.common.util.AESUtil 工具类修改这些值

这么多文件怎么找?

IDEA 的强大之处 之一 就在于它强大的搜索功能. 第一次打开项目时, IDEA 会花点时间创建所有除了 Exclued Folders 的文件的索引.

不管这些, 直接使用 双击 shift 来全局查找.

2.gif

胡悠我, 打开的全是占位符的配置文件, 还要去找主配置才行, 然后一个一个的改? you are so young so simple

全局替换, 秒秒钟的事

3.gif

其他的照着来

启动依赖

我启动这些依赖贼简单, 不信你看

20241229154732_258FNQfX.webp

start, start, start ….

我记得以前用 windows 的时候, 启动这些依赖很恼火, 一个一个启动, 后来写了个批处理, 一建启动, 在虚拟机上, 懒的开了…..

配置 nginx

这里先说一个 windows 的坑

nginx.conf 配置文件默认编码是 utf-8, 在 windows 上使用记事本打开 utf-8 编码的文件, 它会在文件前面加上一个 BOM 😂, 不知道你们有没有踩过这个坑….

也是这个坑, 又踩了一次.

是项目上一个 Excel 导出的问题

poi 导出大量数据, 内存溢出, 所以到数据量很大时, 就用导出文本文件的方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Test
public void test() throws IOException {
// 数据存放的位置
String path="/Users/xxx/Develop/test.xls";
// 生成文件
BufferedWriter buff = new BufferedWriter(new FileWriter(path));
// 插入标题 代表 3 列
buff.write("部门名称\t用户\t电话");
// 换行
buff.write("\n");
// 插入 5 万条记录
String s = "中文测试";
for (int i = 0; i < 50000; i++) {
buff.write(s + "\tzheng\t1234567890");
buff.write("\n");
}
buff.close();
}

如果 windows 的用户使用 Excel 打开就会是乱码, 原因就是上面说到的

改为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Test
public void test() throws IOException {
// 数据存放的位置
String path="/Users/codeai/Develop/test.xls";
// 生成文件
BufferedWriter buff = new BufferedWriter(new FileWriter(path));
// 在文件开始加一个 U+FEFF
buff.write(new String(new byte[] {(byte) 0xEF, (byte) 0xBB, (byte) 0xBF}));
// 插入标题 代表 3 列
buff.write("部门名称,用户,电话");
// 换行
buff.write("\r\n");
// 插入 5 万条记录
String s = "中文测试";
for (int i = 0; i < 50000; i++) {
buff.write(s + ",zheng,1234567890");
buff.write("\r\n");
}
buff.close();
}

为巨硬感到委屈, 明明是它先,什么都是它先的,VC6 也好,BOM 也罢… 为什么不按照它的来了, 搞得它现在想改都不行了…. 😂

所以在 windows 下, 不要用 记事本, 用 sublime text 或者 vscode.

扯远了…………. 😅

2 个 server 配置, 没有看到 zheng-config 模块, 所有这里只配置一个反向代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#user  nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;

server {
listen 9526;
server_name localhost;
location / {
root /Users/codeai/Develop/codes/Java/zheng/zheng-ui/zheng-cms-web/;
index index.html index.htm;
add_header Access-Control-Allow-Origin *;
}
}
}

启动服务

启动之前 先 install 一下

  1. zheng-upms-rpc-service
  2. zheng-cms-rpc-service
  3. zheng-upms-server
  4. zheng-cms-admin

20241229154732_sP9iBIVK.webp
20241229154732_iLxiIuNt.webp

20241229154732_JzTMDdjk.webp

项目部属

😂

太晚了, 后天要早去去大理拍婚纱照, 留着后面写
只是照着项目的 readme.md 把环境搭好了, 能成功运行了, 里面的代码还没看

像这些环境依赖, 大家可以使用 Vagrant 来搭建, 以后换电脑或者给别的同事搭建环境, 丢一个文件给他就 ok 了.
或者使用 docker, 说得我好像会一样…. 😂, 还没开始看呢 哈哈, 以后大家一起学习

感谢 zheng 哥给我们开源这么好的学习框架

如果我没叫错的话, 应该叫 zheng 哥吧…

20241229154732_zO1CRq26.webp

20241229154732_toybalCB.webp

为什么 0 不代表女? 这样好记啊

向 Facebook 学习, 增加 56 种性别, 那才好玩 😂😂😂