使用Spring Data和Hibernate时如何正确执行后台线程?

使用Spring Data和Hibernate时如何正确执行后台线程?,第1张

使用Spring Data和Hibernate时如何正确执行后台线程

使用Spring,你不需要自己的执行程序。一个简单的注释

@Async
将为你完成工作。只需
heavyMethod
在你的服务中为其添加注释并返回void或
Future
对象,你将获得一个后台线程。我会避免在控制器级别使用异步注释,因为这将在请求池执行程序中创建一个异步线程,并且你可能会用完“请求接受器”。

延迟异常的问题来自你怀疑来自没有会话的新线程。为避免此问题,你的异步方法应处理完整的工作。不要提供先前加载的实体作为参数。该服务可以使用EntityManager,也可以是事务性的。

我自己不会合并

@Asyn
c,
@Transactional
因此我可以以任何一种方式运行该服务。我只是围绕服务创建一个异步包装器,并在需要时使用该包装器。(例如,这简化了测试)

@Servicepublic class AsyncService {    @Autowired    private Service service;    @Async    public void doAsync(int entityId) {        service.doHeavy(entityId);    }}@Servicepublic class Service {    @PersistenceContext    private EntityManager em;    @Transactional    public void doHeavy(int entityId) {        // some long running work    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5059816.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存