大家都知道在数据库连接时可以使用数据库连接池技术,通过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
<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
本身dataSource提供了管理连接客户端的相关办法,如最大连接数......
因此,你只需要配置dataSource就可以了。
如果你想深究的话,怕是要深入研究Spring源代码了。