簡體   English   中英

什么時候在 java 中打開 DB 連接

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

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