zheng 框架解析 (一)


7/6/2017 Zheng

其实前面写了一些东西, 但还是删了, 直接撸代码. 这篇是从 git clone 项目开始, 从搭建环境到部属的过程, 希望对想学习的朋友有帮助.

这是第一篇, 会有系列解析文档放出.

前提条件

群里面有一篇 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

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

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

这步完成的样子是这样的

屏幕快照 2017-09-06 9.09.13

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

导入 SQL

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

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

设置数据库

设置之前你得使用命令或者 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.

show variables like 'sql_mode';
1

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

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

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

sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
1
2
3
4
5
6

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

修改配置文件

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

这么多文件怎么找?

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

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

2

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

全局替换, 秒秒钟的事

3

其他的照着来

启动依赖

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

屏幕快照 2017-09-06 11.36.55

start, start, start ....

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

配置 nginx

这里先说一个 windows 的坑

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

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

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

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

@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();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

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

改为:

@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();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

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

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

扯远了............. 😅

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

#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 *;
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

启动服务

启动之前 先 install 一下

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

屏幕快照 2017-09-07 12.54.21 屏幕快照 2017-09-07 12.57.25

屏幕快照 2017-09-07 12.57.33

项目部属

😂

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

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

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

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

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

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

Last Updated: 7/3/2019, 6:30:00 PM