上一章节学习了如果运用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>连接池配置成功。