# 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. 网关的生命周期 ![网关的生命周期](![WeChatec10578edccd3d782a6e13cab4bf8e67.png](https://i.loli.net/2019/10/11/Dt5hWBr2eP7wg46.png)) #### 3.2 通用模块 1. 主要分为三个部分 1. 通用代码定义、配置定义 2. 统一的响应处理 3. 统一的异常处理 2. ##### 统一的响应 1. 请求流程,为了是返回给前端的数据的统一性,将返回的数据统一的包装到data里面,方便前端对此进行判断 1. code表示返回的状态码 2. message表示返回状态的信息 2. 这样展示的好处 1. 不直接展示错误,对前端用户比较友好 2. 异常分类,便于排查问题,DEBUG 3. 降低业务代码中对异常处理的耦合 3. ![统一的响应处理](image/统一的响应处理.png) ### 四、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** ![](./image/event_type.png) 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 ```