初识数据库链接池 HikariCP

本贴最后更新于 2793 天前,其中的信息可能已经时移世改
  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 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖
  • HikariCP
    2 引用 • 1 回帖
  • 数据库

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

    330 引用 • 614 回帖 • 1 关注
  • 连接池
    7 引用 • 15 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 小薇

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

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

    34 引用 • 467 回帖 • 693 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    75 引用 • 145 回帖 • 1 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖
  • Sillot

    Sillot (汐洛)孵化自思源笔记,致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点
    Github 地址:https://github.com/Hi-Windom/Sillot

    15 引用 • 6 回帖 • 28 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    70 引用 • 532 回帖 • 712 关注
  • Jenkins

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

    51 引用 • 37 回帖
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    4 引用 • 55 回帖 • 10 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 18 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    131 引用 • 3639 回帖
  • 架构

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

    140 引用 • 441 回帖 • 1 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    261 引用 • 662 回帖
  • 反馈

    Communication channel for makers and users.

    123 引用 • 906 回帖 • 193 关注
  • HTML

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

    103 引用 • 294 回帖
  • Caddy

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

    10 引用 • 54 回帖 • 126 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 89 关注
  • LeetCode

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

    209 引用 • 72 回帖 • 2 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 47 关注
  • Hexo

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

    21 引用 • 140 回帖 • 28 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 6 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    164 引用 • 407 回帖 • 526 关注
  • 音乐

    你听到信仰的声音了么?

    59 引用 • 509 回帖
  • MySQL

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

    675 引用 • 535 回帖 • 1 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 10 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 2 关注
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 592 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1425 引用 • 10043 回帖 • 470 关注