Spring Boot Tomcat & HikariCP & DBCP 连接池配置和使用

栏目: Java · 发布时间: 7年前

内容简介:Spring Boot Tomcat & HikariCP & DBCP 连接池配置和使用

Spring Boot 中的数据源配置是通过外部配置属性 spring.datasource.* 控制 如:

spring.datasource.username=root
spring.datasource.password=root

Tomcat JDBC 连接池

Spring Boot 默认选择 Tomcat JDBC Pool 作为数据库连接池 Tomcat(8) 连接池常用的属性:

属性 描述 默认值
defaultAutoCommit 连接池中创建的连接默认是否自动提交事务 驱动的缺省值
defaultReadOnly 连接池中创建的连接默认是否为只读状态 -
defaultCatalog 连接池中创建的连接默认的 catalog -
driverClassName 驱动类的名称 -
username 数据库账户 -
password 数据库密码 -
maxActive 连接池同一时间可分配的最大活跃连接数 100
maxIdle 始终保留在池中的最大连接数 如果启用 将定期检查限制连接 超出此属性设定的值且空闲时间超过 minEvictableIdleTimeMillis 的连接则释放 maxActive 设定的值相同
minIdle 始终保留在池中的最小连接数 池中的连接数量若低于此值则创建新的连接 如果连接验证失败将缩小至此值 initialSize 设定的值相同
initialSize 连接池启动时创建的初始连接数量 10
maxWait 最大等待时间(毫秒) 如果在没有连接可用的情况下等待超过此时间 则抛出异常 30000(30秒)
testOnBorrow 当从连接池中取出一个连接时是否进行验证 若验证失败则从池中删除该连接并尝试取出另一个连接 false
testOnConnect 当一个连接首次被创建时是否进行验证 若验证失败则抛出 SQLException 异常 false
testOnReturn 当一个连接使用完归还到连接池时是否进行验证 false
testWhileIdle 对池中空闲的连接是否进行验证 验证失败则回收此连接 false
validationQuery 在连接池返回连接给调用者前用来对连接进行验证的查询 SQL null
validationQueryTimeout SQL 查询验证超时时间(秒) 小于或等于 0 的数值表示禁用 -1
timeBetweenEvictionRunsMillis 在空闲连接回收器线程运行期间休眠时间(毫秒) 该值不应该小于 1 秒 它决定线程多久验证空闲连接或丢弃连接的频率 5000(5秒)
minEvictableIdleTimeMillis 连接在池中保持空闲而不被回收的最小时间(毫秒) 60000(60秒)
removeAbandoned 标记是否删除泄露的连接 如果连接超出 removeAbandonedTimeout 的限制 且该属性设置为 true 则连接被认为是被泄露并且可以被删除 false
removeAbandonedTimeout 泄露的连接可以被删除的超时时间(秒) 该值应设置为应用程序查询可能执行的最长时间 60

参考文档: http://tomcat.apache.org/tomcat-8.0-doc/jdbc-pool.html#Common_Attributes

application.properties 配置示例:

spring.datasource.url=jdbc:mysql://127.0.0.1/spring_boot_testing_storage
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.tomcat.default-auto-commit=true
spring.datasource.tomcat.initial-size=3
spring.datasource.tomcat.max-active=120
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.test-on-borrow=true
spring.datasource.tomcat.test-while-idle=true
spring.datasource.tomcat.validation-query=SELECT 1
spring.datasource.tomcat.validation-query-timeout=3
spring.datasource.tomcat.time-between-eviction-runs-millis=10000
spring.datasource.tomcat.min-evictable-idle-time-millis=120000
spring.datasource.tomcat.remove-abandoned=true
spring.datasource.tomcat.remove-abandoned-timeout=120

application.yml 配置示例:

spring:
 datasource:
 url: jdbc:mysql://127.0.0.1/spring_boot_testing_storage
 username: root
 password: root
 driver-class-name: com.mysql.jdbc.Driver
 tomcat:
 default-auto-commit: true
 initial-size: 30
 max-active: 120
 max-wait: 10000
 test-on-borrow: true
 test-while-idle: true
 validation-query: 'SELECT 1'
 validation-query-timeout: 3
 time-between-eviction-runs-millis: 10000
 min-evictable-idle-time-millis: 120000
 remove-abandoned: true
 remove-abandoned-timeout: 120

