我們有一個使用C3P0來集中連接的Web應用程序。我們將C3P0作爲數據源注入到JdbcTemplate中。你可以看到我們是如何做到這一點的位置:此連接池情況將如何泛出?
<bean id="dataSourceDev" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${databasedev.driver}" />
<property name="jdbcUrl" value="${databasedev.url}"/>
<property name="user" value="${databasedev.username}"/>
<property name="password" value="${databasedev.password}"/>
<property name="initialPoolSize" value="5" />
<property name="minPoolSize" value="5" />
<property name="maxPoolSize" value="1000" />
<property name="acquireIncrement" value="5" />
<property name="maxStatements" value="1000" />
<property name="maxStatementsPerConnection" value="1000"/>
<property name="maxIdleTime" value="10800"/> <!-- 3 hours -->
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg>
<ref bean="dataSourceDev" />
</constructor-arg>
</bean>
<bean id="someDaoBean" class="com.gedi.platform.dao.SomeDaoClass">
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
<bean id="someResourceClass" class="com.gedi.platform.SomeResourceClass">
<property name="someDao" ref="someDaoBean" />
</bean>
你可以看到,這是一個J2EE Web應用程序 - 它使用碼頭作爲其應用服務器。我的問題是,Jetty如何實例化我們的bean,以及如何影響連接池?如果我們有幾十個用戶在不同的時間使用這個網站,那麼所有這些用戶都會被放置在同一個連接池中嗎?或者每個客戶端只有一個連接池,其中每個HTTP客戶端都會創建Resource,DAO,JdbcTemplate和C3P0的新實例?
我清楚了嗎?我想要的是一個用於所有HTTP請求的連接池,無論它們是來自源自波士頓還是新西蘭的網頁瀏覽器。這樣,連接池正在發揮其最大效果。但是,如果爲每個HTTP客戶端實例化一個新的連接池,那麼池並不會有太大的改進。
編輯
一個重要的珍聞 - 我們使用JAX-RS的澤西參考實現產生RESTful接口。所以我們的servlet通過Jersey發送請求,找到合適的Resource類/方法來處理它們。我想知道Jersey是否會在每個請求中重新實例化這些類,或者始終保持它們的一個實例。
感謝您的明確答案! – ktm5124
和萬歲馬格納斯卡爾森。 – ktm5124