簡體   English   中英

如何讓JPA /實體管理器進行並行查詢,而不是將它們分為一批?

[英]How can I get JPA/Entity Manager to make parallel queries instead of lumping them into one batch?

在我的servlet的doGet方法內部,我正在使用JPA TypedQuery檢索我的數據。 我可以通過http get請求方法獲取所需的數據。 獲取數據的方法大約需要10秒鍾,當我發出單個請求時,一切都很好。 當我同時收到多個請求時,會發生問題。 如果我同時發出4個請求,則所有4個查詢都合並在一起,它們需要40秒才能取回所有數據。 如何讓JPA並行進行4個單獨的查詢? 是在persistence.xml中需要設置的東西還是與代碼相關的問題?
注意:我也嘗試在線程中執行此代碼。
一個鏈接和一些適當的術語,以增加我的理解,將不勝感激。

謝謝!

try{
    String sequenceNo = request.getParameter("sequenceNo");
    EntityManagrFactory emf = Persistence.createEntityManagerFactory("mydbcon");
    EntityManager em = emf.createEntityManager();
    long startTime = System.currentTimeMillis();
    List<Myeo> returnData = methodToGetData(em);
    System.out.println(sequenceNo + " " + (System.currentTimeMillis() - startTime));
    String myJson = new Gson().toJson(returnData);
    resp.getOutputStream().print(myJson);
    resp.getOutputStream().flush();
}finally{
    resp.getOutputStream().close(); 
    if (em.isOpen())
            em.close();
}                   

4個同步請求樣本
本地主機/ myservlet / mycodeblock?sequenceNo = A
本地主機/ myservlet / mycodeblock?sequenceNo = B
本地主機/ myservlet / mycodeblock?sequenceNo = C
本地主機/ myservlet / mycodeblock?sequenceNo = D

結果打印報表
A 38002
38 38344
38 38785
D 39065

我想要的是
A 9002
9 9344
9 9785
D 10065

如果執行4個單獨的GET請求,則應並行調用這些請求。 不能將它們混在一起,因為它們在不同的事務中被調用。

如果那不如您所寫的那樣有效,則應檢查是否定義了將連接對dbms的調用序列化的database-connection-pool-size或servlet-thread-pool-size。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM