数据源连接池的。
在讲到连接池之前我们先看一下数据源直接连接数据库的配置,以下就是最简单的jdbc直接连接数据库的配置,它不会对我们获取连接、释放连接等进行优化,就和我们直接利用纯jdbc操作数据库一样,每一次的连接数据库、释放数据库连接都会消耗系统资源,如果用户量很大的话,这显然会消耗相当大的资源,所以一般上线运行的系统都是会已连接池的方式来优化处理数据源的。
1、jdbc直接连接数据库的配置
<!-- 配置数据源dataSource jdbc方式连接数据源 -->
<bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<propertyname="driverClassName"value="com.mysql.jdbc.Driver"/>
<property name="url"value="jdbc:mysql://localhost:3306/mydatabase" />
<propertyname="username" value="root"/>
<propertyname="password" value="root"/>
</bean>
2、数据源连接池配置
一般而言,常用的数据库连接池有DBCP,C3P0, proxool,另外还有一个出道迟一些但是性能比前面这3个又一许多的连接池BoneCp。
DBCP是apache组织的一个开源的连接池项目,不过现在好像已经停止维护了,据说问题比较多,连接死锁问题比较严重。
C3P0是hibernate官方指定的数据库连接池工具,性能稳定,不过占用资源相对较多。
Proxool据说性能比从C3P0好一些,消耗资源也少。
BoneCp连接池网上有测试数据显示其运行效率可以达到C3P0、Proxool的25倍,并且稳定性也不错,所以被许多开发者推崇!但是要求jdk1.5+。
2.1、dbcp
<!-- 配置数据源dataSource dbcp连接池方式连接数据源 -->
<bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource">
<propertyname="url"
value="jdbc:mysql://localhost:3306/mydatabase"/>
<propertyname="driverClassName"value="com.mysql.jdbc.Dirver" />
<propertyname="username" value="root" />
<propertyname="password" value="root" />
<!--配置初始化大小、最小、最大-->
<property name="initialSize"value="1"/>
<propertyname="minIdle" value="1"/>
<propertyname="maxActive" value="30"/>
</bean>
2.2、druid
druid作为一名后起之秀,凭借其出色的性能,也逐渐印入了大家的眼帘。
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!-- 基本属性 url、user、password -->
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- 连接初始值,连接池启动时创建的连接数量的初始值 -->
<property name="initialSize" value="${ds.initialSize}"/>
<!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
<property name="minIdle" value="${ds.minIdle}"/>
<!--最大连接数据库连接数,设置为0时,表示没有限制-->
<property name="maxActive" value="${ds.maxActive}"/>
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="${ds.maxWait}"/>
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${ds.timeBetweenEvictionRunsMillis}"/>
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${ds.minEvictableIdleTimeMillis}"/>
<!-- 用来检测连接是否有效的sql,要求是一个查询语句,如果validationQuery为
null,testOnBorrow、testOnReturn、testWhileIdle都不起其作用。 -->
<property name="validationQuery" value="SELECT 'x'"/>
<!-- 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于
timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 -->
<property name="testWhileIdle" value="true"/>
<!-- 申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能 -->
<property name="testOnBorrow" value="false"/>
<!-- 归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能 -->
<property name="testOnReturn" value="false"/>
<!-- 是否对已备语句进行池管理(布尔值),是否对PreparedStatement进行缓存 -->
<property name="poolPreparedStatements" value="false"/>
<property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
<!-- 配置监控统计拦截的filters -->
<property name="filters" value="stat"/>
</bean>