1.Spring Boot整合连接池
1.1 SpringBoot概述
理论开发中应用程序与数据库交互时,“取得连贯”或“开释资源”是十分耗费系统资源的两个过程,为了解决此类性能问题,通常状况咱们采纳连接池技术来重用连贯Connection对象,如图-1所示:
Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商须要让本人的连接池实现这个接口。而后咱们的应用程序中耦合与这个接口,便能够不便的切换不同厂商的连接池,常见的连接池有DBCP、C3P0,DRUID,HikariCP等。
通过连接池获取连贯的一个根本过程,如图-2所示:
在图-2中,执行原理如下所示
用户通过DataSource对象的getConnection()办法,获取一个连贯。如果池中有连贯,则间接将连贯返回给用户。如果池中没有连贯,则会调用Dirver(驱动,由数据库厂商进行实现)对象的connect办法从数据库获取,拿到连贯当前,能够将连贯在池中放一份,而后将连贯返回给调用方。
1.2 数据初始化
关上mysql控制台,而后按如下步骤执行goods.sql文件:
第一步:登录mysql
mysql –uroot –proot
第二步:设置控制台编码(MySql客户端(client))形式
set names utf8; --告诉服务器客户端所应用的编码为utf8
第三步:执行goods.sql文件
source d:/goods.sql -- 留神source 前面跟的是goods.sql文件的地位,不要间接将sql文件的内容之间拿到命令行或图形化界面工具中间接运行,若sql文件中有中文,就会呈现乱码!在理论开发拿到sql文件也不要立即去执行,否则会造成不可估量的损失!
备注:当mysql连贯数据库失败时,检测服务是否启动,可尝试先启动服务(windows中须要以管理员关上控制台,而后在控制台执行net start mysql启动服务即可,进行mysql服务器执行是 net stop mysql)
1.3 整合HikariCP连接池
HikariCP连接池背景介绍
HiKariCP号称是目前世界上最快的连接池,有江湖一哥的名称,目前在springboot工程默认举荐应用HiKariCP连接池。
当初咱们创立一个新的SpringBoot我的项目,我的项目名为CGB-SBOOT-04,在此工程中整合HiKariCP,其步骤如下:
step1:创立SpringBoot我的项目。
step2,增加依赖(两个--MySQL驱动,Spring-JDBC)
编辑我的项目中pom.xml,右键我的项目的pom.xml文件,抉择spring,如图-3所示:
而后查找mysql 驱动依赖,JDBC API依赖,如图-4所示:
依赖增加当前,在pom.xml文件中会主动增加如下两个依赖配置:
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>
step3,配置连接池(配置连贯数据库的url,username,password)
关上application.properties配置文件,增加如下内容。
##spring datesourcespring.datasource.url=jdbc:mysql:///dbgoods?serverTimezone=GMT%2B8spring.datasource.username=rootspring.datasource.password=root
step4:编写单元测试类DataSourceTests从池中获取连贯(Connection)(测试包中编写,测试类必须放在启动类所在包或其子包中!)
package com.cy.pj.commom.datasource;import java.sql.Connection;import java.sql.SQLException;import javax.sql.DataSource;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;/** * 整合hikariCP连接池 *1)创立SpringBoot我的项目 *2)增加依赖(两个-MySQL驱动,Spring-JDBC) *3)配置(application.properties)连贯数据库url,username,password * 3.1)spring.datasource.url=jdbc:mysql://localhost:3306/dbgoods?serverTimezone=GMT%2B8&characterEnconding=utf8 * 3.2)spring.datasource.username=root * 3.3)spring.datasource.password=root *4)编写测试类DataSourceTests从池中获取连贯(Connection) * @author Administrator * */@SpringBootTest //该注解作用将类交给spring治理public class DatasourceTests { //思考: //1)这里dataSource变量指向的对象是谁? 你怎么晓得的? --指向的是HikariDateSource 通过断点调试或获取dateSouece变量指向的对象的具体类型的全类名 @Autowired private DataSource dataSource; @Test void testConnnction01() throws SQLException { //获取dateSouece变量指向的对象的具体类型的全类名 //System.out.println("类型="+dataSource.getClass().getName()); //思考:这个连贯的获取过程是怎么的? 你怎么晓得的? System.out.println(dataSource.getConnection()); } @Test void testConnnction02() throws SQLException, InterruptedException {// long start =System.currentTimeMillis();// System.out.println(dataSource.getConnection());// long end =System.currentTimeMillis();// System.out.println("first:"+(end-start));// System.out.println(dataSource.getConnection());// long last =System.currentTimeMillis();// System.out.println("second:"+(end-last)); Connection conn1 = dataSource.getConnection(); System.out.println("conn1="+conn1); Connection conn2 = dataSource.getConnection(); System.out.println("conn2="+conn2); conn1.close(); conn2.close(); Thread.sleep(3000); Connection conn3 = dataSource.getConnection(); System.out.println("conn3="+conn3); System.out.println(conn1==conn2);//false }}
step5:原理剖析,如图-5所示
图-5中,演示了咱们在测试类DataSourceTests中基于DataSource获取连贯的一个根本过程。对于图-5中的连贯建设过程,能够在Driver接口的实现中的connect办法上增加断点,而后进行断点测试,如图-6显示了API办法的调用执行过程(按箭头方向开代码),这个理解理解即可
当咱们须要理解,基于HikariCP连接池获取数据库连贯,并将获取到的连贯放入到连接池中的过程进行理解,能够参考图-7中的断点设计进行查看即可(不做具体要求)。
在基于图-7中设置的断点序号地位进行单元测试时,能够每次按F8进行断点跟踪,理解HiKariCP连接池获取连贯存储连贯的过程,其中API不了解的能够在搜索引擎中进行查阅剖析。