2009-07-13 2 views
2

우리는 스프링 프레임 워크의 도움으로 Oracle 커넥션 풀링을 구현하려고합니다. 우리는 DBCP 연결 풀링 방법을 사용하고 있습니다. 그러나 DBCP와 스프링의 통합은 그다지 잘 안됩니다.Oracle - connection 스프링 프레임 워크로 풀링하기

Oracle에서 OracleConnection Objects를 예상하는 동안 DBCP가 PoolableConnections Object를 반환한다는 문제가 있습니다. (ClassCastException이 발생 함)

이 문제는 Oracle 11g에서 처리 된 것으로 보입니다. 그러나 다른 사람들이 Oracle 10g (TOMCAT 사용) 용 스프링 프레임 워크를 사용하여 Oracle 연결 풀링을 구현 한 방법에 대해 궁금합니다.

우리는 ORM 프레임 워크로 Ibatis를 사용합니다.

나는 방법이있을 것이라고 확신합니다. 어떤 도움을 주셔서 감사합니다.

답변

15

ojdbc jar에 포함 된 Oracles 제공 솔루션을 사용합니다.더 오래된 방법은 클래스 으로 OracleConnectionPoolDataSource 이었지만 이제는 일반 OracleDataSource에 매개 변수를 설정하고 연결 풀링을 얻을 수 있습니다. 여기

는 봄을 수행하는 방법이다 :

대신 SimpleNativeJdbcExtractor 네이티브 연결을 얻을 수 CommonsDbcpNativeJdbcExtractor를 사용하여 사용의
<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> 
+0

거기에 오타가 있습니다. Bob

+0

현재 destroy-method close가 더 이상 사용되지 않습니다. virgo47

4

나는 C3PO를 사용하여 연결을 설정합니다. 또한 연결 풀링을 수행하는 이점이 있습니다. 예를 들어 데이터 소스 bean을 정의하십시오. com.mchange.v2.c3p0.ComboPooledDataSource (또는 이와 유사한) 스프링 구성 파일을 통해. 연결 풀링에 문제가 생기기 전에 실제로는 연결 풀링을 수행하지 않기 때문에 프로덕션 용도로 권장되지 않는 스프링 (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"/> 

봄은 최대 절전 모드로 데이터 소스 빈을 주입하고 모두가 잘. 당신은 또한 ... 클래스 패스에 C3PO jar 파일이 있어야합니다

+0

당신은 몇 가지 링크를 제공하시기 바랍니다 수 있습니다 이에 대한 자세한 내용은 구성을위한 간단한 예제는 훌륭한 포인터가 될 것입니다. – Priyank

+0

최대 절전 모드에서도 c3p0 –

+0

네, 그렇지만 구성해야합니다 ... – raoulsson

-1

당신이 나는이 또한 원활하게 작동합니다 .. 그래서 오라클 기본 연결 풀을 사용 .. 같은 문제에 직면했다 ..

자세한 내용은 여기 링크가 있습니다 http://www.lambdaprobe.org/d/oracle.shtml

고마워요! Pratik

+1

그 링크가 너무 유익해서 울었다. 이 대답을 삭제 해보십시오. – branchgabriel

+3

... 도메인이 만료되었습니다. –

3

자신이 사용하고있는 경우 자신의 풀을 구현해야합니다. Tomcat은 이미 여러분 대신 Tomcat에서 데이터 소스를 정의하고 ORM 프레임 워크에서이를 사용하도록합니다 (Tomcat 데이터 소스를 정의 할 때 거기에서 풀 구성을 지정할 수 있습니다).

일부 코드 스 니펫, 특히 관련 Spring 컨텍스트 구성을 게시 할 수 있다면이 방법을 제공하는 데 도움을 줄 수 있습니다. 여기

보여줍니다 톰캣의 문서를 사용하면 당신은 그렇게 정확히 :

는, Tomcat이 또한 DBCP를 사용하며 더 많은 코드를 만드는대로, JNDI에 의존하는 것이 좋습니다 (한 환경에서 다른 환경으로 - 예를 들어, dev에서 프로덕션으로, 심지어는 애플리케이션 서버 전반에 걸쳐, 예를 들어 WebSphere, WebLogic 등).

0

. 그것은 작동합니다.

연결은 있지만 명령문은 포함하지 않는 간단한 연결 풀을 사용하여 작업하는 경우 SimpleNativeJdbcExtractor로 충분할 수 있습니다. 그러나 자카르타의 Commons DBCP와 같은 일부 풀은 반환하는 모든 JDBC 객체를 래핑합니다. 따라서 특정 NativeJdbcExtractor (CommonsDbcpNativeJdbcExtractor와 같은)를 사용해야합니다. 여기

클릭 [http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/jdbc/support/nativejdbc/NativeJdbcExtractor.html은]

+0

당신이 무엇을 요구하고 있는지 분명하지 않습니다. 이 질문을 다시 작성하십시오. –

+0

*이 대답을 의미한다고 생각합니다. –

관련 문제