天天看点

Java中SSM Project使用连接池

一、连接池的概述

1. Jdbc访问数据库

JDBC访问数据库时操作Connection对象: 访问数据库所有的操作都是先创建连接对象,使用连接对象,使用一次以后就关闭连接对象。

Java中SSM Project使用连接池

连接对象的使用问题:

  • 1)数据库创建连接通常需要消耗相对较多的资源,创建时间也较长,而每次操作都要重新获取新的连接对象,执行一次操作就把连接关闭,这样数据库连接对象的使用率低;
  • 2)假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出。

2. 什么是连接池

连接池需要解决两个问题:

  • 提高创建连接的速度,快速的得到一个连接对象
  • 提高连接对象的使用率

连接池的原理图(使用连接池)

Java中SSM Project使用连接池

3. 连接池运行机制

  • 1) 程序初始化时创建连接池
  • 2) 使用时向连接池申请可用连接
  • 3) 使用完毕,将连接返还给连接池供下一个用户请求调用
  • 4) 程序退出时,断开所有连接,并释放资源

4. 常用连接池参数

常用参数 描述
初始连接数(initPoolSize) 一开始连接池创建的时候创建多少个连接对象在连接池中
最大连接数(maxPoolSize) 连接池中最多可以有多少个连接对象
最长等待时间(maxWait) 如果连接池中没有空闲连接对象,当前用户等待一段时间后抛出异常,单位是毫秒
最长空闲回收时间 如果某个连接对象长时间没有被使用,一段时间后被服务器回收,默认是0(表示不回收)

注:有些连接池并不支持最长空闲回收。

二、C3P0连接池的使用

1. 常用连接池的介绍

DataSource本身只是Oracle公司提供的一个接口,没有具体的实现,它的实现由连接池的数据库厂商去实现。常用的连接池实现组件如下:

  • 阿里巴巴druid连接池

    :Druid是阿里巴巴开源平台上的一个项目;
  • C3P0连接池

    :是一个开源的Jdbc连接池,目前使用它的开源项目有Hibernate,Spring等,C3P0有自动回收空闲连接功能;
  • DBCP(DataBase Connection Pool)连接池

    :是Apache上的一个Java连接池项目,也是Tomcat使用的连接池组件。

2. 使用C3P0连接池步骤

  • pom.xml

    中添加C3P0依赖
  • 配置

    jdbc.properties

  • application.xml

    中创建连接池
  • 创建

    SqlSessionFactoryBean

    ,注入连接池

3. pom.xml

<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
</dependency>
           

4. jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf8
jdbc.username=root
jdbc.password=123456

jdbc.initialSize=5
jdbc.maxPoolSize=8
jdbc.minPoolSize=2
jdbc.maxIdleTime=600
jdbc.acquireIncrement=2
           

5. applicationContext.xml

<!-- 创建连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driver}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    
	<!-- 初始化连接数 -->
	<property name="initialPoolSize" value="${jdbc.initialSize}" />
	<!-- 最大连接数 -->
	<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
	<!-- 最小连接数 -->
	<property name="minPoolSize" value="${jdbc.minPoolSize}"></property>	
	<!-- 连接的最大空闲时间-->
	<property name="maxIdleTime" value="${jdbc.maxIdleTime}"></property>
	<!-- 连接池在获得新连接失败时重试次数 -->
    <property name="acquireIncrement" value="${jdbc.acquireIncrement}"></property>
</bean>
    
<!-- 创建SqlSessionFactoryBean,注入连接池 -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"/>
</bean>
           

C3P0连接池的使用及各种连接池参数

三、DRUID连接池

1. Druid简介

  Druid是阿里巴巴开发的号称为监控而生的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。如:一年一度的双十一活动,每年春运的抢火车票。

2. Druid常用的配置参数

参数 说明

driverClassName

驱动类名,根据url自动识别,这一项可配可不配

url

数据库连接字符串 jdbc:mysql://localhost:3306/数据库名

username

数据库的用户名

password

数据库的密码

initialSize

初始化时建立的物理连接的个数

maxActive

连接池中最大连接数

maxWait

获取连接时最长等待时间,单位是毫秒

3. 使用Druid连接池步骤

  • pom.xml

    中添加Druid依赖
  • 配置

    jdbc.properties

  • application.xml

    中创建连接池
  • 创建

    SqlSessionFactoryBean

    ,注入连接池

4. pom.xml

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>
           

5. jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf8
jdbc.username=root
jdbc.password=123456

jdbc.initialSize=5
jdbc.maxActive=50
jdbc.maxWait=3000
jdbc.minIdle=3
#jdbc.maxIdle=6  最大空闲连接数,已不再使用
           

6. applicationContext.xml

<!-- 创建连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <!-- 数据库基本信息配置 -->
    <property name="driverClassName" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>

    <!-- 启用web监控功能 -->
    <!--<property name="filters" value="${filters}"/>-->

    <!-- 初始化连接数量 -->
    <property name="initialSize" value="${jdbc.initialSize}"/>
    <!-- 最大并发连接数 -->
    <property name="maxActive" value="${jdbc.maxActive}"/>
    <!-- 配置获取连接等待超时的时间 -->
    <property name="maxWait" value="${jdbc.maxWait}"/>
    <!-- 最小空闲连接数 -->
    <property name="minIdle" value="${jdbc.minIdle}"/>
    <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    <!--<property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}"/>-->
</bean>

<!-- 创建SqlSessionFactoryBean,注入连接池 -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"/>
</bean>
           

阿里巴巴-德鲁伊druid连接池配置

  • 附:了解c3p0,dbcp与druid 三者比较

继续阅读