Java Oracle-使用spring框架的连接池
我们正试图在Spring框架的帮助下实现Oracle连接池。我们正在使用DBCP连接池方法。然而,DBCP和spring之间的集成并没有那么好 我们面临的问题是DBCP返回PoolableConnections对象,而Oracle需要OracleConnection对象。(抛出ClassCastException) 这个问题似乎已经在Oracle 11g中得到了解决。然而,我很好奇其他人是如何使用SpringFramework for Oracle10g(使用TOMCAT)实现Oracle连接池的 我们使用Ibatis作为ORM框架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连接池
我相信有办法。感谢您的帮助 我使用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。。。我不知道如果这里省略了销毁方法会发生什么。那个链接的信息量太大了,我哭了。请考虑删除这个答案…域名已经到期。你的要求一点也不清楚。请试着重新写这个问题。*我想你的意思是这个答案