springBoot入门总结(十)常用的连接池

JAVA中常用的主流开源数据

所有数据库链接池都遵守基本的设计规则,实现 javax.sql.DataSource 接口,里面最重要的方法就是 Connection getConnection() throws SQLException; 用于获取一个Connection, 一个Connection就是一个数据库链接,就是一个TCP链接(建立TCP连接建立时的三次握手和销毁时的四次握手),这降低了链接的使用效率,也是各种数据库链接池存在的原因。

连接池的作用是为了提高性能,将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对Server端进行访问。这样复用了创建连接和销毁连接的过程,从而在性能上得到了提高。

JAVA中常用的主流开源数据库连接池有C3P0、DBCP、Tomcat Jdbc Pool、BoneCP、Druid、HiKariCP等。

C3P0:C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。单线程,性能较差,适用于小型系统。C3P0已经很久没有更新了。

DBCP:由Apache开发的一个Java数据库连接池项目, DBCP连接池是tomcat使用的连接池组件,其一般用在程序初始化的时候,预先创建多个Connection对象放在内存中备用,应用程序需要建立数据库连接时,直接到连接池中申请,使用完毕后再放回连接池。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar。单线程,并发量低,性能不好,适用于小型系统。DBCP更新速度很慢,基本处于不活跃状态。

Tomcat Jdbc Pool:Tomcat在7.0以前都是使用common-dbcp做为连接池组件,但是dbcp是单线程,为保证线程安全会锁整个连接池,性能较差。Tomcat从7.0开始引入了新增连接池模块叫做Tomcat jdbc pool,基于Tomcat JULI,使用Tomcat日志框架,完全兼容dbcp,通过异步方式获取连接,支持高并发应用环境。

BoneCP:是一个高效、免费、开源的Java数据库连接池实现库。BoneCP特色:高度可扩展,快速;连接状态切换的回调机制;允许直接访问连接;自动化重置能力;JMX支持;懒加载能力;支持XML和属性文件配置方式;较好的Java代码组织,100%单元测试分支代码覆盖率。

Alibaba Druid:Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能,是一个可用于大数据实时查询和分析的高容错、高性能的开源分布式系统,尤其是当发生代码部署、机器故障以及其他产品系统遇到宕机等情况时,Druid仍能够保持100%正常运行。主要特色:为分析监控设计;快速的交互式查询;高可用;可扩展;Druid是一个开源项目,源码托管在github上。

HiKariCP: HiKariCP 来源于日语「光」的意思,意味着它很快!高性能的JDBC连接池,spring boot2.0 已经将 HikariCP 做为了默认的数据源链接池。

以上,HiKariCP 以及 Alibaba Druid 是二代连接池中的代表,以下将着重介绍 HiKariCP 及 Alibaba Druid。

HiKariCP

HiKariCP的优点:

1、字节码精简 :优化代码,直到编译后的字节码最少,这样,CPU缓存可以加载更多的程序代码;
2、优化代理和拦截器:减少代码,例如HikariCP的Statement proxy只有100行代码,只有BoneCP的十分之一;
3、自定义数组类型(FastStatementList)代替ArrayList:避免每次get()调用都要进行range check,避免调用remove()时的从头到尾的扫描;
4、自定义集合类型(ConcurrentBag):提高并发读写的效率;


在spring Boot 1.0 当中使用的是Tomcat DataSource,从Spring Boot 2.0开始,Spring Boot 使用HiKariCP作为默认数据库连接池,所以Spring Boot 2.+ 引用parents后不用专门再添加依赖另外导入包和配置。

Spring Boot 2.+ 配置示例:

spring.datasource.url=jdbc:mysql://mysql.local:3306/text?serverTimezone=GMT%2B8&characterEncoding=utf8&useUnicode=true&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=CONVERT_TO_NULL&autoReconnect=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# 可选配置
spring.datasource.type=com.zaxxer.hikari.hIkari.HikariDatasource
spring.datasource.hikari.minimumIdle=10

# Hikari连接池的设置
## Hikari 时间单位都是毫秒
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
## 连接池名字
spring.datasource.hikari.pool-name=MyHikariCP
## 最小空闲连接数量
spring.datasource.hikari.minimum-idle=10
## 空闲连接存活最大时间,默认600000(10分钟)
spring.datasource.hikari.idle-timeout=600000
## 连接池最大连接数,默认是10
spring.datasource.hikari.maximum-pool-size=10
## 此属性控制从池返回的连接的默认自动提交行为,默认值:true
spring.datasource.hikari.auto-commit=true
## 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
spring.datasource.hikari.max-lifetime=1800000
## 数据库连接超时时间,默认30秒,即30000
spring.datasource.hikari.connection-timeout=30000

Spring Boot 1.x 默认使用的是 Tomcat 连接池,如果要使用HiKariCP,需要移除 tomcat-jdbc依赖,配置 spring.datasource.type=com.zaxxer.hikari.hIkari.HikariDatasource

Alibaba Druid

Github:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

Druid连接池是阿里巴巴开源的数据库连接池项目,Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能放SQL注入,内置 Logging 能诊断Hack应用行为。

实用功能:

1、详细的监控。
2、ExceptionSorter ,针对主流数据库返回码都有支持。
3、SQL注入
4、内置加密配置
5、众多扩展,方便进行定制。

spring boot 集成 Druid

1、引入POM依赖


   com.alibaba
   druid-spring-boot-starter
   1.1.10

2、配置application.properties

server.port=8080
 
spring.application.name=springboot-druid-test
#使用阿里的Druid连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#数据库的url、登录名、密码和数据库名
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/databaseName?useSSL=false&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
#连接池的配置信息
#初始化大小,最小,最大
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.maxActive=20
#配置获取连接等待超时的时间
spring.datasource.druid.maxWait=60000
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.druid.minEvictableIdleTimeMillis=300000
spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false
#打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
#配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.druid.filters=stat,wall,log4j
#通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.druid.connectionProperties=druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
#配置DruidStatFilter
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
#配置DruidStatViewServlet
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
#IP白名单(没有配置或者为空,则允许所有访问)
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1,192.168.163.1
#IP黑名单 (存在共同时,deny优先于allow)
spring.datasource.druid.stat-view-servlet.deny=192.168.1.73
#禁用HTML页面上的“Reset All”功能
spring.datasource.druid.stat-view-servlet.reset-enable=false
#登录名
spring.datasource.druid.stat-view-servlet.login-username=admin
#登录密码
spring.datasource.druid.stat-view-servlet.login-password=123456

 

你可能感兴趣的:(SpringBoot入门,java,spring,spring,boot)