Oracle - Пул соединения с пружинным фреймворком - PullRequest
3 голосов
/ 13 июля 2009

Мы пытаемся реализовать пул соединений Oracle с помощью Spring Framework. Мы используем метод пула соединений DBCP. Однако интеграция между DBCP и пружиной идет не так хорошо.

Проблема, с которой мы сталкиваемся, заключается в том, что DBCP возвращает объект PoolableConnections, тогда как Oracle ожидает объекты OracleConnection. (Выбрасывает ClassCastException)

Похоже, что эта проблема была решена в Oracle 11g. Однако мне любопытно, как другие реализовали пул соединений Oracle с использованием Spring Framework для Oracle 10g (Используя TOMCAT).

Мы используем Ibatis в качестве платформы ORM.

Я уверен, что есть способ. любая помощь приветствуется.

Ответы [ 5 ]

15 голосов
/ 15 июля 2009

Я бы использовал решение, предоставленное компанией Oracles, которое входит в их файлы ojdbc. Более старый способ был с классом 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>
4 голосов
/ 13 июля 2009

Я использую C3PO для установления соединения. Он также имеет преимущество, чтобы сделать пул соединений для вас. Просто определите источник данных бин типа, например com.mchange.v2.c3p0.ComboPooledDataSource (или аналогичный) через ваши весенние конфигурационные файлы. Прежде чем я столкнулся с проблемами с пулами соединений, я даже использовал один из 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 вводит bean-компонент dataSource в Hibernate, и все хорошо. Вам также понадобится файл jar c3pO на вашем пути к классам ...

3 голосов
/ 13 июля 2009

Вы должны не реализовывать свой собственный пул, если это то, что вы используете. Tomcat уже делает это за вас, вместо этого определите источник данных в Tomcat и используйте его в своей структуре ORM (когда вы определяете свой источник данных Tomcat, вы можете указать там конфигурации пула).

Если бы вы могли опубликовать некоторые фрагменты кода, в частности, соответствующие конфигурации контекста Spring, я могу помочь вам объяснить, как вы это сделаете.

Вот документация Tomcat, которая показывает вам, как именно вы это делаете:

Кстати, Tomcat также использует DBCP, и лучше полагаться на JNDI, так как он делает ваш код более переносимым (из одной среды в другую - например, из dev для подготовки к работе или даже между серверами приложений - например, в WebSphere , WebLogic и т. Д.).

0 голосов
/ 21 августа 2013

Вместо использования SimpleNativeJdbcExtractor используйте CommonsDbcpNativeJdbcExtractor для получения собственного соединения. это работает.

При работе с простым пулом соединений, который оборачивает Соединения, но не Утверждения, часто достаточно SimpleNativeJdbcExtractor. Тем не менее, некоторые пулы (например, Jakarta's Commons DBCP) оборачивают все возвращаемые ими объекты JDBC: Поэтому вам необходимо использовать определенный NativeJdbcExtractor (например, CommonsDbcpNativeJdbcExtractor).

Нажмите здесь [http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/jdbc/support/nativejdbc/NativeJdbcExtractor.html]

0 голосов
/ 13 июля 2009

Я также столкнулся с той же проблемой, что и вы ... поэтому я использовал пул соединений Oracle Native ... он работает плавно ..

вот ссылка на детали http://www.lambdaprobe.org/d/oracle.shtml

Спасибо! Pratik

...