[TOC] ## 一、Redis使用 注入工具类RedisRepository,封装了Redis的各种api操作 ```java @Autowired private RedisRepository redisRepository; ``` &nbsp; ## 二、统一异常处理 ``` 通用异常处理:DefaultExceptionAdvice ``` ![](https://box.kancloud.cn/3b16058d093d0c316e61205f20698752_1299x429.png) >[info] 如果该工程没有个性化异常处理,则只需要继承 DefaultExceptionAdvice 类,并添加 @ControllerAdvice 注解即可 &nbsp; ## 三、日志埋点工具 * 格式为:{时间}|{来源}|{对象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 ~~~ &nbsp; ## 四、CacheManager集成 * 添加配置,设置过期时间,如果不配置的话就是永久不过期 * 例子如下:配置了两个cache(menu和user)的过期时间 ```yaml zlt: cache-manager:   configs:     - key: menu #cacheKey       second: 600 #过期时间(单位秒) - key: user second: 1800 ``` * 具体使用方式 ```java //在方法或者类上加上以下注解 @Cacheable //判断缓存没有就执行方法更新缓存,缓存有就直接返回缓存的值 @CachePut //标记每次都更新缓存 @CacheEvict //标记删除缓存 ``` &nbsp; ## 五、方法级幂等性 * 主要作用于防止重复提交 * 具体设计可参考:[系统幂等性设计与实践](https://www.kancloud.cn/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 + "已存在"); ``` &nbsp; ## 六、多租户(应用隔离) 该功能默认关闭,添加以下配置到需要数据隔离的服务上即可开启 ```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 配置不需要隔离的语句,直接配置MyBatic的Mapper全路径+sqlId 详情查看:[多租户(应用隔离)](https://www.kancloud.cn/zlt2000/microservices-platform/1224728) &nbsp; ## 七、审计日志 用于记录并审计关键数据修改的操作信息 >[info] 审计信息默认输出到logger文件中:logs/audit/audit.log ![](https://img.kancloud.cn/40/f2/40f2dd6bee7d7081bd499b76faee2dee_323x199.png) ### 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` 表达式 ![](https://img.kancloud.cn/f8/37/f837bd06fa350ee83a23ebbd9a17b5c1_777x185.png)