Есть Oracle 11g2 и приложение Java на основе пружины
Потребность в DataSource для драйвера JDBC oracle с функцией включения / выключения CacheConnection во время выполнения - то есть, если CacheConnection - включить, новое соединение не устанавливается, если есть свободное соединение в DataSource, если CacheConnection - отключить, всегда устанавливается новое соединение, и существование закрывается после простоя
Ранее мы использовали apache DataSource:
<bean id="datasourceClassic" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:oci:@TEST" />
<property name="username" value="TEST" />
<property name="password" value="TEST" />
<property name="maxActive" value="10" />
<property name="defaultAutoCommit" value="false" />
</bean>
- но этот источник данных не имеет функции для включения / выключения CacheConnection
Мы тестировали OracleDataSource
:
<property name="URL" value="jdbc:oracle:oci:@TEST" />
<property name="user" value="TEST" />
<property name="password" value="TEST" />
<property name="connectionCachingEnabled" value="true" />
<property name="connectionCacheProperties">
<props>
<prop key="MinLimit">0</prop>
<prop key="MaxLimit">1</prop>
<prop key="InitialLimit">0</prop>
<prop key="InactivityTimeout">10</prop>
<prop key="ConnectionWaitTimeout">10</prop>
<prop key="ValidateConnection">true</prop>
</props>
</property>
</bean>
- имеет этот функционал, но он работает только в том случае, если explicity настроил эти параметры в context.xml и метод setConnectionCachingEnabled
исключен из среды выполнения
Oracle с 11g2 рекомендовал использовать Универсальный пул соединений (UCP) :
<bean id="datasource2" class="oracle.ucp.jdbc.PoolDataSourceFactory" factory-method="getPoolDataSource">
<property name="connectionFactoryClassName" value="oracle.jdbc.pool.OracleDataSource"/>
<property name="connectionPoolName" value="TEST"/>
<property name="URL" value="jdbc:oracle:oci:@TEST" />
<property name="user" value="TEST" />
<property name="password" value="TEST" />
<property name="initialPoolSize" value="0" />
<property name="minPoolSize" value="0" />
<property name="maxPoolSize" value="1" />
<property name="validateConnectionOnBorrow" value="true" />
</bean>
- но этот пул также не имел функции для включения / отключения CacheConnection ...
Любая идея о том, что DataSource может удовлетворить мои требования?
UPDATE:
Я проверяю следующий трик с org.apache.commons.dbcp.BasicDataSource
:
/* "Disable" CacheConnection */
BasicDataSource bds = ... //get DataSource
bds.setMaxIdle(0);
и
/* "Enable" CacheConnection */
BasicDataSource bds = ... //get DataSource
bds.setMaxIdle(bds.getMaxActive());
Работает как <property name="connectionCachingEnabled" value="true" />
- что вы думаете об этом?