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

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

内容简介: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>

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

查看所有标签

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

Node.js:来一打 C++ 扩展

Node.js:来一打 C++ 扩展

死月 / 电子工业出版社 / 2018-6-1 / 109

Node.js 作为近几年新兴的一种编程运行时,托 V8 引擎的福,在作为后端服务时有比较高的运行效率,在很多场景下对于我们的日常开发足够用了。不过,它还为开发者开了一个使用C++ 开发 Node.js 原生扩展的口子,让开发者进行项目开发时有了更多的选择。 《Node.js:来一打 C++ 扩展》以 Chrome V8 的知识作为基础,配合 GYP 的一些内容,将教会大家如何使用 Node......一起来看看 《Node.js:来一打 C++ 扩展》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具