上一章节学习了如果运用spring集成mybatis,数据源配置使用的spring提供的数据源配置方式,另外还有一些第三方数据源配置方式,而且可以配置数据库连接池。

通过数据库连接池可以增加数据访问的性能,因为访问数据库时建立连接与释放连接是耗时操作,JDBC默认不带连接池技术,但MyBatis是内置连接池功能的,还有一些第三方知名的连接池技术如:DBCP、C3P0、Druid(德鲁伊)。

1、DBCP

DBCP 是 Apache 软件基金组织下的开源连接池实现,要使用DBCP数据源,需要应用程序应在系统中增加如下两个 jar 文件:Commons-dbcp.jar:连接池的实现、Commons-pool.jar:连接池实现的依赖库,常用属性如下:

(1)pom.xml文件添加依赖

    <!-- mysql驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.13</version>
    </dependency>
    <!-- mybatis驱动包 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.1</version>
    </dependency>
    <!--mybatis-spring适配器 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.0</version>
    </dependency>
    <!--Spring java数据库访问包,在本例中主要用于提供数据源 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- 为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理。 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- apache dbcp 方式配置数据源驱动包 -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>
    <!-- apache 数据库连接池包 -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool</artifactId>
        <version>1.6</version>
    </dependency>

(2)db.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mytestdatabase?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
username=qiaozhong
password=1
initialSize=2
maxActive=5
minIdle=2
maxIdle=5
maxWait=10

(3)spring-mybatis.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns= "http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd ">

    <!-- 引入配置文件 -->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:mybatisConfig/db.properties" />
    </bean>

    <!-- 数据源与数据库连接池配置 -->
       <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
        <!-- 初始化连接大小 -->
        <property name="initialSize" value="${initialSize}" />
        <!-- 连接池最大数量 -->
        <property name="maxActive" value="${maxActive}" />
        <!-- 连接池最大空闲 -->
        <property name="maxIdle" value="${maxIdle}" />
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="${minIdle}" />
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="${maxWait}" />
    </bean>

    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!-- 自动扫描mapping.xml文件,**表示迭代查找 -->
        <property name="mapperLocations" value="classpath:mybatis/**.xml" />
    </bean>

    <!-- DAO接口所在包名,Spring会自动查找其下的类 ,包下的类需要使用@MapperScan注解,否则容器注入会失败 -->
    <bean id="mapperScanConfig" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="mybatis.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>

    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
</beans>

上述通过DBCP方式配置了数据源和数据库连接池,如何验证我们的数据库连接池配置生效呢?

可以通过查看数据库连接数来判断,查看命令:D:\ProgramFiles\MySQL\MySQL Server 5.7\bin>mysqladmin  -uqiaozhong -p1 -h127.0.0.1 -P3306 status

先进入到mysql安装目录D:\ProgramFiles\MySQL\MySQL Server 5.7\bin

执行:mysqladmin  -uqiaozhong -p1 -h127.0.0.1 -P3306 status

其中-u为数据库用户名,-p为密码password,-h为数据库ip,-P为端口port

返回值中的Threads为数据库连接数。

验证流程:

1>不启动程序,执行命令查看mysql连接数为1。

2>在测试类中打个断点,对数据库测试函数进行debug,执行命令查看mysql连接数变为3。因为db.properties中配置的数据库连接池初始化连接数和最小空闲连接数均为2。

3>连接池配置成功。

01-11 00:34
查看更多