HikariCP 连接池例子
来源:互联网 发布:ubuntu 用户管理 编辑:程序博客网 时间:2024/05/17 20:08
- 所用jar
HikariCP-2.5.1.jarlog4j-1.2.11.jarlog4j-api-2.3.jarlog4j-core-2.3.jarojdbc7.jarslf4j-api-1.8.0-alpha2.jar
- jar下载
http://download.csdn.net/download/capmiachael/9927524
- 配置文件 HikariConfig.properties
#-- Hikari Datasource --> #driverClassName无需指定,除非系统无法自动识别 driverClassName=oracle.jdbc.driver.OracleDriver#database addressjdbcUrl=jdbc:oracle:thin:@************:ORCL#useName 用户名username=******#passwordpassword=***********#连接只读数据库时配置为true, 保证安全 --> readOnly=false#等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒 --> connectionTimeout=30000# 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 --> idleTimeout=600000#一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL wait_timeout参数(show variables like '%timeout%';) --> maxLifetime=1800000# 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count) --> maximumPoolSize=15
其中,很多配置都使用缺省值就行了,除了maxLifetime和maximumPoolSize要注意自己计算一下。
其他的配置(sqlSessionFactory、MyBatis
MapperScannerConfigurer、transactionManager等)统统不用变。其他关于Datasource配置参数的建议: Configure your HikariCP idleTimeout and
maxLifeTime settings to be one minute less than the wait_timeout of
MySQL.
对于有Java连接池的系统,建议MySQL的wait_timeout使用缺省的8小时(http://www.rackspace.com/knowledge_center/article/how-to-change-the-mysql-timeout-on-a-server)。
- 代码:
package com.oeina.database;import java.sql.Connection;import java.util.ResourceBundle;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import com.zaxxer.hikari.HikariDataSource;/** * Hikari的 连接池 * @author Michael * @date 2017年8月9日18:46:41 * */public class HikariPoolManager { static Logger logger = LogManager.getLogger(); //-- Hikari Datasource --> //driverClassName无需指定,除非系统无法自动识别 private static String driverClassName=""; //database address private static String jdbcUrl=""; //useName 用户名 private static String username=""; //password private static String password=""; //连接只读数据库时配置为true, 保证安全 --> private static boolean readOnly=false; //等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒 --> private static int connectionTimeout; // 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 --> private static int idleTimeout; //一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL wait_timeout参数(show variables like '%timeout%';) --> private static int maxLifetime; // 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count) --> private static int maximumPoolSize; static HikariDataSource hikariDataSource = new HikariDataSource(); static { /** * 加载配置文件 */ readProperties("HikariConfig"); /** * 设置数据源的参数 */ dataSourceConfig(); } /** * * @see 读取数据库配置文件 * @param propertitieFileName 配置文件名 * @return * @Exception FileNotFoundException,IOException */ private static void readProperties(String propertitieFileName){ try{ ResourceBundle bundle = ResourceBundle.getBundle(propertitieFileName); driverClassName=bundle.getString("driverClassName"); jdbcUrl=bundle.getString("jdbcUrl"); username=bundle.getString("username"); password=bundle.getString("password"); readOnly=Boolean.parseBoolean(bundle.getString("readOnly")); connectionTimeout=Integer.parseInt(bundle.getString("connectionTimeout")); idleTimeout=Integer.parseInt(bundle.getString("idleTimeout")); maxLifetime=Integer.parseInt(bundle.getString("maxLifetime")); maximumPoolSize=Integer.parseInt(bundle.getString("maximumPoolSize")); } catch (Exception e){ logger.error("读取数据库参数出现问题:"+e); throw e; } } /** * * @see 设置datasource各个属性值 * @param * @return Connection * @Exception Exception */ private static void dataSourceConfig(){ try{ //driverClassName无需指定,除非系统无法自动识别 //private static String driverClassName=""; hikariDataSource.setDriverClassName(driverClassName); //database address hikariDataSource.setJdbcUrl(jdbcUrl); //useName 用户名 hikariDataSource.setUsername(username); //password hikariDataSource.setPassword(password); //连接只读数据库时配置为true, 保证安全 --> hikariDataSource.setReadOnly(readOnly); //等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒 --> hikariDataSource.setConnectionTimeout(connectionTimeout); // 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟 --> hikariDataSource.setIdleTimeout(idleTimeout); //一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL wait_timeout参数(show variables like '%timeout%';) --> hikariDataSource.setMaximumPoolSize(maxLifetime); // 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count) --> hikariDataSource.setMaximumPoolSize(maximumPoolSize); }catch(Exception e){ logger.error("设置datasource各个属性值异常!" + e); throw e; } } /** * 取得数据库连接 * @return * @throws Exception */ public static Connection getConnection() throws Exception{ Connection connection = null; try { connection = hikariDataSource.getConnection(); } catch (Exception e) { logger.error("取得数据库连接时发生异常!"+ e); throw e; } return connection; } /** * 释放数据库连接 * @param connection * @throws Exception */ public static void freeConnection(Connection connection) throws Exception{ if (connection != null){ try { connection.close(); }catch(Exception e){ logger.error("释放数据库连接时发生异常!"+ e.getMessage()); } } }}
附录1:
另一种创建连接池的方法
package com.ace.connectionpool;import com.zaxxer.hikari.HikariConfig;import com.zaxxer.hikari.HikariDataSource;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/** * This clas shows how to use HikariConfig class */public class CP_0200_HikariConfigTest{ public static void main(String[] args) { HikariConfig hikariConfig = new HikariConfig(); hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/mydata"); hikariConfig.setUsername("root"); hikariConfig.setPassword("1111"); hikariConfig.addDataSourceProperty("cachePrepStmts", "true"); hikariConfig.addDataSourceProperty("prepStmtCacheSize", "250"); hikariConfig.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); HikariDataSource ds = new HikariDataSource(hikariConfig); Connection conn = null; Statement statement = null; ResultSet rs = null; try { conn = ds.getConnection(); statement = conn.createStatement(); rs = statement.executeQuery("select * from dept"); while (rs.next()) { System.out.println(rs.getString("dname")); System.out.println(rs.getString("location")); System.out.println(rs.getInt("deptno")); } } catch (SQLException e) { e.printStackTrace(); } }}
- 附录2:
数据库连性池性能测试对比(hikariCP,druid,tomcat-jdbc,dbcp,c3p0)
http://www.tuicool.com/articles/qayayiM
- 附录3:
HikariCP 官方下载
http://maven.outofmemory.cn/com.zaxxer/HikariCP/
阅读全文
0 0
- HikariCP 连接池例子
- HikariCP logoJDBC 连接池 HikariCP
- hikariCP连接池
- 高性能JDBC连接池:HikariCP
- HikariCP 高性能的 JDBC 连接池
- HikariCP-史上最快速的连接池
- HikariCP连接Trafodion样例
- 号称性能最好的JDBC连接池:HikariCP
- 号称性能最好的JDBC连接池:HikariCP
- 号称性能最好的JDBC连接池:HikariCP
- HiKariCP数据库连接池
- HikariCP 数据库连接池
- HikariCP
- Spring、HikariCP、Mybatis、Oracle 配置HikariCP数据库连接池
- 数据库连接池HikariCP的配置
- 转换数据库连接池为hikaricp
- SpringBoot整合HikariCP数据库连接池
- 数据库连接池-HikariCP-配置和使用
- mybatis的入门使用
- 关于 Vue.js+Element-UI 日期控件 日期范围选择
- CA Academy 0-K Multiple [bfs,记录路径]【思维建图】
- 笨办法学 Python · 续 练习 24:URL 快速路由
- 预编译头的概念,慢慢看一边,会有收获!
- HikariCP 连接池例子
- kali Linux 下安装 python tkinter 库
- 阿斯特astgo 2014 v7.0全功能版在centos 5.x 32位系统安装教程
- C++构造函数简析
- Prime Ring Problem (素数环)深度优先搜索
- VM虚拟机装centos7无法自动获取IP的解决方法
- 调用融云SDK创建讨论组失败bug记录
- 集体照 字符串处理
- 使用cocoaPods import导入时没有提示的解决办法