【发布时间】:2013-10-28 19:34:20
【问题描述】:
我有一个需要在异步模式下执行一些操作的休息服务。 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(...){
}
}
【问题讨论】:
标签: spring