Есть Oracle 11g2 и приложений Java на основе весны
нуждающегося DataSource для драйвера Oracle JDBC с включения/выключения CacheConnection функциональной во время исполнения - то есть, если CacheConnection это включить новый соединение не установлено, если есть свободное соединение в DataSource, если CacheConnection отключается всегда новое соединение установлено и существование закрытия после того, как положить в режиме ожидания
в начале мы использовали апачский DataSource:Необходимость DataSource для драйвера Oracle JDBC с включить/отключить CacheConnection
<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>
- иметь этот функционал, но это работает только, если в явной форме установить эти параметры в context.xml и методе setConnectionCachingEnabled
depreceted от выполнения
Oracle, поскольку 11g2 порекомендовано использование Универсальных пул соединений (ОГП):
<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" />
- что вы об этом думаете?
[UPDATE] Я тестирую следующий трик с 'org.apache.commons.dbcp.BasicDataSource': BasicDataSource.setMaxIdle (0) - для disable и BasicDataSource.setMaxIdle (bds.getMaxActive()) - для включения. Что Вы думаете об этом? – Testus