@Transactional和执行时间

时间:2014-09-17 15:30:43

标签: java spring spring-transactions

我正在开发一个使用spring like application容器的java web应用程序。现在,当我使用事务支持弹簧时,我注意到我的注释方法的时间处理加倍。尝试以更好的方式描述该方法:

@Service
public class MyServiceImpl implements MyService{

    @Autowired
    UtilService utilService;

    @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
    public void loadContracts(File fileToProcess,UtilDTO dto){

            List<MyObject> objects = utilService.readSomethings("xxx","yyy")

            //I modify Them

           //I save or update  them


    }

}


@Service
public class UtilServiceImpl implements UtilService{

    @PersistenceContext
    EntityManager entityManager;

    public List<MyObject> readSomethings(String p1,String p2){

    String queryString =    "from MyObject o where o.param1 = :param1 "
                    + " and o.param2 = :param2 ";

    Query q = entityManager.createQuery(queryString);
    q.setParameter("param1", p1);
    q.setParameter("param2", p2);

    return q.getResultList();   


    }

}

例如:

readSomething 方法为时已晚,如果删除注释,其处理时间会有所改善。

为什么会出现这种差异?

1 个答案:

答案 0 :(得分:1)

性能可能是由于您每次调用该方法时创建新事务并暂停现有事务。

来自documentation on Propagation.REQUIRES_NEW,强调我的:

  

创建新交易暂停当前交易(如果存在)。类似于同名的EJB事务属性。

除非您有关于为此方法创建新交易的具体要求,否则我建议让它落实到默认行为 - 即Propagation.REQUIRED