zoukankan      html  css  js  c++  java
  • 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;
    		}
    
    	}
    
  • 相关阅读:
    Java中的subList方法
    某同学工作之后的感悟
    存放80000000学生成绩的集合,怎么统计平均分性能高
    为了金秋那沉甸甸的麦穗,我绝不辜负春天
    subList?? subString???
    "爸妈没多大本事"……
    中秋节支付宝口令红包解析
    算法>动态规划(一) 小强斋
    数据结构>优先队列(堆) 小强斋
    算法>贪心算法 小强斋
  • 原文地址:https://www.cnblogs.com/zhaokejin/p/15626374.html
Copyright © 2011-2022 走看看