文章目录
- I 开发设计
- 性能优化
- 异步调用共享MDC信息
- MDC(Mapped Diagnostic Context)
- II 案例
- 存储设备登录数
- 异步存储用户登录日志
I 开发设计
本文介绍了开发设计中的性能优化和MDC信息共享方案。
在性能优化方面
- 建议数据库层面创建查询索引并避免循环操作
- 代码层面采用异步处理非主流程逻辑。
- 针对异步调用场景,
强调通过指定线程池名称(normalThreadPool)来共享MDC信息。
MDC作为多线程日志上下文传递机制,使用put()/setContextMap()绑定线程数据,需注意清理防止内存泄漏。对于JDK21虚拟线程,推荐使用ScopedValue或自定义装饰器实现MDC传递。
性能优化
- 数据库层面: 查询字段创建索引,循环不执行数据库操作
- 代码层面: 非主流程的逻辑可以使用异步执行,比如日志操作,异步方法获取用户信息可以采取MDC实现
异步调用共享MDC信息
后续如果涉及异步调用的时候,异步方法需要获取用户信息的话,需要指定线程池名称为:normalThreadPool,尤其有多个线程池对象的时候,一定要指定。