目前星标 12K,被使用次数更是达到了 43.1K。再来看看它的自我介绍。
牛逼的不能行啊,原来 Hikari 来源于日语,“光”的意思,这意味着快得像光速一样吗?讲真,看简介的感觉就好像在和我的女神“汤唯”握手一样刺激和震撼。
既然 Spring Boot 2 已经默认使用了 HikariCP,那么使用起来也相当的轻松惬意,只需要简单几个步骤。
01、初始化 MySQL 数据库
既然要连接 MySQL,那么就需要先在电脑上安装 MySQL 服务(本文暂且跳过),并且创建数据库和表。
CREATE DATABASE springbootdemo
;
DROP TABLE IF EXISTS mysql_datasource
;
CREATE TABLE mysql_datasource
(
id
varchar(64) NOT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
02、使用 Spring Initlallzr 创建 Spring Boot 项目
创建一个 Spring Boot 项目非常简单,通过 Spring Initlallzr(https://start.spring.io/)就可以了。
勾选 Web、JDBC、MySQL Driver 等三个依赖。
1)Web 表明该项目是一个 Web 项目,便于我们直接通过 URL 来实操。
3)MySQL Driver:连接 MySQL 服务器的驱动器。
5)JDBC:Spring Boot 2 默认使用了 HikariCP,所以 HikariCP 会默认在 spring-boot-starter-jdbc 中附加依赖,因此不需要主动添加 HikariCP 的依赖。
PS:怎么证明这一点呢?项目导入成功后,在 pom.xml 文件中,按住鼠标左键 + Ctrl 键访问 spring-boot-starter-jdbc 依赖节点,可在 spring-boot-starter-jdbc.pom 文件中查看到 HikariCP 的依赖信息。
选项选择完后,就可以点击【Generate】按钮生成一个初始化的 Spring Boot 项目了。生成的是一个压缩包,导入到 IDE 的时候需要先解压。
03、编辑 application.properties 文件
项目导入成功后,等待 Maven 下载依赖,完成后编辑 application.properties 文件,配置 MySQL 数据源信息。
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springbootdemo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
是不是有一种似曾相识的感觉(和上一篇中的数据源配置一模一样)?为什么呢?答案已经告诉过大家了——默认、默认、默认,重要的事情说三遍,Spring Boot 2 默认使用了 HikariCP 连接池。
04、编辑 Spring Boot 项目
为了便于我们查看 HikariCP 的连接信息,我们对 SpringBootMysqlApplication 类进行编辑,增加以下内容。
@SpringBootApplication
public class HikariCpDemoApplication implements CommandLineRunner {
@Autowired
private DataSource dataSource;
public static void main(String[] args) {
SpringApplication.run(HikariCpDemoApplication.class, args);
}
@Override
public void run(String… args) throws Exception {
Connection conn = dataSource.getConnection();
conn.close();
}
}
HikariCpDemoApplication 实现了 CommandLineRunner 接口,该接口允许我们在项目启动的时候加载一些数据或者做一些事情,比如说我们尝试通过 DataSource 对象与数据源建立连接,这样就可以在日志信息中看到 HikariCP 的连接信息。CommandLineRunner 接口有一个方法需要实现,就是我们看到的 run()
方法。
通过 debug 的方式,我们可以看到,在项目运行的过程中,dataSource 这个 Bean 的类型为 HikariDataSource。
05、运行 Spring Boot 项目
接下来,我们直接运行 HikariCpDemoApplication
类,这样一个 Spring Boot 项目就启动成功了。
HikariDataSource 对象的连接信息会被打印出来。也就是说,HikariCP 连接池的配置启用了。快给自己点个赞。
06、为什么 Spring Boot 2.0 选择 HikariCP 作为默认数据库连接池
有几种基准测试结果可用来比较HikariCP和其他连接池框架(例如*c3p0,dbcp2,tomcat*和vibur)的性能。例如,HikariCP团队发布了以下基准(可在此处获得原始结果):
HikariCP 团队为了证明自己性能最佳,特意找了几个背景对比了下。不幸充当背景的有 c3p0、dbcp2、tomcat 等传统的连接池。
从上图中,我们能感受出背景的尴尬,HikariCP 鹤立鸡群了。HikariCP 制作以如此优秀,原因大致有下面这些:
1)字节码级别上的优化:要求编译后的字节码最少,这样 CPU 缓存就可以加载更多的程序代码。
HikariCP 优化前的代码片段:
public final PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException
{
return PROXY_FACTORY.getProxyPreparedStatement(this, delegate.prepareStatement(sql, columnNames));
}
HikariCP 优化后的代码片段:
public final PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException
{
_FACTORY.getProxyPreparedStatement(this, delegate.prepareStatement(sql, columnNames));
}
HikariCP 优化后的代码片段:
public final PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException
{