当前位置: 首页 > news >正文

切换数据库连接池

-数据库连接池概念-

数据库连接池是一种管理数据库连接的技术,它允许应用程序在需要时从池中获取数据库连接,并在使用完毕后将连接返回给池,而不是每次都创建和销毁连接。

-常用的数据库连接池-


HikariCP:是一个高性能的 Java 数据库连接池,具有快速的连接获取速度和低资源消耗的特点。它被广泛应用于各种 Java 项目中,尤其是在 Spring Boot 项目中默认使用的连接池。
Druid:是阿里巴巴开发的数据库连接池,除了具备高性能外,还提供了丰富的监控和管理功能。它可以方便地与 Spring 等框架集成,并且在处理高并发场景下表现出色。
C3P0:是一个老牌的 Java 数据库连接池,具有稳定的性能和良好的兼容性。它提供了多种配置选项,可以满足不同应用场景的需求

-数据库连接池切换步骤-

1.停止使用旧的连接池,以spring项目与项目构建工具Maven为例,移除pom.xml中的依赖

<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version></version>
</dependency>

2.添加新连接池的依赖,以Druid为例:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version></version>
</dependency>

3.修改配置文件application.properties或application.yml

  • 移除旧连接池的配置
spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/test
spring.datasource.hikari.username=root
spring.datasource.hikari.password=123456
spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
  • 添加新连接池配置(数据库用户名与密码修改成你自己的)
spring.datasource.druid.url=jdbc:mysql://localhost:3306/test
spring.datasource.druid.username=root
spring.datasource.druid.password=123456
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver

4.编写几个测试用例测试新数据库连接池

import com.alibaba.druid.pool.DruidDataSource;
import org.junit.jupiter.api.Test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import static org.junit.jupiter.api.Assertions.*;

public class DruidTest {

    @Test
    public void testConnection() throws Exception {
        // 配置 Druid 连接池
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl("jdbc:mysql://localhost:3306/your_database");
        dataSource.setUsername("your_username");
        dataSource.setPassword("your_password");
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");

        // 从连接池获取连接
        try (Connection connection = dataSource.getConnection()) {
            // 验证连接是否成功获取
            assertNotNull(connection, "无法从池中获取连接");

            // 执行简单的 SQL 查询
            try (Statement statement = connection.createStatement();
                 ResultSet resultSet = statement.executeQuery("SELECT 1")) {
                // 验证查询结果
                assertTrue(resultSet.next(), "查询应至少返回一行");
                assertEquals(1, resultSet.getInt(1), "查询结果应为 1");
            }
        }
    }
}

相关文章:

  • OpenBMC:BmcWeb 处理http请求
  • Tomcat 安装
  • FX-std::set
  • LLM的准确率评估采用什么方式:准确率评估使用的是 `sklearn.metrics` 模块中的 `accuracy_score` 函数
  • 日常开发记录-radioGroup组件
  • 【并发编程】JUC常用类以及线程池
  • 在Simulink中将Excel数据导入可变负载模块的方法介绍
  • Docker Swarm 集群操作实践
  • django框架 [面试篇]
  • python-leetcode-最大连续1的个数 III
  • 【leetcode hot 100 146】LRU缓存
  • 如何修复 Tauri 发布后程序运行时显示 `asset not found: index.html` 的问题
  • 父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法
  • NFS writeback流程中的GFP_NOFS
  • Docker安装部署RabbitMQ
  • 条款1:理解模版性别推导
  • C#带多组标签的Snowflake SQL查询批量数据导出程序
  • linux 命令 grep
  • Embedding模型到底是什么?
  • C++11 编译使用 aws-cpp-sdk
  • dedecms做的网站如何上线/google关键词指数
  • 北京效果图公司/关键词排名优化怎么样
  • 做转运网站/浙江网络科技有限公司
  • 新网站域名备案流程/图片外链
  • 武昌网站建设 优帮云/优化的定义
  • 京东网站建设策略/微信怎么做推广