2011-02-10 33 views
2

有甲骨文11g2和应用基于Java的春天数据源的

极品Oracle JDBC驱动程序启用/禁用CacheConnection在运行时功能的 - 也就是说,如果CacheConnection是使新如果在数据源自由连接的连接没有建立起来,如果CacheConnection是始终禁用新的连接建立,正在关闭放在空闲

后存在早期我们使用Apache的数据源:需要数据源的用于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从运行时

甲骨文因为11g2 recomended使用通用连接池(UCP) depreceted:

<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 ...


什么数据源能够满足我的要求,你知道吗?


UPDATE:
我测试下一trik与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" /> - 你觉得这个怎么样?

+0

[更新]我使用`org.apache.commons.dbcp.BasicDataSource`测试下一个trik:BasicDataSource.setMaxIdle(0) - 禁用和BasicDataSource.setMaxIdle(bds.getMaxActive()) - 启用。你怎么看待这件事? – Testus 2011-02-10 19:06:29

回答

0

您是否可以创建启用了缓存且禁用了缓存的数据源?如果是这样,你可以在ApplicationContext中创建两个不同名称和配置的DataSource bean。您可以在应用程序中自动装载,并动态地在它们之间切换。或者,如果您需要与已经连线的DataSource的Bean,则可以创建两个ApplicationContext并在它们之间切换。请注意,后一种解决方案可防止结果缓存;我不确定第一个解决方案对缓存的影响。

+0

此解决方案非常有用,因为具有启用缓存的DataSource将仅从一段时间释放活动会话,并且这可能是数据库业务逻辑中的问题 - 必须关闭所有活动连接 – Testus 2011-05-11 13:43:26

相关问题