簡體   English   中英

需要幫助了解Tomcat線程池和JDBC連接池

[英]Need help understanding Tomcat thread pool and JDBC connection pool

我一直在使用Tomcat。 但我從來沒有完全了解它是如何工作的,特別是線程池和JDBC連接池。

以標准的Spring Web應用程序(帶有c3p0連接池)為例。 我的問題是

  1. 當TC啟動時,是否會創建N個線程,每個線程都有一個applicationContext?

  2. 如果是這樣,是否意味着每個線程都有自己的bean實例列表?

  3. 其中一個bean定義是

 <bean id="dataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${db.driverClassName}"/> <property name="jdbcUrl" value="${db.url}"/> <property name="user" value="${db.username}"/> <property name="password" value="${db.password}"/> <property name="minPoolSize" value="5" /> </bean> 

創建此bean時,這將創建5個JDBC連接。 這是否意味着我們最終會結束

5個連接x N個線程= 5個連接?

這對我來說聽起來不對。 我認為JDBC池是在所有線程之間共享的。 但顯然JDBC池(定義為ComboPooledDataSource bean)是作為applicationContext的一部分創建的,對吧?

當TC啟動時,是否會創建N個線程,每個線程都有一個applicationContext?

不,它只創建一個上下文,其中所有bean都可用於該Web應用程序中的每個線程。 這意味着Spring bean(默認情況下為singleton)需要是線程安全的,因為它們通常由多個線程同時訪問。 這很好,因為通常Spring bean是無狀態的,因此根據定義是線程安全的。

此外,只有一個JDBC連接池包含5個連接。 所有Tomcat Web線程(以及其他人,如果創建)都會競爭這5個連接。

因此,您剩下的問題已不再適用。 是什么讓你認為Spring為每個線程創建了上下文?

暫無
暫無

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

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