我有一个需要在异步模式下执行一些操作的休息服务。REST 服务对范围请求组件执行操作。
我的问题:我是否允许在新线程(原始 http 请求线程之外)中使用请求范围组件?当spring现在关闭它们时,需要在范围末尾创建的实体管理器等资源会发生什么?它会在 http 请求的末尾,所以实体管理器可以在异步调用中间关闭吗?
这种情况的秘诀是什么?PaymentService 的范围应该是什么,所以实体管理器将围绕异步调用打开和关闭?我可以明确地做到这一点,但我正在寻找最佳实践以防万一。
public class RestPayment{
@Autowired PaymentService paymentService;
public void pay(){
new Thread(new Runnable() {
public void run() {
paymentService.charge(....);
}
}).start();
}
}
@Component
@Scope(value="request")
public class PaymentService{
@Transactional(value="MainDB", propagation=Propagation.REQUIRED)
public void charge(...){
}
}