跟我学Springboot开发后端管理系统4:数据库连接池Druid和HikariCP

2022-01-06 16:19:17 浏览数 (1)

上一篇文章主要讲解了如何再Matrix-Web中使用Mybatis-Plus,Mybatis-Plus作为Orm框架,连接数据库需要连接数据库的依赖。WEB 系统高并发环境下,频繁的进行数据库连接操作,造成系统技术瓶颈问题(无效的资源开销),通过为数据库连接为建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。

数据库连接池有很多,比如c3p0、Druid、Hikari等。大家常用的连接池应该是阿里开源的Druid,Druid不仅是连接池,而且带有监控。在Matrix-Web中,选择的Druid作为数据库连接池。Hikari作为Spring Boot官方推荐的连接池,在这里也讲解一下。

在Spring Boot中使用Druid

Druid是阿里开发的一个数据库连接池,在国内比较的流行,具有以下的特性:

  • 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
  • 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
  • SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
  • 扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter机制,很方便编写JDBC层的扩展插件。

那么如何在Spring Boot项目中集成Durid呢?引入mysql-connector-java的依赖,版本为5.1.38,引入druid-spring-boot-starter,版本为1.1.10。

代码语言:javascript复制
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>${mysql.version}</version>
</dependency>
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid-spring-boot-starter</artifactId>
	<version>${durid.version}</version>
</dependency>

在工程的配置文件做以下的配置:

代码语言:javascript复制
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/druid
spring.datasource.username=root
spring.datasource.password=root

这样就在Spring Boot中整合了Durid连接池。

在Spring Boot中使用HikariCP

HikariCP是一个高性能的JDBC连接池,基于BoneCP做了不少的改进和优化。

从上述结果可以看出HikariCP的性能远高于c3p0、tomcat等连接池,以致后来BoneCP作者都放弃了维护,在Github项目主页推荐大家使用HikariCP。另外,Spring Boot将在2.0版本中把HikariCP作为其默认的JDBC连接池。

在Spring Boot中使用HikariCP连接池,在工程pom文件引入HikariCP依赖,版本为3.3.1。

代码语言:javascript复制
	<dependency>
			<groupId>com.zaxxer</groupId>
			<artifactId>HikariCP</artifactId>
			<version>${HikariCP.version}</version>
		</dependency>

然后在工程的配置文件,加上以下配置:

代码语言:javascript复制
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/druid
spring.datasource.username=root
spring.datasource.password=root

总结

本篇文章主要讲解了在SrpingBoot使用数据库连接池,包括Durid和HikariCP。在Matrix-Web中,这两种数据库连接池都是支持的。下篇文章将讲解数据库的读写分离。

参考资料

https://segmentfault.com/q/1010000007865307/a-1020000007871768

http://zongming.net/read-1373

https://www.jianshu.com/p/dd0c2b0ed202

源码下载

https://github.com/forezp/matrix-web

0 人点赞