java jdbc线程池的使用

2023-10-29

好久没直接使用jdbc了,今天重温了一下相关知识,并对连接池的使用写了简单的示例,记录在此以便需要的同行参考和方便自己查阅,不足之处欢迎批评指正。

1、dbcp数据源

所需jar包 dbcp:连接池的实现,commons-pool2:连接池实现的依赖

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>dbcp</artifactId>
    <version>6.0.29</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.0</version>
</dependency>
在这里我使用了单例模式来创建dbcp数据源,具体代码输入附上注释

private static Connection connection;
private static String url="jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf-8";
private static String user = "root";
private static String password="root";
private static String driverClassName="com.mysql.jdbc.Driver";
private static Object obj=new Object();
//数据源对象
private static BasicDataSource bds = null;
public static Connection getConnectionByPool(){
    if (bds == null) {
        synchronized (obj) {
            if (bds == null) {
                //创建数据源对象
                bds = new BasicDataSource();
                //设置连接池所需的驱动
                bds.setDriverClassName(driverClassName);
                bds.setUrl(url);
                bds.setUsername(user);
                bds.setPassword(password);
                //设置连接池的初始连接数
                bds.setInitialSize(10);
                //设置连接池最多可以有多少个活动连接数
                bds.setMaxActive(20);
                //设置连接池最少有两个空闲的连接
                bds.setMinIdle(2);
                //通过数据源获取连接
            }
        }
    }
    try {
        return bds.getConnection();
    } catch (SQLException e) {
        e.printStackTrace();
        return  null;
    }
}

2、c3p0数据源

c3p0相比之下性能更胜一筹,Hibernate推荐使用c3p0连接池。可以自动清理不用的Connection、statement和resultset。

示例中同样采用单例模式来创建连接池,然后从连接池中获取Connection对象。

public static void initc3p0DataSource(){
    synchronized (obj){
        if (dataSource == null){
            dataSource = new ComboPooledDataSource();
            try {
                //注册驱动
                dataSource.setDriverClass(driverClassName);
                //设置数据库url
                dataSource.setJdbcUrl(url);
                //设置数据库用户名
                dataSource.setUser(user);
                //设置数据库密码
                dataSource.setPassword(password);
                //设置连接池最大连接数
                dataSource.setMaxPoolSize(40);
                //设置最小连接数
                dataSource.setMinPoolSize(2);
                //设置初始连接数
                dataSource.setInitialPoolSize(10);
                //设置最大statement缓存数
                dataSource.setMaxStatements(20);
            } catch (PropertyVetoException e) {
                e.printStackTrace();
            }
        }
    }
}
public static Connection getConnectionFromc3p0(){
    if (dataSource == null){
        initc3p0DataSource();
    }
    if (dataSource != null){
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }
    return null;
}




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java jdbc线程池的使用 的相关文章

