初识数据库链接池 HikariCP

本贴最后更新于 3004 天前,其中的信息可能已经时移世改
  1. Hikari(在日语中意思是:光)
    Fast, simple, reliable. HikariCP is a "zero-overhead" production ready JDBC connection pool. At roughly 90Kb, the library is very light.
    快速,简单,可靠。 HikariCP 是一个零开销的 JDBC 连接池作品,它是非常轻的,大概只有 90kb。详细地址 Simple-bin{O(∩_∩)O 哈哈,我 Fork 到我的 Git 了}。下面性能的测试图:
    HikariCP-bench-2.4.0.png

  2. 使用 HikariCP
    要求:Java7 或者更高版本,slf4j 类库。
    package com.cyb.test;
    import java.sql.Connection;
    import java.sql.SQLException;

     import com.zaxxer.hikari.HikariConfig;
     import com.zaxxer.hikari.HikariDataSource;
    
     /**
      * 第一个HikariCP演示例子
      * @author Cheng
      *
      */
     public class FirstHikariCPDemo {
    
     	//连接池
     	private HikariDataSource dataSource;
    
     	/**
     	 * 
     	 * @param className
     	 * @param url
     	 * @param username
     	 * @param password
     	 */
     	public void init(String className,String url,String username,String password){
    
     		//连接池配置信息
     		HikariConfig config = new HikariConfig();
     		config.setDriverClassName(className);
     		config.setJdbcUrl(url);
     		config.setUsername(username);
     		config.setPassword(password);
     		config.addDataSourceProperty("cachePrepStmts", "true");
     		config.addDataSourceProperty("prepStmtCacheSize", "250");
     		config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
    
     		//链接池初始化
     		setDataSource(new HikariDataSource(config));
     	}
    
     	//获取链接
     	public Connection getConnection(){
     		Connection con = null;
     		try {
     			con = getDataSource().getConnection();
     		} catch (SQLException e) {
     			e.printStackTrace();
     		}
     		return con;
     	}
    
     	//关闭连接池
     	public void close(){
     		getDataSource().close();
     	}
    
     	public HikariDataSource getDataSource() {
     		return dataSource;
     	}
    
     	public void setDataSource(HikariDataSource dataSource) {
     		this.dataSource = dataSource;
     	}
    
     	public static void main(String[] args)throws Exception {
     		FirstHikariCPDemo demo = new FirstHikariCPDemo();
     		demo.init("com.mysql.jdbc.Driver", "jdbc:mysql://localhost:3306/mango_example", "root", "root");
     		System.out.println(demo.getConnection().getCatalog());
     	}
    
     }
    

    如果不使用 HikariConfig,可以直接 new 一个 HikariDataSource 实例,如下所示:

     HikariDataSource ds = new HikariDataSource();
     ds.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons");
     ds.setUsername("bart");
     ds.setPassword("51mp50n");
    

    或者基于 config.properties 文件如下:

     HikariConfig config = new HikariConfig("config.properties");
     HikariDataSource ds = new HikariDataSource(config);
    

    config.properties 文件的内容如下:

     dataSourceClassName=com.mysql.jdbc.Driver
     dataSource.user=root
     dataSource.password=root
     dataSource.databaseName=mango_example
     dataSource.portNumber=3306
     dataSource.serverName=localhost
    

    也可以基于 java.util.Properties 进行配置

     Properties props = new Properties();
     props.setProperty("dataSourceClassName", "com.mysql.jdbc.Driver");
     props.setProperty("dataSource.user", "root");
     props.setProperty("dataSource.password", "root");
     props.setProperty("dataSource.databaseName", "mango_example");
     props.put("dataSource.logWriter", new PrintWriter(System.out));
    
     HikariConfig config = new HikariConfig(props);
     HikariDataSource ds = new HikariDataSource(config);
    
  3. spring 配置

     <bean id="dataSourceHikari" class="com.zaxxer.hikari.HikariDataSource">
     		 <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
     		 <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mango_example?useUnicode=true&characterEncoding=UTF-8"/>
     		 <property name="username" value="root"/>
     		 <property name="password" value="root"/>
    
     		 <!-- 控制自动提交行为 default:true -->
     		 <property name="autoCommit" value="true"/>
    
     		 <!--连接池获取的连接是否只读 default:false-->
     		 <property name="readOnly" value="false"/>
    
     		 <!--控制连接的事务隔离等级 default:none-->
     		 <property name="transactionIsolation" value="none"/>
    
     		 <!--设置catalog以便于支持查看catalogs >
     		 <property name="catalog" value="none"/>
    
     		 <!--最大连接超时时间>
     		 <property name="connectionTimeout" value="30000"/>
    
     		 <!--最大空闲超时时间 -->
     		 <property name="idleTimeout" value="600000"/>
    
     		 <!--连接池中一个连接的最大生命周期 >
     		 <property name="maxLifetime" value="1800000 "/>
    
     </bean>
    
  4. Maven 中引入
    Java 7 和 Java 8

     <dependency>
     	<groupId>com.zaxxergroupId>
     	<artifactId>HikariCPartifactId>
     	<version>2.4.7version>
     </dependency>
    

    Java 6

     <dependency>
     	<groupId>com.zaxxergroupId>
     	<artifactId>HikariCP-java6artifactId>
     	<version>2.3.13version>
     </dependency>
    
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • HikariCP
    2 引用 • 1 回帖
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    342 引用 • 708 回帖
  • 连接池
    7 引用 • 15 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
SimpleBin
改变自己晴空万里,埋怨别人天昏地暗。 北京

推荐标签 标签

  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    729 引用 • 1327 回帖
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 156 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 589 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 65 回帖 • 438 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • 倾城之链
    23 引用 • 66 回帖 • 137 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 171 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    130 引用 • 793 回帖 • 1 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    91 引用 • 751 回帖 • 3 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    142 引用 • 442 回帖
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 334 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 62 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    169 引用 • 506 回帖 • 1 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    691 引用 • 535 回帖
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 391 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    12 引用 • 54 回帖 • 164 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 132 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    107 引用 • 295 回帖
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    21 引用 • 140 回帖 • 2 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 211 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 4 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 137 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 743 关注