4

Spring Framework を使用して Oracle 接続プールを実装しようとしています。DBCP接続プーリング方式を使用しています。ただし、DBCP と Spring の統合はうまくいきません。

私たちが直面している問題は、DBCP が PoolableConnections オブジェクトを返し、Oracle が OracleConnection オブジェクトを期待していることです。(ClassCastException をスローします)

この問題は Oracle 11g で対処されているようです。ただし、他の人が Oracle 10g のスプリング フレームワーク (TOMCAT を使用) を使用して Oracle 接続プールをどのように実装したかについては興味があります。

ORM フレームワークとして Ibatis を使用しています。

私は方法があると確信しています。どんな助けでも大歓迎です。

4

5 に答える 5

15

ojdbc jarに含まれているOracle提供のソリューションを使用します。以前はOracleConnectionPoolDataSourceクラスを使用していましたが、通常のOracleDataSourceにパラメータを設定して接続プールを取得できるようになりました。

春にそれを行う方法は次のとおりです。

<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>
于 2009-07-14T21:58:25.410 に答える
4

私はC3POを使用して接続を確立します。また、接続プールを実行できるという利点もあります。Spring構成ファイルを使用して、com.mchange.v2.c3p0.ComboPooledDataSource(または同様のもの)などのタイプのデータソースBeanを定義するだけです。接続プールで問題が発生する前に、実際には接続プールを実行していないため、本番環境での使用が推奨されていないSpringの1つ(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に注入し、すべてが順調です。また、クラスパスにc3pOjarファイルが必要です...

于 2009-07-13T12:01:29.127 に答える
3

使用している場合は、独自のプーリングを実装しないでください。Tomcat はすでにそれを行っています。代わりに、Tomcat でデータ ソースを定義し、ORM フレームワークにそれを使用させます (Tomcat データ ソースを定義するときに、そこでプール構成を指定できます)。

いくつかのコード スニペット、具体的には関連する Spring コンテキスト構成を投稿できれば、その方法を提供できます。

これを行う方法を正確に示すTomcatのドキュメントは次のとおりです。

ちなみに、Tomcat も DBCP を使用しており、JNDI に依存することをお勧めします。JNDI を使用すると、コードの移植性が向上します (ある環境から別の環境へ (たとえば、開発からステージングから本番環境へ、またはアプリケーション サーバー間で (たとえば、WebSphere、WebLogic など)))。 )。

于 2009-07-13T18:28:50.567 に答える
0

SimpleNativeJdbcExtractor を使用する代わりに、CommonsDbcpNativeJdbcExtractor を使用してネイティブ接続を取得します。できます。

Connections をラップするが Statements をラップしない単純な接続プールを使用する場合、多くの場合、SimpleNativeJdbcExtractor で十分です。ただし、一部のプール (Jakarta の Commons DBCP など) は、返されるすべての JDBC オブジェクトをラップします。したがって、特定の NativeJdbcExtractor (CommonsDbcpNativeJdbcExtractor など) を使用する必要があります。

ここをクリック [http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/jdbc/support/nativejdbc/NativeJdbcExtractor.html]

于 2013-08-21T17:40:35.117 に答える
-1

私もあなたと同じ問題に直面していました..だから私はOracle Native接続プールを使用しました..それはスムーズに動作します..

ここに詳細へのリンクがあり ます http://www.lambdaprobe.org/d/oracle.shtml

ありがとう!プラティック

于 2009-07-13T18:18:49.590 に答える