大家都知道在数据库连接时可以使用数据库连接池技术,通过spring可以很好的注入现有的数据库连接池。例如dbcp。配置如下
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${jdbc.driverClassName}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>
  <!-- 连接池启动时的初始值 -->
  <property name="initialSize" value="10" />
  <!-- 连接池的最大值 -->
  <property name="maxActive" value="100" />
  <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
  <property name="maxIdle" value="50" />
  <!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
  <property name="minIdle" value="10" />
  <!--#给出一条简单的sql语句进行验证-->
  <property name="validationQuery" value="select getdate()" />
  <!--#在取出连接时进行有效验证-->
  <property name="testOnBorrow" value="true" />
  <property name="removeAbandonedTimeout" value="120" />
  <property name="removeAbandoned" value="true" />
  <!-- #运行判断连接超时任务的时间间隔,单位为毫秒,默认为-1,即不执行任务。 -->
  <property name="timeBetweenEvictionRunsMillis" value="3600000" />
  <!-- #连接的超时时间,默认为半小时。 -->
  <property name="minEvictableIdleTimeMillis" value="3600000" />  
 </bean>在java代码中使用可以如下
  class JdbcUtil
{
@Autowired
private DataSource dataSource;
 
 
public  Connection getConnection()
{
return dataSource.getConnection();
}

现在有个疑问,spring注入默认是单例模式,即注入的datasource在服务端只会存在一个,所有webapp共享这个数据库连接池。那么如何去做到让每个webapp独立去维护自己的datasource呢?这样来保证每个webapp都有机会获取数据库连接
    通过修改spring配置可以吗?或者代码自己控制?求解
srping数据库连接池dbcp

解决方案 »

  1.   

    首先你自己也说了,datasource只有一个,其他的都只能引用。所有用户的请求使用的datasource都是一个,所以考虑的datasource只有一个datasource在配置文件里面也说的很清楚了,最大连接数,空闲数目等,所以要管理好datasource只需要在xml里面配置好就可以了
      

  2.   

    Spring框架使用了工厂模式和单例模式等,所有的webapp共享一个dataSource。
    本身dataSource提供了管理连接客户端的相关办法,如最大连接数......
    因此,你只需要配置dataSource就可以了。
    如果你想深究的话,怕是要深入研究Spring源代码了。
      

  3.   

    你说的很对,我就是在考虑可不可以给每个app分配个datasource,这样来保证每个用户的关键请求。