[英]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.