Java Oracle-使用spring框架的连接池

Java Oracle-使用spring框架的连接池,java,spring,tomcat,oracle10g,ibatis,Java,Spring,Tomcat,Oracle10g,Ibatis,我们正试图在Spring框架的帮助下实现Oracle连接池。我们正在使用DBCP连接池方法。然而,DBCP和spring之间的集成并没有那么好 我们面临的问题是DBCP返回PoolableConnections对象,而Oracle需要OracleConnection对象。(抛出ClassCastException) 这个问题似乎已经在Oracle 11g中得到了解决。然而,我很好奇其他人是如何使用SpringFramework for Oracle10g(使用TOMCAT)实现Oracle连接池

我们正试图在Spring框架的帮助下实现Oracle连接池。我们正在使用DBCP连接池方法。然而,DBCP和spring之间的集成并没有那么好

我们面临的问题是DBCP返回PoolableConnections对象,而Oracle需要OracleConnection对象。(抛出ClassCastException)

这个问题似乎已经在Oracle 11g中得到了解决。然而,我很好奇其他人是如何使用SpringFramework for Oracle10g(使用TOMCAT)实现Oracle连接池的

我们使用Ibatis作为ORM框架


我相信有办法。感谢您的帮助

我使用C3PO建立连接。它还具有为您进行连接池的优势。只需通过spring配置文件定义一个类型为com.mchange.v2.c3p0.ComboPooledDataSource(或类似)的数据源bean。在我遇到连接池问题之前,我甚至使用了spring(DriverManager数据源)中的一个,它不建议在生产环境中使用,因为它实际上并没有进行连接池

下面是一个spring配置示例

<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将数据源bean注入Hibernate,一切正常。您还需要将c3pO jar文件放在类路径上…

我也面临着与您相同的问题。。所以我使用了Oracle本机连接池。。它运转平稳

这里是详细信息的链接

谢谢! Pratik

如果您使用的是自己的池,那么您不应该实现自己的池。Tomcat已经为您这样做了,取而代之的是在Tomcat中定义一个数据源,并让您的ORM框架使用它(当您定义Tomcat数据源时,您可以在那里指定池配置)

如果您可以发布一些代码片段,特别是相关的Spring上下文配置,我可以帮助您了解如何做到这一点

下面是Tomcat文档,它向您展示了如何做到这一点:


顺便说一句,Tomcat也使用DBCP,最好依赖JNDI,因为它使您的代码更具可移植性(从一个环境到另一个环境,例如从开发到登台到生产,甚至跨应用程序服务器,例如到WebSphere、WebLogic等)。

我会使用Oracles提供的解决方案,它包含在ojdbc JAR中。旧的方法是使用类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>

…所有连接属性

使用CommonDBCPNativeJDBCExtractor来获取本机连接,而不是使用SimpleNativeJdbcExtractor。它起作用了

当使用包装连接而不是语句的简单连接池时,SimpleNativeJdbcExtractor通常就足够了。但是,有些池(如雅加达的Commons DBCP)封装了它们返回的所有JDBC对象:因此,需要对它们使用特定的NativeJdbcExtractor(如CommonDBCPNativeJDBCExtractor)


点击这里[http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/jdbc/support/nativejdbc/NativeJdbcExtractor.html]

请提供一些链接以了解更多详细信息。一个简单的配置示例就是一个很好的指针。我知道您正在使用Oracle xpress edition?您是否尝试过不使用express edition的瘦客户端?有什么提示吗?当Oracle提供连接池功能时,为什么要使用c3p0?其中有一个输入错误;现在应该读到,destroy方法close已被弃用,建议使用Oracle UCP:有趣的是,它通过工厂在内部使用OracleDataSource,这里根本没有提到close。。。我不知道如果这里省略了销毁方法会发生什么。那个链接的信息量太大了,我哭了。请考虑删除这个答案…域名已经到期。你的要求一点也不清楚。请试着重新写这个问题。*我想你的意思是这个答案