随机推荐

  • C++的类型

    C 的类型 按照标准 C 只有两种类型 基本类型和复合类型 但是里面细节多导致彻底理解它们有难度 所以这里只是简单总结一下 基本类型 基本类型分成算术类型和两种特殊的类型 算术类型 算术类型分成整数类型和浮点数类型两种 整数类型 以下都是整
  • 在springboot中使用Sse(Server-sent Events)Web实时通信技术-服务器发送事件SseEmitter

    最近在练习项目时需要用到消息实时推送技术 了解到有两种实时通信技术供我选择 SSE和WebSocket 详细了解后得知SSE是基于http协议 无需导入其他依赖 特点是服务端主动给客户端推送消息 单向 适合浏览器端只做数据接收 而webso
  • 华为OD机试真题-路灯照明问题-2023年OD统一考试(B卷)

    题目描述 在一条笔直的公路上安装了N个路灯 从位置0开始安装 路灯之间间距固定为100米 每个路灯都有自己的照明半径 请计算第一个路灯和最后一个路灯之间 无法照明的区间的长度和 输入描述 第一行为一个数N 表示路灯个数 1 lt N lt
  • Pysot训练自己的数据集

    数据集预处理操作 Pysot训练自己数据集前的预处理 Vesper0412的博客 CSDN博客 Pysot源码地址 https github com STVIR pysot 1 linux系统激活环境 conda activate pyto
  • 机器学习课程学习阶段总结

    机器学习课程学习阶段总结 线性回归 逻辑回归 逻辑回归 是一种分类算法 和之前的线性回归不是同一类问题 但是对于处理问题上有相同的思想 对于线性回归问题 有较容易理解的思路 首先指定一个形式确定的 h x Tx h theta x thet
  • 笔记本连接RK61键机械键盘非损坏的win和alt对调,数字键失灵以及特殊字母键失灵恢复

    1 问题描述 在打游戏或者码字的时候 无意中按下了键盘模式切换按键 导致了键盘的假性失灵状态 具体表现为 1 win和alt键功能对调 win按键无反应 alt键出现windows窗口 虽然不影响使用 但是很别扭 2 数字键失灵 键盘打不出
  • 网络安全有哪些经典笑话

    今天程序员同事发了一个链接给我 点开是一个调侃程序员有哪些经典笑话的帖子 给我看乐了 诸如 老婆给当程序员的老公打电话 下班顺路买一斤包子带回来 如果看到卖西瓜的 就买一个 当晚 程序员老公手捧一个包子进了家门 老婆怒道 你怎么就买了一个包
  • Android BLE 快速开发示例

    目录 概述 1 FastBle的使用 2 BLE开发实践方面的理解 3 FastBle源码解析 概述 思来想去 还是写这篇博文 记录一下 当时学习BLE的一些心得 重捡回当前Android知识 想深入了解蓝牙通讯知识 这个案例是非常不错的选
  • 毕业设计 - 基于单片机的测谎仪

    文章目录 1 简介 2 实现原理 3 主要器件 4 实现效果 正常情况 未说谎 异常情况 说谎了 5 部分实现代码 6 最后 1 简介 Hi 大家好 学长今天向大家介绍一个有趣的单片项目 基于单片机的测谎仪 大家可用于 课程设计 或 毕业设
  • 大数据技术(林子雨版)——期末复习知识点

    gt 大数据 云计算 大数据时代的三次信息化浪潮 时间 标志 解决的问题 代表企业 1980年前后 个人计算机 信息处理 Intel IBM 1995年前后 互联网 信息传输 谷歌 腾讯 2010年前后 大数据 云计算 物联网 信息爆炸 亚
  • Windows “Win+R“命令行运行常用命令

    Windows Win R 命令行运行常用命令 Windows操作系统提供了许多方便的方式来执行各种任务 其中之一是使用 Win R 运行命令行 这个快捷键组合可以让您迅速启动各种应用程序 工具和系统实用程序 而无需通过开始菜单或桌面快捷方
  • 【仲裁器】轮询仲裁round-robin,rr

    起因 在多主单从的设计中 当多个源端同时发起传输请求时 需要仲裁器根据优先级来判断响应哪一个源端 轮询仲裁 各个源端优先级相同 当其同时发起请求时 依次进行响应 电路图 代码 module rr arb input clk input rs
  • 区块链(二)-私有链的搭建

    私有链 搭建私有链 首先需要写一个创世块文件 创世块就是我自己链上的第一个区块 config nonce 0x0000000000000042 mixhash 0x00000000000000000000000000000000000000
  • 简单介绍Hyperledger fabric是什么

    Hyperledger Fabric作为超级账本的项目之一 目前基于它开发的区块链项目非常多 Linux基金会于2015年成立超级账本 以推进跨行业的区块链技术 相对于申报一个区块链标准 它鼓励通过社区合作的方式来发展区块链技术 带着知识产
  • 论git中使用https和ssh协议的区别

    论git中使用https和ssh协议的区别 SHELDON CUI S BLOG 2017 09 08 git https ssh 心得 http好还是ssh好 git可以使用四种主要的协议来传输资料 本地协议 Local HTTP 协议
  • TightVNC H264编解码(一)

    时光流逝 时间过的真快啊 疲于工作 发现近一个多月没写文章了 此文算是对最近的工作做个总结吧 经过尽二个月的不断摸索 TightVNC终于支持H264编解码了 前期真正编写H264编解码器只花了一周左右时间 但是测试发现效果并不是太理想 帧
  • 2022年android面试题,Android资深架构师分享学习经验及总结

    前言 最近有些朋友提问 Android QQ空间 换肤实现原理是什么 于是 我决定在这里做一下回答 对这个方面感兴趣的朋友也可以来看下 手q的换肤机制主要是通过拦截系统resource中的sPreloadedDrawables静态缓存变量
  • 为什么说“低估值买入,买到即赚到”?

    投资究竟能不能挣到钱 到底是由哪个环节决定的 买入还是卖出 直觉上说 这个问题的答案理所当然是 卖出 就连路边卖杂货的小商贩都明白 只要卖出价高于买入价 就可以挣到钱 直到我看了 穷查理宝典 接触到价值投资的理念 想法有了根本性改变 买入的
  • 对opencl helloworld代码的修正

    由于代码比较乱 数组也容易越界 故重新加了个类 用了stl vector 代码如下 test cl kernel void hello kernel global const float a global const float b glo
  • java jdbc线程池的使用

    好久没直接使用jdbc了 今天重温了一下相关知识 并对连接池的使用写了简单的示例 记录在此以便需要的同行参考和方便自己查阅 不足之处欢迎批评指正 1 dbcp数据源 所需jar包 dbcp 连接池的实现 commons pool2 连接池实