SpringBoot那些好用的连接池HikariCP

HikariCP来自于日语,翻译过来是光的意思,由此可见,连接池非常的快。

HikariCP是什么

HikariCP是数据库连接池,而且是号称史上最快的,而且目前来看确实是这样的,SpringBoot2.0也已经采用HikariCP作为默认连接池配置.

1571219068394

HikariCP GitHub网址

HikariCP为什么这么快

  • 字节码级别优化(很多方法通过JavaAssist生成)

    代码量非常小,很多方法都没有写,是通过JavaAssist编译的时候是动态生成的。

  • 大量小改进

    • 用FastStatementList代替ArrayList

    • 无锁集合ConcurrentBag(借鉴了.NET中的ConcurrentBag,在java中实现了自己的ConcurrentBag,对于高并发方面有些优化)

    • 代理类的优化 (比如,用invokestatic代替了invokevirtual)

      [invokestatic通过调用getProxyPreparedStatement静态方法生成了18个操作

      invokevirtual通过ProxyFactory.getProxyPreparedStatement生成15个操作,由此可见。

在Spring Boot中的配置

Spring Boot 2.x

  • 默认使用HikariCP
  • 配置spring.datasource.hikari.* 配置

Spring Boot 1.x

  • 默认使用Tomcat连接池,需要移除tomcat-jdbc依赖
  • spring.datasource.type=com.zaxxer.hikari.HikariDataSource

HikariCP数据源配置源码:


	/**
	 * Hikari DataSource configuration.
	 */
	@Configuration
	@ConditionalOnClass(HikariDataSource.class)
	@ConditionalOnMissingBean(DataSource.class)
	@ConditionalOnProperty(name = "spring.datasource.type",
			havingValue = "com.zaxxer.hikari.HikariDataSource", matchIfMissing = true)
	static class Hikari {

		@Bean
		@ConfigurationProperties(prefix = "spring.datasource.hikari")
		public HikariDataSource dataSource(DataSourceProperties properties) {
			HikariDataSource dataSource = createDataSource(properties,
					HikariDataSource.class);
			if (StringUtils.hasText(properties.getName())) {
				dataSource.setPoolName(properties.getName());
			}
			return dataSource;
		}

	}
posted @ 2021-12-03 13:39  筱进GG  阅读(385)  评论(0编辑  收藏  举报
SpringBoot SpringCloud Docker