# ad-spring-cloud
**Repository Path**: ankiecloud/ad-spring-cloud
## Basic Information
- **Project Name**: ad-spring-cloud
- **Description**: spring cloud ad project
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2019-10-09
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
##### ''命令
#### 1. 目录
1. mvn基础命令
2. 模块的yml配置
### 一、MVN基础命令
1. 【打包跳过test】:`mvn clean package -Dmaven.test.skip=true -U`
1. 这里需要注意需要在主工程的目录下进行打包,在子目录可能存在打包失败的情况
2. 【启动不同profiles】:`java -jar ad-eureka-1.0-SNAPSHOT.jar --spring.profiles.active=server1`
### 二、模块的yml配置
#### 2.1 Eureka的配置
1. 分为单个Eureka和多个Eureka的配置
* 单个的Eureka的配置中,不需要指定其他的EurekaServer
* 多个的Eureka集群需要指定注册到其他的EurekaServer上
2. 【**参数分析**】
1. `profiles`:【**参数启动**】标注为对应的server,在打包jar包之后根据不同命令启动对应的server
2. `---`:不同EurekaServer对应的分隔符
3. `hostname`:主机域名,也就是在浏览器访问的Eureka的域名
4. `prefer-ip-address`:
5. `fetch-registry`:获取其他的EurekaServer注册
6. `register-with-eureka`:是否将本地的EurekaServer注册给自己
7. `defaultZone`:
3. 对于yml的配置如下:
```yaml
spring:
application:
name: ad-eureka
server:
port: 8000
eureka:
instance:
hostname: localhost
client:
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
---
spring:
application:
name: ad-eureka
profiles: server1
server:
port: 8001
eureka:
instance:
hostname: server1
prefer-ip-address: false
client:
service-url:
defaultZone: http://server2:8002/eureka/, http://server3:8003/eureka/
---
spring:
application:
name: ad-eureka
profiles: server2
server:
port: 8002
eureka:
instance:
hostname: server2
prefer-ip-address: false
client:
service-url:
defaultZone: http://server1:8001/eureka/, http://server3:8003/eureka/
---
spring:
application:
name: ad-eureka
profiles: server3
server:
port: 8003
eureka:
instance:
hostname: server3
prefer-ip-address: false
client:
service-url:
defaultZone: http://server1:8001/eureka/, http://server2:8002/eureka/
```
### 三、SpringCloud模块介绍
#### 3.1 Zuul网关
1. 网关类似于一个拦截器
1. 网关的生命周期 )
#### 3.2 通用模块
1. 主要分为三个部分
1. 通用代码定义、配置定义
2. 统一的响应处理
3. 统一的异常处理
2. ##### 统一的响应
1. 请求流程,为了是返回给前端的数据的统一性,将返回的数据统一的包装到data里面,方便前端对此进行判断
1. code表示返回的状态码
2. message表示返回状态的信息
2. 这样展示的好处
1. 不直接展示错误,对前端用户比较友好
2. 异常分类,便于排查问题,DEBUG
3. 降低业务代码中对异常处理的耦合
3. 
### 四、MySQL BinLog相关
1. 相关博主的参考文献
1. [**mysql学习笔记**](https://zhuyasen.com/post/mysql.html),里面从基础开始,binlog到集群分片配置都有
2. [开启MySQL的binlog日志](https://blog.csdn.net/king_kgh/article/details/74800513),windows中默认的配置文件名为:my.inf,linux中默认的配置文件名为:my.cnf,mac上默认没有my.cnf,需要手动添加到`/etc/my.cnf`下,重启数据库才能生效
3. [MySQL的binlog日志详解](https://blog.csdn.net/king_kgh/article/details/74833539)
4. [MySQL使用binlog日志做数据恢复](https://blog.csdn.net/king_kgh/article/details/74890381)
5. [**Mac 环境下开启 MySQL 的 binlog**](http://www.imooc.com/article/details/id/280240),这个是配置MAC下的my.cnf,之前试了很久都没有成功,结果这个直接简单的配置就成功了,只是配置了`[mysqld]`,哎,闹心
#### 4.1 BinLog介绍
1. 什么是Binlog?
* 二进制日志,记录数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中。
* 比较重要的场景中都需要打开这个binlog开关,是增量备份的基础,比如master到slave的主从同步,就是通过binlog进行的同步
2. Binlog的作用是什么?
* 有两个主要的作用:复制、恢复和审计。
3. Binlog相关的变量
| 变量名称 | 变量含义 | 相关语句 |
| ------------ | ---------------- | ---------------------------------------------- |
| log_bin | BinLog开关 | 查看变量:show variables like '%log_bin%'; |
| Bingo_format | Binlog日志的形式 | 查看变量:show variables like 'binlog_format'; |
4. Binlog日志的三种格式
| 格式类型 | 格式特征 |
| --------- | ------------------------------------------------------------ |
| ROW | 仅保存记录被修改细节,不记录sql语句上下问相关信息(缺点是每行数据都会记录,类似Update语句,会产生更新多少条语句就会产生多少个事件,使Binlog这个文件会变的很大,Binlog最终会保存在本地) |
| STATEMENT | 每一条会修改的sql都会记录在Binlog中(解决ROW缺点,不会记录大量数据,缺点是为了让Slave端正确的重现,需要记录sql的上下文信息,还有就是在复制某些特殊函数或者功能的时候出现问题,比如sleep函数) |
| MIXED | 以上两种level的混合使用,会根据不同的情况使用两种模式 |
5. 管理Binlog的相关sql的语句
| SQL语句 | 语句含义 |
| ------------------- | ------------------------------------------------------------ |
| show master logs; | 查看所有的Binlog日志列表 |
| show master status; | 查看最后一个Binlog日志的编号名称,一级最后一个事件结束的位置(pos) |
| Flush logs; | 刷新Binlog,此刻开始产生一个新编号的Binlog日志文件 |
| Reset master; | 清空所有的Binlog日志,非常危险的sql命令 |
6. 查看Binlog相关的SQL语句
(show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset] row_count])
| SQL语句 | 语句含义 |
| ---------------------------------------------------------- | ------------------------------------------------------------ |
| show binlog events; | 查看第一个Binlog日志 |
| show binlog events in 'binlog.000030'; | 查看指定的Binlog日志 |
| show binlog events in 'binlog.000030' from 931; | 从指定的位置开始,查看指定的Binlog日志 |
| show binlog events in 'binlog.000030' from 931 limit 2; | 从指定的位置开始,查看指定的Binlog日志,限制查询条数 |
| show binlog events in 'binlog.000030' from 931 limit 1, 2; | 从指定的位置开始,带有偏移,查看指定的Binlog日志,从1开始限制查询的条数2 |
7. Binlog中的**Event_type**

1. 官方提供的Event_type有36种,一般不会用到这么多种
2. Binlog中的Event_type常用的类型
1. QUERY_EVENT:与数据无关的操作,begin、drop table、truncate table(删除现有数据表中的所有数据但不删除表)等
2. TABLE_MAP_EVENT:记录下一个操作所对应的表信息,储存了数据库名和表名
3. XID_EVENT:标记事务提交
4. WRITE_ROWS_EVENT:插入数据,即insert操作
5. UPDATE_ROWS_EVENT:更新数据,即update操作
6. DELETE_ROWS_EVENT:删除数据,即delete操作
#### 4.2 监听Binlog的组件
1. 使用的是github上的开源项目,可以实现对mysql的Binlog解析,mysql-connect-binlog-java
```xml
com.github.shyiko
mysql-binlog-connector-java
0.18.1
```