大家好,欢迎来到IT知识分享网。
其作者还有产出了另外一个开源作品HikariJSON——高性能的JSON解析器。
代码体积更是少的可怜,130kb。Spring Boot 2都已经宣布支持了该组件,由之前的Tomcat换成HikariCP。
其性能远高于c3p0、tomcat等连接池,以致后来BoneCP作者都放弃了维护,在Github项目主页推荐大家使用HikariCP
上边说到是在BoneCP基础上做了优化,那做了哪些优化呢?
# # 配置数据源相关 使用 HikariCP 数据源 # # 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 默认:30秒 spring.datasource.hikari.connection-timeout=30000 # 最小连接数 spring.datasource.hikari.minimum-idle=5 # 最大连接数 spring.datasource.hikari.maximum-pool-size=15 # 自动提交 spring.datasource.hikari.auto-commit=true # 一个连接idle状态的最大时长(毫秒),超时则被释放(retired),默认:10分钟 spring.datasource.hikari.idle-timeout= # 连接池名字 spring.datasource.hikari.pool-name=DatebookHikariCP # 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),默认:30分钟 ms,建议设置比数据库超时时长少60秒,参考MySQL wait_timeout参数(show variables like '%timeout%';) --> spring.datasource.hikari.max-lifetime= spring.datasource.hikari.connection-test-query=SELECT 1
Maven
<dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>1.3.5</version> <scope>compile</scope> </dependency>
Oracle、MS SQL Server、MySQL、PostgreSQL:
HikariCP的使用:
第一步: 导入Maven依赖
<!-- HikariCP --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>2.6.0</version> </dependency>
/ * @Description: HikariConfig的demo * @Author: baixuehui * @Date: 2023/6/19 */ @PostMapping("/HikariCP") public R<List<Map<String, Object>>> HikariCP(){ List<Map<String, Object>> resultList = null; // 创建HikariCP配置对象 HikariConfig config = new HikariConfig(); //设置数据库驱动类名 config.setDriverClassName("com.mysql.cj.jdbc.Driver"); //设置JDBC连接URL config.setJdbcUrl("jdbc:mysql://182.42.92.23:3306/ry-cloud"); //设置用户名 config.setUsername("root"); //设置密码 config.setPassword("bxh520zj"); long currentTimeMillis = System.currentTimeMillis(); //使用配置对象创建HikariCP数据源 HikariDataSource ds = new HikariDataSource(config); long currentTimeMillis1 = System.currentTimeMillis(); log.info("连接数据库耗时为[{}]",currentTimeMillis1 - currentTimeMillis); // // 获取数据库连接 try(Connection connection = ds.getConnection()){ // 定义查询语句 String sql = "SELECT * FROM sys_user"; // 创建Statement对象 try (Statement statement = connection.createStatement(); // 执行查询操作 ResultSet resultSet = statement.executeQuery(sql)) { // //结果集合 resultList = new ArrayList<>(); // 获取结果集 ResultSetMetaData metaData = resultSet.getMetaData(); // 获取列数 int columnCount = metaData.getColumnCount(); // 遍历结果集 while (resultSet.next()) { // 创建Map集合 Map<String, Object> rowMap = new HashMap<>(); // 遍历列 for (int i = 1; i <= columnCount; i++) { // 获取列名 String columnName = metaData.getColumnName(i); // 获取列值 Object columnValue = resultSet.getObject(i); // 添加到Map集合 rowMap.put(columnName, columnValue); } // 添加到结果集合 resultList.add(rowMap); } //输出结果集合 System.out.println("查询结果集合: " + resultList); } //关闭connection connection.close(); System.out.println("连接成功"); }catch (Exception e){ System.out.println("连接失败:" + e.getMessage()); e.printStackTrace(); } return R.ok("查询数据成功!",resultList); }
springboot中application文件进行配置:
# # 配置数据源相关 使用 HikariCP 数据源 # spring: datasource: hikari: # 时间单位均为ms minimum-idle: 5 # 建议不设置,但如使用idle-timeout,该值需要小于maximum-pool-size maximum-pool-size: 10 # hikari做过测试根据CPU计算最优最大连接池,如下 # connections = ((cpu_core_count * 2) + effective_spindle_count) # 如4-Core i7,公式为9 = ((4 * 2) + 1),最后一个是有效的主核心数 auto-commit: true # 默认 idle-timeout: # 该值建议小于max-lifetime max-lifetime: # 该值建议小于数据库的连接关闭等待时间,详细的看下面分析 connection-timeout: 10000 # 默认30s,连接超时会报异常 # Connection is not avaitabte, request timed out after 59089ms validation-timeout: 5000 # 支持JDBC4的是isValid超时时间,不支持的是testQuery超时时间 connection-test-query: 'SELECT 1' # 支持JDBC4的不建议使用,因为JDBC4的isValid方法效率更高
运行结果:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/110441.html