以 JDBC 为例 依赖声明:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

HikariCP 连接池

Spring Boot 如果发现 Tomcat 连接池不可用 则尝试选择 HikariCP 作为默认连接池 HikariCP 连接池常用的属性:

属性 描述 默认值
dataSourceClassName JDBC 驱动程序提供的 DataSource 类的名称 如果使用了 jdbcUrl 则不需要此属性 -
jdbcUrl 数据库连接地址 -
username 数据库账户 如果使用了 jdbcUrl 则需要此属性 -
password 数据库密码 如果使用了 jdbcUrl 则需要此属性 -
autoCommit 是否自动提交事务 true
connectionTimeout 连接超时时间(毫秒) 如果在没有连接可用的情况下等待超过此时间 则抛出 SQLException 30000(30秒)
idleTimeout 空闲超时时间(毫秒) 只有在 minimumIdle < maximumPoolSize 时生效 超时的连接可能被回收 数值 0 表示空闲连接永不从池中删除 600000(10分钟)
maxLifetime 连接池中的连接的最长生命周期(毫秒) 数值 0 表示不限制 1800000(30分钟)
connectionTestQuery 连接池每分配一条连接前执行的查询语句(如:SELECT 1) 以验证该连接是否是有效的 如果你的驱动程序支持 JDBC4 HikariCP 强烈建议我们不要设置此属性 -
minimumIdle 最小空闲连接数 HikariCP 建议我们不要设置此值 而是充当固定大小的连接池 maximumPoolSize 数值相同
maximumPoolSize 连接池中可同时连接的最大连接数 当池中没有空闲连接可用时 就会阻塞直到超出 connectionTimeout 设定的数值 10
poolName 连接池名称 主要用于显示在日志记录和 JMX 管理控制台中 auto-generated

参考文档: https://github.com/brettwooldridge/HikariCP#configuration-knobs-baby

application.properties 配置示例:

spring.datasource.url=jdbc:mysql://127.0.0.1/spring_boot_testing_storage
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.maximum-pool-size=150

application.yml 配置示例:

spring:
 datasource:
 url: jdbc:mysql://127.0.0.1/spring_boot_testing_storage
 username: root
 password: root
 driver-class-name: com.mysql.jdbc.Driver
 hikari:
 auto-commit: true
 connection-test-query: 'SELECT 1'
 maximum-pool-size: 150

以 JDBC 为例 依赖声明:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-jdbc</artifactId>
 <exclusions>
 <exclusion>
 <groupId>org.apache.tomcat</groupId>
 <artifactId>tomcat-jdbc</artifactId>
 </exclusion>
 </exclusions>
</dependency>
<dependency>
 <groupId>com.zaxxer</groupId>
 <artifactId>HikariCP</artifactId>
 <version>2.6.1</version>
</dependency>

DBCP 连接池

Spring Boot 如果发现 HikariCP 连接池不可用 则尝试选择 DBCP 作为默认连接池 DBCP(2) 连接池常用的属性:

属性 描述 默认值
url 数据库连接地址 -
username 数据库账户 -
password 数据库密码 -
driverClassName 驱动类的名称 -
defaultAutoCommit 连接池中创建的连接默认是否自动提交事务 驱动的缺省值
defaultReadOnly 连接池中创建的连接默认是否为只读状态 驱动的缺省值
defaultCatalog 连接池中创建的连接默认的 catalog -
initialSize 连接池启动时创建的初始连接数量 0
maxTotal 连接池同一时间可分配的最大活跃连接数;负数表示不限制 8
maxIdle 可以在池中保持空闲的最大连接数 超出此值的空闲连接被释放 负数表示不限制 8
minIdle 可以在池中保持空闲的最小连接数 低于此值将创建空闲连接 若设置为 0 则不创建 0
maxWaitMillis 最大等待时间(毫秒) 如果在没有连接可用的情况下等待超过此时间 则抛出异常;-1 表示无限期等待 直到获取到连接为止 -
validationQuery 在连接池返回连接给调用者前用来对连接进行验证的查询 SQL -
validationQueryTimeout SQL 查询验证超时时间(秒) -
testOnCreate 连接在创建之后是否进行验证 false
testOnBorrow 当从连接池中取出一个连接时是否进行验证 若验证失败则从池中删除该连接并尝试取出另一个连接 true
testOnReturn 当一个连接使用完归还到连接池时是否进行验证 false
testWhileIdle 对池中空闲的连接是否进行验证 验证失败则释放此连接 false
timeBetweenEvictionRunsMillis 在空闲连接回收器线程运行期间休眠时间(毫秒) 如果设置为非正数 则不运行此线程 -1
numTestsPerEvictionRun 空闲连接回收器线程运行期间检查连接的个数 3
minEvictableIdleTimeMillis 连接在池中保持空闲而不被回收的最小时间(毫秒) 1800000(30分钟)
removeAbandonedOnBorrow 标记是否删除泄露的连接 如果连接超出 removeAbandonedTimeout 的限制 且该属性设置为 true 则连接被认为是被泄露并且可以被删除 false
removeAbandonedTimeout 泄露的连接可以被删除的超时时间(秒) 该值应设置为应用程序查询可能执行的最长时间 300(5分钟)
poolPreparedStatements 设置该连接池的预处理语句池是否生效 false

