4. 如何在Java中使用HikariCP或C3P0来管理MySQL数据库连接池?

devtools/2024/9/20 3:47:59/ 标签: mysql

在Java中使用连接池来管理数据库连接是一种常见的做法,能够显著提高应用程序的性能和资源利用率。HikariCPC3P0 是两种常用的数据库连接池实现。下面将分别介绍如何在Java中使用这两种连接池来管理MySQL数据库连接。

1. 使用HikariCP管理MySQL数据库连接池

1.1 添加依赖

如果你使用Maven来管理项目依赖,可以在pom.xml中添加HikariCP的依赖:

<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>5.0.1</version>
</dependency>
​
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency>

1.2 配置HikariCP

HikariCP以其高性能和简洁的配置而著称。以下是使用HikariCP配置和管理MySQL数据库连接池的示例代码:

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
​
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
​
public class HikariCPExample {
​private static DataSource dataSource;
​public static void main(String[] args) {configureDataSource();try (Connection connection = dataSource.getConnection();Statement statement = connection.createStatement();ResultSet resultSet = statement.executeQuery("SELECT * FROM users")) {
​while (resultSet.next()) {System.out.println("ID: " + resultSet.getInt("id"));System.out.println("Name: " + resultSet.getString("name"));}} catch (SQLException e) {e.printStackTrace();}}
​private static void configureDataSource() {HikariConfig config = new HikariConfig();config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC");config.setUsername("root");config.setPassword("password");
​// Optional: Set additional HikariCP configuration propertiesconfig.setMaximumPoolSize(10);config.setMinimumIdle(5);config.setConnectionTimeout(30000);config.setIdleTimeout(600000);config.setMaxLifetime(1800000);
​dataSource = new HikariDataSource(config);}
}

1.3 HikariCP配置说明

  • JdbcUrl:数据库连接的URL。

  • UsernamePassword:数据库登录的用户名和密码。

  • MaximumPoolSize:连接池中允许的最大连接数。

  • MinimumIdle:连接池中保持的最小空闲连接数。

  • ConnectionTimeout:获取连接的最大等待时间,超过这个时间会抛出异常。

  • IdleTimeout:连接池中的连接最大空闲时间,超过这个时间的空闲连接将会被回收。

  • MaxLifetime:连接在池中的最大存活时间,超过这个时间的连接将会被回收。

2. 使用C3P0管理MySQL数据库连接池
2.1 添加依赖

如果你使用Maven来管理项目依赖,可以在pom.xml中添加C3P0的依赖:

<dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.5</version>
</dependency>
​
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency>

2.2 配置C3P0

C3P0是一个功能强大的连接池实现,提供了丰富的配置选项。以下是使用C3P0配置和管理MySQL数据库连接池的示例代码:

import com.mchange.v2.c3p0.ComboPooledDataSource;
​
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
​
public class C3P0Example {
​private static DataSource dataSource;
​public static void main(String[] args) {try {configureDataSource();try (Connection connection = dataSource.getConnection();Statement statement = connection.createStatement();ResultSet resultSet = statement.executeQuery("SELECT * FROM users")) {
​while (resultSet.next()) {System.out.println("ID: " + resultSet.getInt("id"));System.out.println("Name: " + resultSet.getString("name"));}} catch (SQLException e) {e.printStackTrace();}} catch (PropertyVetoException e) {e.printStackTrace();}}
​private static void configureDataSource() throws PropertyVetoException {ComboPooledDataSource cpds = new ComboPooledDataSource();cpds.setDriverClass("com.mysql.cj.jdbc.Driver"); // MySQL JDBC Drivercpds.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC");cpds.setUser("root");cpds.setPassword("password");
​// Optional: Set additional C3P0 configuration propertiescpds.setMinPoolSize(5);cpds.setAcquireIncrement(5);cpds.setMaxPoolSize(20);cpds.setMaxStatements(100);cpds.setIdleConnectionTestPeriod(3000);cpds.setMaxIdleTime(600);
​dataSource = cpds;}
}

