java如何在一次请求的不同业务方法中共享数据
2021/5/22 14:25:32
本文主要是介绍java如何在一次请求的不同业务方法中共享数据,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java后端web服务,对于某次前端请求,可能需要执行多个不同的业务方法才能处理完成。
这些不同的方法在做业务处理时可能需要多次操作某一数据,我们常规的做法是把该数据通过参数传递给方法,或者在方法需要该数据时从数据库获取。
前者迫使我们改变方法签名,后者加重数据库负担,因此都不是理想的做法。
实际上,我们可以在Controller或者Service类中定义一个ThreadLocal<T>变量,在首次拿到数据后,通过set方法将数据保存到变量中,在这之后被调用的方法中就可以用get方法得到这份数据。ThreadLocal<T>变量是线程内共享的,不同的线程之间不会相互影响,线程执行完以后数据会自动释放。
ps:
最近在一个springmvc项目中使用ThreadLocal时,遇到了数据错乱问题,偶现,大致情况如下。
我的代码执行顺序是先在A处set值,然后在B处get值,最后没有clear数据。
某次业务请求过来,执行到B处,get到了之前某次业务请求set进来的值,最终导致业务处理错乱。
具体原因还不确定,可能跟spring线程复用有关,难道线程复用导致ThreadLocal数据不能自动释放?
暂时在业务处理结束时加了clear处理,希望有老师给与指点,谢谢。
这篇关于java如何在一次请求的不同业务方法中共享数据的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-04TiDB 资源管控的对撞测试以及最佳实践架构
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现