开胃菜:据说hikari连接池很快,快到让另一个连接池的作者抛弃对自己连接池的维护,并且强烈推荐使用hikari
连接池目前我们项目使用的有两个 一个是Druid , 一个是 Hikari,
其中Druid关注的是连接池中连接的监控作用,而Hikari注重的是连接池中连接的创建和回收的速度,因此Hikari会有更高的效率
Druid的配置:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="driverClassName" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> 初始化连接大小 <property name="initialSize" value="${initialSize}"></property> 连接池最大数量 <property name="maxActive" value="${maxActive}"></property> 连接池最小空闲 <property name="minIdle" value="${minIdle}"></property> 获取连接最大等待时间 <property name="maxWait" value="${maxWait}"></property> <property name="filters" value="stat,config" /> <property name="connectionProperties" value="config.decrypt=true" /> </bean>
Hikari的配置:
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close"> <!-- 无需指定,除非系统无法自动识别 --> <property name="jdbcUrl" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> <!-- 连接只读数据库时配置为true, 保证安全 --> <property name="readOnly" value="false" /> <!-- 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒 --> <property name="connectionTimeout" value="30000" /> <!-- 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 --> <property name="idleTimeout" value="60000" /> <!-- 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL wait_timeout参数(show variables like '%timeout%';) --> <property name="maxLifetime" value="1800000" /> <!-- idleTimeout只有在minimumIdle设置为小于maximumPoolSize的情况下才生效 --> <property name="minimumIdle" value="10" /> <!-- 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count) --> <property name="maximumPoolSize" value="15" /> </bean>
以上两个都是同事琢磨出来的配置,仅供参考吧。
还有一个就是Hikari在spring-boot中的配置
spring: datasource: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://xx.xx.xx.xx:3306/xx?characterEncoding=UTF-8&useUnicode=true&autoReconnect=true&useCursorFetch=true&defaultFetchSize=100&serverTimezone=UTC username: root password: root hikari: minimum-idle: 5 idle-timeout: 600000 auto-commit: true pool-name: Hikari Pool max-lifetime: 1800000 connection-timeout: 30000 connection-test-query: Select 1
就这些了,只是做个记录