一、测试
写一个测试类
import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.sql.DataSource; import java.sql.SQLException; /** * @author zhouwenhao * @date 2021/12/1 * @dec 描述 */ @RunWith(SpringRunner.class) @SpringBootTest(classes = MySpringBootApplication.class) public class DataSourceTest { @Autowired private DataSource dataSource; @Test public void testGetConnection() throws SQLException { System.out.println(dataSource.getConnection()); } }
执行后打印结果为:
HikariProxyConnection@575506130 wrapping com.mysql.cj.jdbc.ConnectionImpl@a3cba3a
说明,我们通过dataSource这个对象,获取到了与数据库的连接。这个连接是HikariProxyConnection@575506130。通过它 就可以去访问mysql数据库了。
二、SpringBoot默认使用Hikari
在SpringBoot项目中,如果我们通过mybatis-spring-boot-starter启动器使用mybatis连接数据库,可以看到spring-boot-starter-jdbc是编译依赖项。
SpringBoot项目如果我们通过启动器starter使用JPA或者Mybatis,是默认会使用Hikari数据库连接池的,官方的介绍如下:
Connection to a Production Database Production database connections can also be auto-configured by using a pooling DataSource. Spring Boot uses the following
algorithm for choosing a specific implementation: We prefer HikariCP for its performance and concurrency. If HikariCP is available, we always choose it. Otherwise, if the Tomcat pooling DataSource is available, we use it. Otherwise, if Commons DBCP2 is available, we use it. If none of HikariCP, Tomcat, and DBCP2 are available and if Oracle UCP is available, we use it. If you use the spring-boot-starter-jdbc or spring-boot-starter-data-jpa “starters”, you automatically get a dependency to HikariCP.
spring-boot-starter-jdbc依赖会自动使用HikariCP
|
Starter for using JDBC with the HikariCP connection pool |
如果我们通过spring-boot-starter-data-jpa启动器starter使用JPA连接数据库,可以看到spring-boot-starter-jdbc也是编译依赖项。所以SpringBoot项目我们通过spring-boot-starter-data-jpa使用JPA或者mybatis-spring-boot-starter使用Mybatis都是会默认自动使用Hikari数据库连接池。
三、Hikari常用配置
在SpringBoot项目中我们可以不配置Hikari的配置项,项目会使用默认的值启用HikariCP数据库连接池,我们也可以通过application.yml/application.properties文件设置HikariCP的配置项,常用的配置项如下:
# Hikari pool https://github.com/brettwooldridge/HikariCP spring.datasource.type=com.zaxxer.hikari.HikariDataSource # 连接池中允许的最小连接数。缺省值:10 spring.datasource.hikari.minimum-idle=10 # 连接池中允许的最大连接数。缺省值:10 spring.datasource.hikari.maximum-pool-size=100 # 自动提交 spring.datasource.hikari.auto-commit=true # 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 spring.datasource.hikari.idle-timeout=30000 # 连接池名字 spring.datasource.hikari.pool-name=FlyduckHikariCP # 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒 spring.datasource.hikari.max-lifetime=1800000 # 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒 spring.datasource.hikari.connection-timeout=30000 # 数据库连接测试语句 spring.datasource.hikari.connection-test-query=SELECT 1
SpringBoot项目如果我们通过启动器starter的方式使用JPA或者Mybatis作为数据库持久层框架访问数据库,都会默认自动启用HikariCP数据库连接池。实际项目上线时,可以根据项目的实际情况以及服务器情况设置合适的HikariCP配置项,让HikariCP数据库连接池提高对数据库操作的性能。