Java接口优化
场景回顾
当时在优化一个接口,从controller一直查询到dao层,发现dao层时间耗时很长,1.97s,但是dao层只做了一个简单的查询操作。sql时间也很短,只需要几百毫秒,时间到底去了哪里?
查询结果
最后发现,查询sql时间很短,但是返回又很慢,原来是返回的时候使用了BeanUtils.copy()方法,将PO转换为vo,几千个PO速度就会拉慢。
上网查询
验证
我用的正是Apache BeanUtils。删除之后,性能果然得到了提升
结论
这种 copy 属性的方法底层都使用了反射,最好不要使用。最简单的方法,还是自己创建类,并赋值属性值。
并且直接使用全参构造器,也不符合规范。
最好方式是
- 无参构造器 + set 属性方法
- 使用Lombok 的 @Builder 注解,使用builder创建类