2.3 C3P0配置说明

  • DriverClass:JDBC驱动程序的类名。

  • JdbcUrl:数据库连接的URL。

  • UserPassword:数据库登录的用户名和密码。

  • MinPoolSize:连接池中保持的最小连接数。

  • AcquireIncrement:当连接池中的连接耗尽时,C3P0一次性增加的连接数。

  • MaxPoolSize:连接池中允许的最大连接数。

  • MaxStatements:连接池中缓存的PreparedStatement的最大数量。

  • IdleConnectionTestPeriod:连接池将空闲连接测试并重新连接的时间间隔(秒)。

  • MaxIdleTime:连接池中的连接最大空闲时间,超过这个时间的连接将会被回收(秒)。

3. 选择HikariCP还是C3P0?

  • HikariCP:以高性能、低延迟和轻量级著称,适合需要处理高并发请求的应用程序。配置相对简单,但性能优异。

  • C3P0:功能全面,配置选项丰富,但性能相对较低。适合需要复杂连接池管理功能的应用程序。

总结

使用HikariCP或C3P0可以有效地管理Java应用程序中的数据库连接池,提升性能和资源利用率。HikariCP更适合高性能要求的场景,而C3P0则适合需要灵活配置的场景。通过正确配置这些连接池,你可以确保应用程序在高并发下仍然保持高效稳定的数据库访问。


http://www.ppmy.cn/devtools/114391.html

相关文章

亲测有效,长期有效的RTSP流地址公网RTSP地址,各种类型的视频源

我们经常需要做一些实时视频流的测试&#xff0c;但是手边又没有办法及时弄到一个摄像机&#xff0c;我们经常会去搜索一下“公网RTSP地址”&#xff0c;但是大部分现在都失效了&#xff0c;有什么办法能够让我们快速构建一个RTSP流&#xff0c;点几下就能直接用&#xff1f; …

C++核心编程和桌面应用开发 第一天(命名空间 using 内联函数 默认参数 C++和C的不同)

目录 1.C的编程方式 2.双冒号::运算符 3.命名空间 3.1作用 3.2命名空间内的东西 3.3注意事项 4.using的用法 4.1using的声明 4.2using编译指令 5.C相较于C的增强 5.1全局变量检测增强 5.2函数检测增强 5.3类型转换检测增强 5.4结构体增强 5.5三目运算符增强 5.…

Spring Boot-定时任务问题

Spring Boot 定时任务问题及其解决方案 1. 引言 在企业级应用中&#xff0c;定时任务是一项常见需求&#xff0c;通常用于自动化执行某些操作&#xff0c;如数据备份、日志清理、系统监控等。Spring Boot 提供了简洁易用的定时任务机制&#xff0c;允许开发者通过简单的配置来…

笔试强训day15

平方数 牛妹是一个喜欢完全平方数的女孩子。 牛妹每次看到一个数 x&#xff0c;都想求出离 x 最近的完全平方数 y。 每次手算太麻烦&#xff0c;所以牛妹希望你能写个程序帮她解决这个问题。 形式化地讲&#xff0c;你需要求出一个正整数 y&#xff0c;满足 y 可以表示成 a2a^…

网页打开时,下载的文件xhr类型有什么作用?

网页打开时下载的文件xhr类型主要用于与服务器交互数据&#xff0c;实现网页的动态更新和内容局部加载。‌ XMLHttpRequest&#xff08;XHR&#xff09;对象是浏览器内置的一个功能强大的Web API&#xff0c;它允许网页通过JavaScript向服务器发出请求并处理响应&#xff0c;而…

Chainlit集成LlamaIndex并使用通义千问模型实现AI知识库检索网页对话应用增强版

前言 之前使用Chainlit集成LlamaIndex并使用通义千问大语言模型的API接口&#xff0c;实现一个基于文档文档的网页对话应用。 可以点击我的上一篇文章《Chainlit集成LlamaIndex并使用通义千问模型实现AI知识库检索网页对话应用》 查看。 本次针对上一次的代码功能进一步的完善…

微信小程序页面制作——婚礼邀请函(含代码)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

htop(1) command

文章目录 1.简介2.格式3.选项4.交互式命令5.示例6.小结参考文献 1.简介 htop 是一种交互式、跨平台的基于 ncurses 的进程查看器。 类似于 top&#xff0c;但 htop 允许您垂直和水平滚动&#xff0c;并使用指向设备(鼠标)进行交互。您可以观察系统上运行的所有进程&#xff0…

macOS平台编译MAVSDK源码生成mavsdk库与mavsdk_server服务可执行文件

