BeanCopy和BeanCopier在实际开发中的使用(属性copy效率优化)
2021/4/13 18:57:21
本文主要是介绍BeanCopy和BeanCopier在实际开发中的使用(属性copy效率优化),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
优化场景:
项目的实体类主要分为三种:dto、dao、query等,所以属性copy避免不了,是影响代码执行效率的主要方面之一。
当时的情况是,项目A接受url请求,然后会调用项目B的一个接口去处理明细数据(参数传递主数据,一条主数据对应多条明细数据),项目B处理数据的过程中涉及到属性的copy,而且是循环处理的(循环主数据),当项目A传入项目B的主数据比较多时,那么项目B处理的时间就比较长,而我们这边的服务与服务之间的调用是有时间限制的(我们这是30秒,一个接口处理时间超过30秒已经很长了,用户体验绝对是很差的),所以就会抛出超时的异常。
经过接口监控排查,发现耗时最长的地方就是属性的copy。
优化的解决方案:
1、使用BeanCopier替换BeanCopy
2、使用并行流替换for
下面是优化过程中的注意事项:
使用BeanCopier替换BeanCopy:
1、数据量小用谁都行,数据量大使用BeanCopier。当数据量比较小的情况下,这两种属性的copy效率差不多,但是当数据量大了,BeanCopier效率远超BeanCopy;
2、使用BeanCopier的时候,需要注意,两个实体类之间相同属性的数据类型一定要一样,否则就无法copy,比如int和Integer就无法正常copy;
3、针对2的问题,可以使用Converter来进行转换,但是如果使用了useConverter,那么BeanCopier就会只按照useConverter的规则进行属性copy。所以在写创建一个实体类的时候,最好使用统一的数据类型,这也是一个良好的编程习惯。
另外使用BeanCopier也需要注意深度copy的问题。
使用并行流替换for:
因为循环只是在处理数据,每个数据之间互不干扰,所以使用jdk8的并行流比较合适,效率比使用for更是大大提高。
效果:
优化后,压测的效果是:相同数据量的情况下,相比之前,项目B该接口的数据处理效率提升了200倍。
这篇关于BeanCopy和BeanCopier在实际开发中的使用(属性copy效率优化)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升