使用Spring @Transactional处理并行处理8个线程

时间:2014-09-18 06:02:24

标签: spring transactional

我们正在使用Jetty + Spring。我的WebService HostService并行接收N个请求(请求到达我的webservice时记录时间)但是当尝试调用Transactional add方法时,类似于下面的代码片段

@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class ClassA {
    @Transactional
    public Host add(Host host) {
        //logging time
        Thread.sleep(100);
    }
}

现在从代码服务我调用了ClassA的add方法,并记录了时间,一次只有8个请求到达这里,然后当一个完成其他启动时。

我已经尝试通过实际的webservice调用和本地进程调用来删除Thread.sleep,但这并没有帮助。但是,当我删除@Transactional时,所有请求都会同时发送到add方法,因此@Transactional会出现问题。

我想了解

  1. @Transactional实际如何运作,以及为什么它限制批量调用8次,我可以将此批次更改为更高的数字。
  2. 我的所有课程都是范围原型,那么它试图抓住锁定了什么?
  3. 我应该做什么,并行处理所有请求,因为我的应用程序在非数据库中依赖于它只调用其他web服务(3),我不需要任何锁定,我只需要线程级别锁定,如果其中一个web服务失败,我就可以回滚。

0 个答案:

没有答案