Springboot2.0默认连接池HikariCP详解(效率最⾼)
性能测试:druid连接池配置详解
测试结论
1:性能⽅⾯ hikariCP>druid>tomcat-jdbc>dbcp>c3p0 。hikariCP的⾼性能得益于最⼤限度的避免锁竞争。
2:druid功能最为全⾯,sql拦截等功能,统计数据较为全⾯,具有良好的扩展性。
3:综合性能,扩展性等⽅⾯,可考虑使⽤druid或者hikariCP连接池。
4:可开启prepareStatement缓存,对性能会有⼤概20%的提升。
Springboot2.0以后默认数据库连接池选择了Hikari(性能⾼)
Hikari只有130kb⼤⼩,速度超快,稳定性,可靠性,druid对数据源进⾏了监控。
hikariCP连接池属性配置选择:
⼀、主要配置
1、dataSourceClassName
这是DataSourceJDBC驱动程序提供的类的名称。请查阅您的特定JDBC驱动程序的⽂档以获取此类名称,或参阅下表。注XA数据源不受⽀持。XA需要像bitronix这样的真正的事务管理器 。请注意,如果您正在使⽤jdbcUrl“旧式”基于DriverManager的JDBC驱动程序配置,则不需要此属性 。 默认值:⽆
2、jdbcUrl
该属性指⽰HikariCP使⽤“基于DriverManager的”配置。我们认为基于DataSource的配置(上图)由于各种原因(参见下⽂)是优越的,但对于许多部署来说,⼏乎没有显着差异。 在“旧”驱动程序中使⽤此属性时,您可能还需要设置该 driverClassName属性,但不要先尝试。 请注意,如果使⽤此属性,您仍然可以使⽤DataSource属性来配置您的驱动程序,实际上建议您使⽤URL本⾝中指定的驱动程序参数。 默认值:⽆
3、username
此属性设置从基础驱动程序获取连接时使⽤的默认⾝份验证⽤户名。请注意,对于DataSources,这通过调⽤
对于基于驱动程序的配置,每个驱动程序都不同。在基于驱动程序的情况下,HikariCP将使⽤此username属性来设置传递给驱动程序调⽤的user属性。如果这不是你所需要的,例如完全跳过这个⽅法并且调⽤。 默认值:⽆Connection(jdbcUrl,
props)addDataSourceProperty("username", ...)
4、password
此属性设置从基础驱动程序获取连接时使⽤的默认⾝份验证密码。请注意,对于DataSources,这通过调⽤
props)addDataSourceProperty("pass", ...)
⼆、常⽤配置
5、autoCommit
此属性控制从池返回的连接的默认⾃动提交⾏为。它是⼀个布尔值。 默认值:true
6、 connectionTimeout
此属性控制客户端(即您)将等待来⾃池的连接的最⼤毫秒数。如果在没有可⽤连接的情况下超过此时间,则会抛出SQLException。最低可接受的连接超时时间为250 ms。 默认值:30000(30秒)
7、 idleTimeout
此属性控制允许连接在池中闲置的最长时间。 此设置仅适⽤于minimumIdle定义为⼩于maximumPoolSize。⼀旦池达到连接,空闲连接将不会退出minimumIdle。连接是否因闲置⽽退出,最⼤变化量为+30秒,平均变化量为+15秒。在超时之前,连接永远不会退出。值为0意味着空闲连接永远不会从池中删除。允许的最⼩值是10000ms(10秒)。 默认值:600000(10分钟)
8、 maxLifetime
此属性控制池中连接的最⼤⽣存期。正在使⽤的连接永远不会退休,只有在关闭后才会被删除。在逐个连接的基础上,应⽤较⼩的负⾯衰减来避免池中的⼤量消失。 我们强烈建议设置此值,并且应该⽐任何数据库或基础设施规定的连接时间限制短⼏秒。 值为0表⽰没有最⼤寿命(⽆限寿命),当然是idleTimeout设定的主题。 默认值:1800000(30分钟)
9、connectionTestQuery
如果您的驱动程序⽀持JDBC4,我们强烈建议您不要设置此属性。这是针对不⽀持JDBC4的“传统”驱动程序Connection.isValid() API。这是在连接从池中获得连接以确认与数据库的连接仍然存在之前将要执⾏的查询。再⼀次,尝试运⾏没有此属性的池,如果您的驱动程序不符合JDBC4的要求,HikariCP将记录⼀个错误以告知您。 默认值:⽆
10、minimumIdle
该属性控制HikariCP尝试在池中维护的最⼩空闲连接数。如果空闲连接低于此值并且连接池中的总连接数少于此值maximumPoolSize,则HikariCP将尽最⼤努⼒快速⾼效地添加其他连接。但是,为了获得最佳性能和响应尖峰需求,我们建议不要设置此值,⽽是允许HikariCP充当固定⼤⼩的连接池。 默认值:与maximumPoolSize相同
11、maximumPoolSize
此属性控制池允许达到的最⼤⼤⼩,包括空闲和正在使⽤的连接。基本上这个值将决定到数据库后端的最⼤实际连接数。对此的合理价值最好由您的执⾏环境决定。当池达到此⼤⼩并且没有空闲连接可⽤时,对getConnection()的调⽤将connectionTimeout在超时前阻塞达⼏毫秒。请阅读关于游泳池尺⼨。 默认值:10
12、metricRegistry
该属性仅通过编程配置或IoC容器可⽤。该属性允许您指定池使⽤的Codahale / Dropwizard 实例MetricRegistry来记录各种指标。有关详细信息,请参阅Metrics维基页⾯。 默认值:⽆
13、healthCheckRegistry
该属性仅通过编程配置或IoC容器可⽤。该属性允许您指定池使⽤的Codahale / Dropwizard 的实例HealthCheckRegistry来报告当前的健康信息。有关 详细信息,请参阅健康检查 wiki页⾯。 默认值:⽆
14、poolName
此属性表⽰连接池的⽤户定义名称,主要出现在⽇志记录和JMX管理控制台中以识别池和池配置。 默认:⾃动⽣成
三、不常⽤配置
15、 initializationFailTimeout
如果池⽆法成功初始化连接,则此属性控制池是否将“快速失败”。任何正数都取为尝试获取初始连接的毫秒数; 应⽤程序线程将在此期间被阻⽌。如果在超时发⽣之前⽆法获取连接,则会引发异常。此超时被应⽤后的connectionTimeout 期。如果值为零(0),HikariCP将尝试获取并验证连接。如果获得连接但未通过验证,将抛出异常并且池未启动。但是,如果⽆法获得连接,则会启动该池,但后续获取连接的操作可能会失败。⼩于零的值将绕过任何初始连接尝试,并且在尝试获取后台连接时,池将⽴即启动。因此,以后努⼒获得连接可能会失败。 默认值:1
16、isolateInternalQueries
此属性确定HikariCP是否在其⾃⼰的事务中隔离内部池查询,例如连接活动测试。由于这些通常是只读查询,因此很少有必要将它们封装在⾃⼰的事务中。该属性仅适⽤于autoCommit禁⽤的情况。 默认值:false
17、allowPoolSuspension
该属性控制池是否可以通过JMX暂停和恢复。这对于某些故障转移⾃动化⽅案很有⽤。当池被暂停时,呼叫 getConnection()将不会超时,并将⼀直保持到池恢复为⽌。 默认值:false
18、readOnly
此属性控制默认情况下从池中获取的连接是否处于只读模式。注意某些数据库不⽀持只读模式的概念,⽽其他数据库则在Connection设置为只读时提供查询优化。⽆论您是否需要此属性,都将主要取决于您的应⽤程序和数据库。 默认值:false
19、registerMbeans
该属性控制是否注册JMX管理Bean(“MBeans”)。 默认值:false
20、catalog
该属性设置默认⽬录为⽀持⽬录的概念数据库。如果未指定此属性,则使⽤由JDBC驱动程序定义的默认⽬录。 默认:驱动程序默认
21、connectionInitSql
该属性设置⼀个SQL语句,在将每个新连接创建后,将其添加到池中之前执⾏该语句。如果这个SQL⽆效或引发异常,它将被视为连接失败并且将遵循标准重试逻辑。 默认值:⽆
22、driverClassName
HikariCP将尝试通过DriverManager仅基于驱动程序来解析驱动程序jdbcUrl,但对于⼀些较旧的驱动程序,driverClassName还必须指定它。除⾮您收到明显的错误消息,指出不到驱动程序,否则请忽略此属性。 默认值:⽆
23、transactionIsolation
此属性控制从池返回的连接的默认事务隔离级别。如果未指定此属性,则使⽤由JDBC驱动程序定义的默认事务隔离级别。如果您有针对所有查询通⽤的特定隔离要求,请仅使⽤此属性。此属性的值是从不断的名称Connection 类,如
TRANSACTION_READ_COMMITTED,TRANSACTION_REPEATABLE_READ等 默认值:驱动程序默认
24、 validationTimeout
此属性控制连接测试活动的最长时间。这个值必须⼩于connectionTimeout。最低可接受的验证超时时间为250 ms。 默认值:5000
25、 leakDetectionThreshold
此属性控制在记录消息之前连接可能离开池的时间量,表明可能存在连接泄漏。值为0意味着泄漏检测被禁⽤。启⽤泄漏检测的最低可接受值为2000(2秒)。 默认值:0
26、 dataSource
此属性仅通过编程配置或IoC容器可⽤。这个属性允许你直接设置DataSource池的实例,⽽不是让HikariCP通过反射来构造它。这在⼀些依赖注⼊框架中可能很有⽤。当指定此属性时,dataSourceClassName属性和所有DataSource特定的属性将被忽略。 默认值:⽆
27、schema
该属性设置的默认模式为⽀持模式的概念数据库。如果未指定此属性,则使⽤由JDBC驱动程序定义的默认模式。 默认:驱动程序默认
28、 threadFactory
此属性仅通过编程配置或IoC容器可⽤。该属性允许您设置urrent.ThreadFactory将⽤于创建池使⽤的所有线程的实例。在⼀些只能通过ThreadFactory应⽤程序容器提供的线程创建线程的有限执⾏环境中需要它。 默认值:⽆
29、 scheduledExecutor
此属性仅通过编程配置或IoC容器可⽤。该属性允许您设置urrent.ScheduledExecutorService将⽤于各种内部计划任务的实例。如果为ScheduledThreadPoolExecutor 实例提供HikariCP,建议setRemoveOnCancelPolicy(true)使⽤它。 默认值:⽆
配置默认数据库连接池(Hikari)
步骤⼀:起步依赖
<!--jdbc起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- mysql数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
步骤⼆:数据库连接信息配置
# jdbc_config datasource
spring.datasource.sql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/datebook?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBe spring.datasource.username=root
spring.datasource.password=root
# Hikari will use the above plus the following to setup connection pooling
pe=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=15
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=DatebookHikariCP
spring.datasource.hikari.max-lifetime=1800000
spring.tion-timeout=30000
spring.tion-test-query=SELECT 1
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论