spring+mybatis+c3p0数据库连接池或druid连接池使用配置整理

3 篇文章 0 订阅
3 篇文章 0 订阅

在系统性能优化的时候,或者说在进行代码开发的时候,多数人应该都知道一个很基本的原则,那就是保证功能正常良好的情况下,要尽量减少对数据库的操作。
据我所知,原因大概有这样两个:
一个是,一般情况下系统服务器和数据库服务器应该是不在同一硬件上,这时候对数据库的连接、操作就和网络有了很大的关系,连接、操作数据库越多就越影响性能。
二是,数据库的数据持久化在硬件磁盘上,对数据库数据的操作就要进行磁盘的io读写操作,同样是操作越多就越容易影响性能。
而数据库连接池的作用是负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。
因此现在多数项目都会使用到数据库连接池来管理数据库的操作,而不是简单直接的用jdbc。
就我目前所接触的项目来说,用的最多的就是阿里的druid连接池,除此之外就是c3p0,所以抽时间对这两个连接池的常用配置和使用进行一个整理,我觉得也是比较必要的,应该能一定程度上提高日后的工作效率。
至于这两个连接池的具体说明和介绍,网上有非常多的资料,我想也就没有什么必要在这里多说。

主要的配置文件,首先是spring的主配置,这里我命名为spring.xml,因为内容少,所以基本上配置都写在了这里,至于具体的每段配置的解释,都写在了注释中:

<?xml version="1.0" encoding="UTF-8"?>

<!-- 引入属性文件 -->
<context:property-placeholder location="classpath:config.properties" ignore-unresolvable="true" />
<!-- 自动扫描(自动注入) -->
<context:component-scan base-package="poolTest.dao.*"/>
<!-- 开启注解 -->
<context:annotation-config />

<!-- 一、使用数据库连接池注册数据源,引入相关的配置文件 -->
<!-- -->
<import resource="c3p0.xml"/>

 <!-- 
<import resource="c3p0.xml"/>
 -->
<!-- 二、创建mybatis会话工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
   <property name="dataSource" ref="dataSource"></property>
   <property name="mapperLocations" value="classpath*:poolTest/dao/*Mapper.xml"></property>
</bean>

<!-- 三、创建mybatis会话template -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
   <constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
</bean>

<!-- 注册接口类的bean,使得程序中可以用注解方式获取 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
 <property name="basePackage" value="poolTest.dao" />  
从这个文件中看到,我们需要三个文件:config.properties,也就是数据库数据源的必要参数内容,然后分别是代表c3p0连接池和druid连接池的两个文件:
config.properties:
jdbc.url=jdbc:mysql:///ssm?characterEncoding=UTF-8
jdbc.driver=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=root

c3p0.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!-- 一、使用c3p0连接池注册数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
   <!-- 基础配置 -->
   <property name="jdbcUrl" value="${jdbc.url}"></property>
 <property name="driverClass" value="${jdbc.driver}"></property>
 <property name="user" value="${jdbc.user}"></property>
 <property name="password" value="${jdbc.password}"></property>

 <!-- 关键配置 -->
 <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
 <property name="initialPoolSize" value="3"></property>
 <!--连接池中保留的最小连接数。Default: 2 -->
 <property name="minPoolSize" value="2"></property>
 <!--连接池中保留的最大连接数。Default: 15 -->
 <property name="maxPoolSize" value="15"></property>
 <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
 <property name="acquireIncrement" value="3"></property>

 <!-- 性能配置 -->
 <!-- 控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
 <property name="maxStatements" value="8"></property>
 <!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
 <property name="maxStatementsPerConnection" value="5"></property>
 <!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
 <property name="maxIdleTime" value="1800"></property>
</bean>

druid.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!-- 一、使用druid数据库连接池注册数据源 -->
 <!-- 关键配置 -->
 <!-- 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 --> 
 <property name="initialSize" value="3" /> 
 <!-- 最小连接池数量 --> 
 <property name="minIdle" value="2" /> 
 <!-- 最大连接池数量 --> 
 <property name="maxActive" value="15" />
 <!-- 配置获取连接等待超时的时间 --> 
 <property name="maxWait" value="10000" />

 <!-- 性能配置 -->
 <!-- 打开PSCache,并且指定每个连接上PSCache的大小 --> 
 <property name="poolPreparedStatements" value="true" /> 
 <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />

 <!-- 其他配置 -->
 <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> 
 <property name="timeBetweenEvictionRunsMillis" value="60000" />
 <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> 
 <property name="minEvictableIdleTimeMillis" value="300000" />
 <!--   建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,
           执行validationQuery检测连接是否有效。 -->
 <property name="testWhileIdle" value="true" />
 <!-- 这里建议配置为TRUE,防止取到的连接不可用 ,申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。--> 
 <property name="testOnBorrow" value="true" /> 
 <!-- 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 -->
 <property name="testOnReturn" value="false" />
 </bean>
当然了,连接池的配置远不止我所配的这些,不论是c3p0还是druid都还有很多的参数,具体需要配置哪些,可能就需要视具体情况而定了。 其中一些配置说明可以参考下边两篇博客,我在整理的过程中也是参考了不少这两篇博客中的内容。 http://www.cnblogs.com/wuyun-blog/p/5679073.html http://www.cnblogs.com/lannoy/p/5824866.html

csdn下载:http://download.csdn.net/detail/tuzongxun/9761168

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值