初识数据库链接池 HikariCP

本贴最后更新于 3003 天前,其中的信息可能已经时移世改
  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
改变自己晴空万里,埋怨别人天昏地暗。 北京

推荐标签 标签

  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    149 引用 • 257 回帖
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    179 引用 • 995 回帖
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    55 引用 • 85 回帖 • 2 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • 笔记

    好记性不如烂笔头。

    308 引用 • 793 回帖
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    407 引用 • 1246 回帖 • 582 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 43 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 654 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 339 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    85 引用 • 139 回帖 • 1 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    167 引用 • 1513 回帖
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 4 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    166 引用 • 595 回帖 • 1 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 680 关注
  • 音乐

    你听到信仰的声音了么?

    60 引用 • 511 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    8121 引用 • 37033 回帖 • 159 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 16 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 64 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    125 引用 • 169 回帖
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖 • 1 关注
  • 电影

    这是一个不能说的秘密。

    120 引用 • 599 回帖
  • Ngui

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

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

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    53 引用 • 37 回帖 • 3 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