参考文档: http://commons.apache.org/proper/commons-dbcp/configuration.html

application.properties 配置示例:

spring.jmx.enabled=false
spring.datasource.url=jdbc:mysql://127.0.0.1/spring_boot_testing_storage
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.dbcp2.default-auto-commit=true
spring.datasource.dbcp2.initial-size=30
spring.datasource.dbcp2.max-total=120
spring.datasource.dbcp2.max-idle=120
spring.datasource.dbcp2.min-idle=30
spring.datasource.dbcp2.max-wait-millis=10000
spring.datasource.dbcp2.validation-query=SELECT 1
spring.datasource.dbcp2.validation-query-timeout=3
spring.datasource.dbcp2.test-on-borrow=true
spring.datasource.dbcp2.test-while-idle=true
spring.datasource.dbcp2.time-between-eviction-runs-millis=10000
spring.datasource.dbcp2.num-tests-per-eviction-run=10
spring.datasource.dbcp2.min-evictable-idle-time-millis=120000
spring.datasource.dbcp2.remove-abandoned-on-borrow=true
spring.datasource.dbcp2.remove-abandoned-timeout=120
spring.datasource.dbcp2.pool-prepared-statements=true

application.yml 配置示例:

spring:
 jmx:
 enabled: false
 datasource:
 url: jdbc:mysql://127.0.0.1/spring_boot_testing_storage
 username: root
 password: root
 driver-class-name: com.mysql.jdbc.Driver
 dbcp2:
 default-auto-commit: true
 initial-size: 30
 max-total: 120
 max-idle: 120
 min-idle: 30
 max-wait-millis: 10000
 validation-query: 'SELECT 1'
 validation-query-timeout: 3
 test-on-borrow: true
 test-while-idle: true
 time-between-eviction-runs-millis: 10000
 num-tests-per-eviction-run: 10
 min-evictable-idle-time-millis: 120000
 remove-abandoned-on-borrow: true
 remove-abandoned-timeout: 120
 pool-prepared-statements: true

以 JDBC 为例 依赖声明:

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-jdbc</artifactId>
 <exclusions>
 <exclusion>
 <groupId>org.apache.tomcat</groupId>
 <artifactId>tomcat-jdbc</artifactId>
 </exclusion>
 </exclusions>
</dependency>
<dependency>
 <groupId>org.apache.commons</groupId>
 <artifactId>commons-dbcp2</artifactId>
 <version>2.1.1</version>
</dependency>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

调试九法

调试九法

David J.Agans / 赵俐 / 人民邮电出版社 / 2010-12-7 / 35.00元

硬件缺陷和软件错误是“技术侦探”的劲敌,它们负隅顽抗,见缝插针。本书提出的九条简单实用的规则,适用于任何软件应用程序和硬件系统,可以帮助软硬件调试工程师检测任何bug,不管它们有多么狡猾和隐秘。 作者使用真实示例展示了如何应用简单有效的通用策略来排查各种各样的问题,例如芯片过热、由蛋酒引起的电路短路、触摸屏失真,等等。本书给出了真正能够隔离关键因素、运行测试序列和查找失败原因的技术。 ......一起来看看 《调试九法》 这本书的介绍吧!

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具