java - 在新线程中休眠延迟加载
问题描述
我有一个 Spring 应用程序,需要在用户登录时进行大量数据加载。为了让用户不必等待数据加载,我想异步加载。不幸的是,我依赖于一些延迟加载的对象来加载这些数据,这会导致 Hibernate 出现问题,因为新线程没有会话。
虽然我可以在主线程中加载对象并在加载所有字段后传递它们,但我宁愿避免这种冗长的方法。有没有办法在新线程中安全地加载这些惰性实体?或者可能,Spring 有没有办法在不必关闭当前线程的情况下向客户端返回响应?
解决方案
我不能说这种方法是否是最佳解决方案,但是通过在用于到达新线程中延迟加载的对象的所有方法上使用 Spring 的 @Transactional-annotation,除了创建新线程的方法之外,我能够无需任何额外代码即可完成这项工作。
当然,急切地加载对象也是一种选择。由于我在 Spring 中使用 JPA 实现,我只需将 .getOne() 调用更改为 .findById() 调用。
推荐阅读
- flutter - 你好,不知道为什么我写完assets的路径后还是加载不出来[已回答,]
- python - 为什么在编辑 csv 文件时出现 ValueError?
- deep-learning - 如何使用 PyTorch 跨多个虚拟机训练深度学习模型?
- amazon-web-services - 应用程序负载均衡器的 S3 策略
- javascript - 如何在时刻js或日期查询昨天的数据?
- javascript - 如何使画布Fabric.js中的所有组件不脱离矩形
- c# - 在 C# 中的字典内的列表中添加数据
- ios - 使用 segue Model View Presenter 传递数据
- asp.net-core - 在 ASP.NET Core 应用程序中使用 serilog 时,日志条目中的 ActionId 是什么?
- reactjs - 过滤年龄范围 React.js