[TOC]
## 一、Redis使用
注入工具類RedisRepository,封裝了Redis的各種api操作
```java
@Autowired
private RedisRepository redisRepository;
```
## 二、統一異常處理
```
通用異常處理:DefaultExceptionAdvice
```

>[info] 如果該工程沒有個性化異常處理,則只需要繼承 DefaultExceptionAdvice 類,并添加 @ControllerAdvice 注解即可
## 三、日志埋點工具
* 格式為:{時間}|{來源}|{對象id}|{類型}|{對象屬性(以&分割)}
~~~
//例子1:
PointUtil.info(user.getId(), "user_login", "username="+user.getUsername()+"&mobile="+user.getMobile()+"&openId="+user.getOpenId());
~~~
* 埋點日志
* 日志路徑:`logs\point\point.log`
* 上面例子生成的記錄如下
~~~
2019-01-03 10:32:01|user-center|1|user_login|username=admin&mobile=18888888888&openId=123
~~~
## 四、CacheManager集成
* 添加配置,設置過期時間,如果不配置的話就是永久不過期
* 例子如下:配置了兩個cache(menu和user)的過期時間
```yaml
zlt:
cache-manager:
? configs:
? ? - key: menu #cacheKey
? ? ? second: 600 #過期時間(單位秒)
- key: user
second: 1800
```
* 具體使用方式
```java
//在方法或者類上加上以下注解
@Cacheable //判斷緩存沒有就執行方法更新緩存,緩存有就直接返回緩存的值
@CachePut //標記每次都更新緩存
@CacheEvict //標記刪除緩存
```
## 五、方法級冪等性
* 主要作用于防止重復提交
* 具體設計可參考:[系統冪等性設計與實踐](http://www.hmoore.net/zlt2000/microservices-platform/925445)
* service實現類繼承`SuperServiceImpl`,例子如下:
```java
//例子1
private final static String LOCK_KEY_USERNAME = CommonConstant.LOCK_KEY_PREFIX+"username:";
String username = sysUser.getUsername();
boolean result = super.saveIdempotency(sysUser, lock
, LOCK_KEY_USERNAME+username
, new QueryWrapper<SysUser>().eq("username", username));
//例子2
private final static String LOCK_KEY_CLIENTID = CommonConstant.LOCK_KEY_PREFIX+"clientId:";
String clientId = client.getClientId();
boolean result = super.saveOrUpdateIdempotency(client, lock
, LOCK_KEY_CLIENTID+clientId
, new QueryWrapper<Client>().eq("client_id", clientId)
, clientId + "已存在");
```
## 六、多租戶(應用隔離)
該功能默認關閉,添加以下配置到需要數據隔離的服務上即可開啟
```yml
zlt:
tenant:
enable: true
ignoreTables:
- sys_user
- sys_role_user
- sys_role_menu
ignoreSqls:
- com.central.user.mapper.SysUserMapper.findList
```
>[info] zlt.tenant.enable 是否開啟多租戶(動態修改sql),默認`false`
> zlt.tenant.ignoreTables 配置不需要隔離的表名
> zlt.tenant.ignoreSqls 配置不需要隔離的語句,直接配置MyBatis的Mapper全路徑+sqlId
詳情查看:[多租戶(應用隔離)](http://www.hmoore.net/zlt2000/microservices-platform/1224728)
## 七、審計日志
用于記錄并審計關鍵數據修改的操作信息
>[info] 審計信息默認輸出到logger文件中:logs/audit/audit.log

### 7.1. 配置信息
該功能默認關閉,添加以下配置到需要記錄審計日志的服務上即可開啟
```yml
zlt:
audit-log:
enabled: true
```
### 7.2. 添加依賴
服務需要依賴該jar
```xml
<dependency>
<groupId>zlt-commons</groupId>
<artifactId>zlt-log-spring-boot-starter</artifactId>
</dependency>
```
### 7.3. 添加注解
在需要審計的方法上添加 `@AuditLog` 注解,如果在類上添加則該類的所有方法都生效,支持 `spEL` 表達式

- 項目介紹
- 項目聲明
- 項目簡介
- 核心功能
- 運行環境
- 項目更新日志
- 文檔更新日志
- 分支說明
- F&Q
- 部署教程
- 環境準備
- 必要啟動模塊
- 擴展模塊(可選)
- 打包工程
- 開發說明
- 登錄認證
- 基礎功能
- 分布式功能
- Spring Boot自定義配置自動提示
- 如何新增一個服務
- 自定義配置參數清單
- 公共配置
- 授權認證中心
- 日志中心
- 搜索中心
- 文件中心
- 核心接口
- 密碼模式授權
- 授權碼模式授權
- 簡化模式授權
- 客戶端模式授權
- 手動刷新token
- 用戶名+密碼+驗證碼授權
- openId授權
- 手機號+密碼授權
- 賬號登出接口
- 檢查token有效性
- OIDC模式授權
- 獲取JWT公鑰
- 系統設計
- 企業級微服務總體分層架構圖
- 企業級服務認證架構設計
- 有網絡隔離
- 無網絡隔離V1
- 無網絡隔離V2
- url級權限控制
- 多用戶類型擴展
- WebSocket接口鑒權
- 授權參數加密
- 兼容舊的密碼加密方式
- 數據權限
- 企業級日志解決方案設計
- 企業級監控架構設計(Metrics)
- 框架技術選型
- 架構設計方法論思維導圖
- 系統冪等性設計與實踐
- 分布式ID生成器解決方案
- 實時搜索系統設計
- 企業級功能
- alibaba/nacos注冊中心
- 介紹與相關資料
- 設計模型
- 部署
- 配置中心
- 服務注冊發現
- 生產部署方案
- 通過Nginx來實現環境隔離
- 統一日志中心詳解
- 介紹與相關資料
- docker安裝部署
- 安裝包部署(6.x版本)
- elasticsearch 6.x
- logstash 6.x
- kibana 6.x
- 安裝包部署(7.x版本+xpack)
- elasticsearch 7.x
- logstash 7.x
- kibana 7.x
- Filebeat安裝部署
- ES索引管理
- 定時任務定期刪除
- Index Lifecycle Management
- 沒數據問題排查思路
- Logstash
- Grok語法調試
- Grok常用表達式
- 配置語法中的條件判斷
- ELK自身各組件監控
- ELK多租戶方案
- 慢查詢sql詳解
- 審計日志-elk詳解
- alibaba/sentinel限流熔斷
- 介紹與相關資料
- 使用示范
- 動態規則擴展
- 生產應用
- 網關流控
- JWT的RSA非對稱密鑰生成
- Docker
- 安裝(外網)
- 安裝(內網)
- 構建項目鏡像(免Dockerfile文件)
- APM監控-SkyWalking
- 介紹與相關資料
- APM系統簡單對比(zipkin,pinpoint和skywalking)
- server安裝部署
- agent安裝
- 日志信息清理
- Metrics監控
- 介紹與相關資料
- 安裝部署
- 各組件監控
- Grafana儀表盤模板下載
- Grafana告警配置
- 分布式事務
- 基礎概念和理論
- TX-LCN(同步場景)
- SEATA(同步場景)(v1.3)
- RocketMQ(異步場景)
- MySQL
- 主從復制
- 主從切換
- 主主復制
- 高可用方案
- Redis
- 單機
- 主從復制
- 主從復制+哨兵
- cluster集群
- 持久化方案
- 數據庫之分庫分表
- 分庫分表思路
- 分庫分表部署上線方式
- ShardingSphere配置
- 消息隊列
- 消息隊列對比參照表
- Spring-Cloud-Stream消息框架
- RocketMQ
- 介紹與相關資料
- 安裝部署
- 常見異常處理
- RocketMQ事務消息原理
- Kafka
- 介紹與相關資料
- 應用場景
- 安裝部署
- 集群部署
- Kafka Connect
- 分布式文件系統
- FastDFS
- 介紹與相關資料
- 特性詳解
- 文件系統的對比
- 安裝部署
- MinIO
- Canal數據庫日志解析消費
- 介紹與相關資料
- 安裝部署
- 高可用架構部署
- 實時同步數據到ElasticSearch
- 全量同步數據到ElasticSearch
- 多租戶(應用隔離)
- 技術介紹與隔離方案
- 本項目實現詳解
- 分布式日志鏈路跟蹤
- 單點登錄
- 單點登錄詳解
- 前后端分離的單點登錄
- OIDC協議單點登錄
- 單點登出詳解
- Zookeeper集群搭建
- Spring
- 升級 Spring Boot 2.5 與 Spring Cloud 2020 注意要點
- 企業開發環境搭建
- 研發項目管理軟件(禪道)
- Maven私服
- 安裝部署
- 使用介紹
- Docker私有鏡像倉庫
- 安裝部署
- 使用介紹
- 容器管理平臺
- 介紹與相關資料
- 安裝部署
- 使用介紹
- 持續集成部署CICD
- 持續交付的含義
- 影響持續交付的因素
- 代碼分支策略選擇
- CICD流程設計
- 代碼倉庫Gitlab
- 安裝部署
- 免密訪問
- webhook配置
- 自動化部署Jenkins
- 安裝部署
- ssh免密登錄
- 流水線簡單例子
- 流水線參數化構建例子
- 靜態代碼測試SonarQube
- 應用性能
- 壓力測試工具
- 介紹和安裝
- 使用介紹
- JVM
- JVM性能調優
- 常見JVM內存錯誤及解決方案
- JVM 分析工具詳解
- Spring Cloud性能調優
- Elasticsearch性能優化
- 我的GitChat
- Spring Boot集成Elasticsearch7.x詳解
- 微服務統一日志方案ELK7.x落地實戰
- Redisson 分布式鎖詳解與可視化監控方案
- 交流反饋
- 云服務器購買優惠