我已经使用 Tomcat 有一段时间了。但是我从来没有完全了解它是如何工作的,尤其是线程池和 JDBC 连接池。
以一个标准的 Spring Web 应用程序(带有 c3p0 连接池)为例。我的问题是
当 TC 启动时,它是否创建了 N 个线程,每个线程都有一个 applicationContext?
如果是这样,这是否意味着每个线程都会创建自己的 bean 实例列表?
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 个线程 = 5N 个连接?
这对我来说听起来不对。我认为 JDBC 池在所有线程之间共享。但显然 JDBC 池(定义为 ComboPooledDataSource bean)是作为 applicationContext 的一部分创建的,对吧?