克隆源码: 克隆命令 git clone https://github.com/mavlink/MAVSDK.git --recursive 克隆成功如下: 生成makefile (只生成mavsdk库) cmake -Bbuild/default -DCMAKE_BUILD_TYPE=Debug -H. 指定安装目录与生成目录: cmake -Bbuild/macos -DCMAKE_BUILD_TYPE=Debug -…

定制相亲交友系统如何提升用户体验

在当今社会&#xff0c;随着互联网技术的发展&#xff0c;人们的生活方式发生了翻天覆地的变化&#xff0c;其中婚恋交友领域尤为明显。越来越多的年轻人不再满足于传统的相亲方式&#xff0c;他们渴望一种更为高效、便捷且个性化的交友体验。正是在这种背景下&#xff0c;定制…

python清除一个月以前的ES索引文档数据

python清除一个月以前的ES索引文档数据 先查看一下mysql 数据&#xff0c;看一下那一列是日期字段看到是 edittime 列以下是 python 脚本 vim delete_old_noticeresult.py import datetime from elasticsearch import Elasticsearch, RequestError import logging# 配置日志 …

leetcode41. 缺失的第一个正数,原地哈希表

leetcode41. 缺失的第一个正数 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xf…

tair性能挑战赛攻略心得-Zzzzz

关联比赛: 第二届数据库大赛—Tair性能挑战 赛题分析 赛题要求实现一个基于persistent memory&#xff08;AEP&#xff09;的持久化键值存储系统&#xff0c;并要求从数据正确性和系统读写性能两个方面来考虑系统设计。 正确性 数据正确性包括数据写入的持久性和原子性两个…

tomcat,el表达式执行带参数命令,字符串数组,String[],el表达式注入

准备环境: docker pull tomcat:8;docker run --name tomcat8 -p 808:8080 -v /tmp/CC:/usr/local/tomcat/webapps/ -d tomcat:8;如下为 /tmp/CC/app/index.jsp <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8…

【kafka-01】kafka安装和基本核心概念

Kafka系列整体栏目 内容链接地址【一】afka安装和基本核心概念https://zhenghuisheng.blog.csdn.net/article/details/142213307【二】kafka集群搭建https://zhenghuisheng.blog.csdn.net/article/details/142253288 kafka安装和基本核心概念 一&#xff0c;kafka安装和基本核心…

算法:30.串联所有单词的子串

题目 链接&#xff1a;leetcode链接 思路分析&#xff08;滑动窗口&#xff09; 这道题目类似寻找异位词的题目&#xff0c;我认为是寻找异位词的升级版 传送门:寻找异位词 为什么说像呢&#xff1f; 注意&#xff1a;这道题目中words数组里面的字符串长度都是相同的&…

mongodb 安装教程

mongodb 安装教程&#xff1a; https://blog.51cto.com/u_13646338/5449015 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.9.tgz tar -zxvf mongodb-linux-x86_64-rhel70-5.0.9.tgz -C /opt/module/ [roothadoop102 module]# mv mongodb-linux-…

LabVIEW编程快速提升的技术

在LabVIEW程序员的成长过程中&#xff0c;很多技术和概念看似简单、常用&#xff0c;但真正掌握并能熟练运用&#xff0c;往往需要踏踏实实的实践与积累。没有什么是能够一蹴而就的&#xff0c;唯有通过不断的专注与深入&#xff0c;才能获得显著的提升。要想在LabVIEW开发上取…

ld-linux-x86-64.so.2

ld-linux-x86-64.so.2是Linux操作系统上x86_64架构的动态链接器。 ld-linux使用一系列的策略和配置文件来确定在哪里查找共享库。这通常包括查看/etc/ld.so.cache文件&#xff08;这是预先计算的共享库位置列表&#xff0c;该文件利用ldconfig工具管理&#xff09;&#xff0c;…

基于SpringBoot+Vue+MySQL的考编论坛网站

系统展示 用户前台界面 管理员后台界面 系统背景 在当前信息化高速发展的时代&#xff0c;考编已成为众多求职者的重要选择。然而&#xff0c;备考过程中信息获取、经验交流及资源分享的需求日益凸显。基于SpringBoot、Vue.js与MySQL构建的考编论坛网站应运而生&#xff0c;旨在…