1. Spring Boot 整合连接池
1.1 概述
实际开发中应用程序与数据库交互时,“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采用连接池技术来重用连接 Connection 对象(空间换时间),如图-1 所示:
图-1
Java 为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。然后我们的应用程序中耦合与这个接口,便可以方便的切换不同厂商的连接池,常见的连接池有 DBCP、C3P0、DRUID、HikariCP 等。 通过连接池获取连接的一个基本过程,如图-2 所示:
图-2
在图-2 中,用户通过 DataSource 对象的 getConnection()方法,获取一个连接。 假如池中有连接,则直接将连接返回给用户。假如池中没有连接,则会调用 Dirver(驱动,由数据库厂商进行实现)对象的 connect 方法从数据库获取,拿到连接以后,可以将连接在池中放一份,然后将连接返回给调用方。
1.2 数据初始化
打开 mysql 控制台,然后按如下步骤执行 goods.sql 文件:
- 第一步:登录 mysql
mysql –uroot –proot
- 第二步:设置控制台编码方式
set names utf8;
- 第三步:执行 goods.sql 文件
source d:/goods.sql
备注:当 mysql 连接数据库失败时,检测服务是否启动,可尝试先启动服务(windows 中需要以管理员打开控制台,然后在控制台执行 net start mysql 启动服务即可)
1.3 整合 HikariCP 连接池
HiKariCP 号称是目前世界上最快的连接池,有江湖一哥的称号,目前在 Spring Boot 工程默认推荐使用 HiKariCP 连接池,现在我们创建一个新的项目,项目名 CGB-SBOOT-02, 在此工程中整合 HiKariCP,其步骤如下:
- 第一步:添加依赖。
编辑项目中 pom.xml,右键项目的 pom.xml 文件,选择 Spring,如图-3 所示:
图-3
查找 MySQL 驱动依赖,JDBC API 依赖,如图-4 所示:
图-4
依赖添加以后,在 pom.xml 文件中会自动添加如下两个依赖配置,分别添加测试,查看 jar 包下载情况:
- MySQL 数据库驱动依赖。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
- Spring 对象 JDBC 支持(此时会默认帮我们下载 HiKariCP 连接池)。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
- 第二步:配置连接池
打开 application.properties 配置文件,添加如下内容。
spring.datasource.url=jdbc:mysql:///dbgoods?serverTimezone=GMT%2B8&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
- 第三步:单元测试(测试包中编写)
@SpringBootTest
public class DataSourceTests {
@Autowired
private DataSource dataSource;
@Test
public void testConnection() throws Exception{
Connection conn = dataSource.getConnection();
System.out.println(conn);
}
}
- 第四步:原理分析,如图-5 所示:
图-5
在图-5 中,演示了我们在测试类 DataSourceTests 中基于 DataSource 获取连接的一个基本过程。
(了解)对于图-5 中的连接建立过程,可以在 Driver 接口的实现中的 connect 方法上添加断点,然后进行断点测试,如图-6显示了 API 方法的调用执行过程(按箭头方向看代码),这个了解了解即可。
图-6
当我们需要了解,基于 HikariCP 连接池获取数据库连接,并将获取到的连接放入到连接池中的过程进行了解,可以参考图-7中的断点设计进行查看即可(不做具体要求)。
图-7
在基于图-7 中设置的断点序号位置进行单元测试时,可以每次按 F8 进行断点跟踪,了解 HiKariCP 连接池获取连接存储连接的过程,其中 API 不理解的可以在搜索引擎中进行查阅分析。