[汇总] Spring 项目经验
1. Tech
Spring Boot 项目打包 + Shell 脚本部署详细总结
@Conditional @Import @ConfigurationProperties
我在 Spring 的 BeanUtils 踩到的那些坑,千万不要犯!
-
Spring的BeanUtils的CopyProperties方法需要对应的属性有getter和setter方法; -
如果存在属性完全相同的内部类,但是不是同一个内部类,即分别属于各自的内部类,则spring会认为属性不同,不会copy; -
泛型只在编译期起作用,不能依靠泛型来做运行期的限制; -
最后,spring和apache的copy属性的方法源和目的参数的位置正好相反,所以导包和调用的时候都要注意一下。 - CopyProperties 是Shallow Copy,不是Deep Copy!
1 2 3 4 |
这些都是Shallow Copy!!!! BeanUtils.copyProperties(planA, planB); BeanCopier beanCopier = BeanCopier.create(planA.getClass(), planB.getClass(), false); |
1 2 3 4 5 6 7 |
这些是Deep Copy!!!! Cloneable Interface ObjectMapper objectMapper = new ObjectMapper(); PlanDTO planB = new Plan(); planB.readValue(objectMapper.writeValueAsString(planA), PlanDTO.class); |
Refer: https://www.baeldung.com/java-deep-copy
Spring Boot 从 2.2.5 升级到 2.7.2 之后,一堆BUG
别再自己瞎写工具类了,Spring Boot 内置工具类应有尽有, 建议收藏!!
Spring Boot巧用 @Async 提升API接口并发能力!NB!
@Async默认异步配置使用的是SimpleAsyncTaskExecutor,该线程池默认来一个任务创建一个线程,若系统中不断的创建线程,最终会导致系统占用内存过高,引发OutOfMemoryError错误。自定义线程池,可对系统中线程池更加细粒度的控制,方便调整线程池大小配置,线程执行异常控制和处理。
@Autowire和@Resource注解使用的正确姿势,别再用错的了!!
我把SpringBoot项目从18.18M瘦身到0.18M,部署起来真省事!
@ControllerAdvice,可以与 @ExceptionHandler、@InitBinder、@ModelAttribute 等注解注解配套使用。
SpringBoot 实现 Excel 导入导出,百万数据量,性能爆表!
几行代码,搞定 SpringBoot 接口恶意刷新和暴力请求!
求求你别再手动部署jar包了,太low了!动态上传热部署真的太爽了!
加个注释@Async(“threadPoolTaskExecutor”)
2. Performance
敏感数据,“一键脱敏”,Sharding Sphere 完美搞定
3. 3rd Party
Spring Kafka:@KafkaListener 单条或批量处理消息
我终于决定要放弃 okhttp、httpClient,选择了retrofit