簡體   English   中英

Oracle - 連接池與spring框架

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

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