[英]Oracle - connection Pooling with spring framework
我們正在嘗試在Spring Framework的幫助下實現Oracle連接池。 我們正在使用DBCP連接池方法。 然而,DBCP和spring之間的集成並沒有那么好。
我們面臨的問題是DBCP返回PoolableConnections對象,而Oracle期望OracleConnection對象。 (引發ClassCastException)
似乎已在Oracle 11g中處理此問題。 但是我很好奇其他人如何使用Spring框架為Oracle 10g實現Oracle連接池(使用TOMCAT)。
我們使用Ibatis作為ORM框架。
我相信有辦法。 任何幫助表示贊賞。
我會使用Oracles提供的解決方案,它包含在他們的ojdbc罐中。 較舊的方法是使用類OracleConnectionPoolDataSource,但現在您可以在常規OracleDataSource上設置參數並獲取連接池。
以下是在Spring中如何做到這一點:
<bean id="datasource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close">
<property name="connectionCachingEnabled" value="true" />
<property name="URL" value="${jdbc.url}" />
...all your connection properties
<property name="connectionCacheProperties">
<props merge="default">
<prop key="MinLimit>3</prop>
<prop key="MaxLimit">20</prop>
</props>
</property>
</bean>
我使用C3PO建立連接。 它也有為您提供連接池的優勢。 只需通過spring配置文件定義類型為com.mchange.v2.c3p0.ComboPooledDataSource(或類似)的數據源 bean。 在遇到連接池問題之前,我甚至使用了一個不建議用於生產的spring(DriverManagerDataSource),因為它實際上並沒有進行連接池。
這是一個示例彈簧配置。
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:XE"/>
<property name="user" value="username"/>
<property name="password" value="secret"/>
<property name="minPoolSize" value="5"/>
<property name="maxPoolSize" value="20"/>
<property name="acquireIncrement" value="1"/>
<property name="idleConnectionTestPeriod" value="100"/>
<property name="maxStatements" value="0"/>
<property name="checkoutTimeout" value="60000"/>
Spring然后將dataSource bean注入Hibernate,一切都很順利。 您還需要在類路徑中包含c3pO jar文件...
你不應該實現自己的池,如果這就是你使用的是什么。 Tomcat已經為您做了,而是在Tomcat中定義數據源,讓ORM框架使用它(當您定義Tomcat數據源時,可以在那里指定池配置)。
如果您可以發布一些代碼片段,特別是相關的Spring上下文配置,我可以幫助您提供如何執行此操作的方法。
這是Tomcat文檔,它向您展示了如何做到這一點:
順便說一句,Tomcat也使用DBCP,最好依賴JNDI,因為它使您的代碼更具可移植性(從一個環境到另一個環境 - 例如,開發到生產階段,甚至跨越應用程序服務器 - 例如,到WebSphere,WebLogic等)。
而不是使用SimpleNativeJdbcExtractor使用CommonsDbcpNativeJdbcExtractor來獲取本機連接。 有用。
使用包裝Connections但不包含語句的簡單連接池時,SimpleNativeJdbcExtractor通常就足夠了。 但是,某些池(如Jakarta的Commons DBCP)會包裝它們返回的所有JDBC對象:因此,您需要使用特定的NativeJdbcExtractor(如CommonsDbcpNativeJdbcExtractor)。
點擊此處[http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/jdbc/support/nativejdbc/NativeJdbcExtractor.html]
我也遇到了和你一樣的問題..所以我使用了Oracle Native連接池..它運行順暢..
這里是http://www.lambdaprobe.org/d/oracle.shtml的詳細鏈接
謝謝! PRATIK
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.