![](/img/trans.png)
[英]Java connection pool is not limiting the number of TCP connections opened to the DB server
[英]When is a DB connection is opened in java
在 spring 中,讓帶有 @transitional 注釋的方法 A 不調用 DAO 並執行任何 SQL 查詢。 那么,方法A從不連接數據庫嗎?
@Transactional
注釋不會導致建立數據庫連接,因為它不知道要連接到哪個數據庫。
請記住,一個程序可能連接到多個數據庫。
什么時候在 java 中打開 DB 連接?
這確實是一個廣泛的問題。
答案取決於應用程序代碼配置與數據庫連接的方式。
通常對於“真實”應用程序,您不會為每個客戶端請求打開連接。
這將是低效的。
相反,當應用程序啟動時,稱為連接池的組件會創建特定數量的連接,而該數量可以根據實際客戶端請求增加或減少。 而這些連接存儲在 memory 中。 最后,當客戶端代碼請求連接時,池提供它。
關於數據庫事務,在 spring 中由@Transactional
表示是另一回事。 它象征着在數據庫管理系統中執行的一個工作單元。
關於:
讓帶有 @transitional 注釋的方法 A 不調用 DAO 並執行任何 SQL 查詢。 那么,方法A從不連接數據庫嗎?
即使沒有@Transactional
,查詢也需要執行連接。
如果代碼不執行任何查詢,它借用連接池的風險很小。
答案是方法A
不會建立數據庫連接。
假設您使用 spring 引導和 spring 數據 JPA。
With default configuration ( spring.jpa.open-in-view
is set to true), each request will be bound with a Hibernate Session object, and database access is processed with the help of the object.
如果有數據庫訪問發生,session object 將從應用程序啟動階段初始化的連接池中借用數據庫連接,如果沒有發生則什么也不做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.