![](/img/trans.png)
[英]Connection to Db dies after >4<24 in spring-boot jpa hibernate
[英]Keep DB connection using JPA/Hibernate
我在應用程序中使用JPA和Hibernate。 (使用PostgreSQL作為DBMS)
我執行了很多選擇語句,以按名稱存儲在數據庫中的項目。
我使用以下代碼:
//em is the javax.persistence.EntityManager Object.
Query q = em.createQuery("Select i from Item i where i.name = :name");
q.setParameter("name", nameParam);
List<NavigationItem> results = q.getResultList();
因此,我的問題是,通過連接到數據庫,准備語句並關閉連接,我浪費了很多時間。 我使用Eclipse TPTP跟蹤花費時間最多的方法:(每分鍾)
com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery():〜22s com.mchange.v2.c3p0.impl.NewProxyConnection()。close():〜16s com.mchange.v2.c3p0.impl.NewProxyConnection( ).prepareStatement(String):〜12s com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource()。getConnetction():〜6s com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.close():〜4s
Query的執行需要他的時間,沒關系,但是我認為其他方法比他們需要的時間更多。 如果我可以為幾個(或幾百個)執行打開連接,則應用程序會快很多。
所以我的問題是:如何保持此連接打開?
性能分析確實會對性能產生一些影響,但是仍然,執行時間報告她發瘋,而且這是意外的。 我的意思是,您正在使用連接池,因此獲得連接和關閉幾乎是瞬時的,這些操作根本不應該是問題,這就是使用連接池的關鍵所在。 而且准備陳述的時間非常可笑。
某個地方出了點問題, 保持連接打開絕對不是解決方案(池應該可以工作)。 但是沒有足夠的信息來進行診斷。 因此,能否請您添加以下詳細信息:
附帶說明一下,您應該偏愛使用命名查詢(JPA提供程序通常會對它們進行預編譯,以避免每次解析JPQL和生成SQL的開銷)。 但這不是這里的問題。 根本原因必須解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.