一、c3p0

public class ConnectionManager {

    public static ComboPooledDataSource dataSource;
static {
try {
dataSource = new ComboPooledDataSource();
dataSource.setUser("freeswitch");
dataSource.setPassword("freeswitch");
dataSource.setJdbcUrl("jdbc:postgresql://数据库地址:数据库端口/freeswitch");
dataSource.setDriverClass("org.postgresql.Driver");
dataSource.setInitialPoolSize();
dataSource.setMinPoolSize();
dataSource.setMaxPoolSize();
dataSource.setMaxStatements();
dataSource.setMaxIdleTime();
} catch (Exception e) {
e.printStackTrace();
}
} public static Connection getConnection3() {
Connection conn = null;
if (null != dataSource) {
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
return conn;
}
}

二、dbcp2

public class DataBaseHelper {

    // 保证一个线程一个Connection,线程安全
private static final ThreadLocal<Connection> connHolder;
// 线程池
private static final BasicDataSource dataSource;
static {
connHolder = new ThreadLocal<Connection>();
dataSource = new BasicDataSource();
dataSource.setDriverClassName("org.postgresql.Driver");
dataSource.setUrl("jdbc:postgresql://数据库地址:数据库端口/freeswitch");
dataSource.setUsername("freeswitch");
dataSource.setPassword("freeswitch");
/// 设置空闲和借用的连接的最大总数量,同时可以激活。
dataSource.setMaxTotal();
// 设置初始大小
dataSource.setInitialSize();
// 最小空闲连接
dataSource.setMinIdle();
// 最大空闲连接
dataSource.setMaxIdle();
// 超时等待时间毫秒
dataSource.setMaxWaitMillis( * );
// 只会发现当前连接失效,再创建一个连接供当前查询使用
dataSource.setTestOnBorrow(true);
// removeAbandonedTimeout :超过时间限制,回收没有用(废弃)的连接(默认为 300秒,调整为180)
dataSource.setRemoveAbandonedTimeout();
// removeAbandoned :超过removeAbandonedTimeout时间后,是否进
// 行没用连接(废弃)的回收(默认为false,调整为true)
// DATA_SOURCE.setRemoveAbandonedOnMaintenance(removeAbandonedOnMaintenance);
dataSource.setRemoveAbandonedOnBorrow(true);
// testWhileIdle
dataSource.setTestOnReturn(true);
// testOnReturn
dataSource.setTestOnReturn(true);
// setRemoveAbandonedOnMaintenance
dataSource.setRemoveAbandonedOnMaintenance(true);
// 记录日志
dataSource.setLogAbandoned(true);
// 设置自动提交
dataSource.setDefaultAutoCommit(true); } /**
* 获取数据库连接
*/
public static Connection getConnection() {
Connection conn = connHolder.get();
if (conn == null) {
try {
conn = dataSource.getConnection();
System.out.println("get connection success");
} catch (SQLException e) {
System.out.println("get connection failure:" + e);
} finally {
connHolder.set(conn);
}
}
return conn;
} /**
* 关闭数据库连接
*/
public static void closeConnection() {
Connection conn = connHolder.get();
if (conn != null) {
try {
conn.close();
System.out.println("close connection success");
} catch (SQLException e) {
System.out.println("close connection failure:" + e);
throw new RuntimeException(e);
} finally {
connHolder.remove();
}
}
} }

线程池c3p0和dbcp2的配置初始化实例的更多相关文章

  1. SpringBoot线程池的创建、@Async配置步骤及注意事项

    最近在做订单模块,用户购买服务类产品之后,需要进行预约,预约成功之后分别给商家和用户发送提醒短信.考虑发短信耗时的情况所以我想用异步的方法去执行,于是就在网上看见了Spring的@Async了. 但是 ...

  2. 【玩转SpringBoot】异步任务执行与其线程池配置

    同步代码写起来简单,但就是怕遇到耗时操作,会影响效率和吞吐量. 此时异步代码才是王者,但涉及多线程和线程池,以及异步结果的获取,写起来颇为麻烦. 不过在遇到SpringBoot异步任务时,这个问题就不 ...

  3. java多线程详解(7)-线程池的使用

    在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, 这样频繁创建线程就会大大降低系 ...

  4. 从源代码分析Universal-Image-Loader中的线程池

    一般来讲一个网络访问就需要App创建一个线程来执行,但是这也导致了当网络访问比较多的情况下,线程的数目可能积聚增多,虽然Android系统理论上说可以创建无数个线程,但是某一时间段,线程数的急剧增加可 ...

  5. Universal-Image-Loader完全解析--从源代码分析Universal-Image-Loader中的线程池

    一般来讲一个网络访问就需要App创建一个线程来执行,但是这也导致了当网络访问比较多的情况下,线程的数目可能积聚增多,虽然Android系统理论上说可以创建无数个线程,但是某一时间段,线程数的急剧增加可 ...

  6. Java 线程池(ThreadPoolExecutor)原理分析与使用

    在我们的开发中"池"的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 使用线程池的好处 1.降低资源消耗 可以重复利用 ...

  7. Tomcat系列(8)——Tomcat运行模式连接数和线程池

    Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据:然后分配线程让Engine(也就是Servlet容器)来处理这个请求,并把产生的Reques ...

  8. Java线程池(ThreadPoolExecutor)原理分析与使用

    在我们的开发中"池"的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 使用线程池的好处 1.降低资源消耗 可以重复利用 ...

  9. Java并发(四)线程池使用

    上一篇博文介绍了线程池的实现原理,现在介绍如何使用线程池. 目录 一.创建线程池 二.向线程池提交任务 三.关闭线程池 四.合理配置线程池 五.线程池的监控 线程池创建规范 一.创建线程池 我们可以通 ...

随机推荐

  1. How to make a combo box with fulltext search autocomplete support?

    I would like a user to be able to type in the second or third word from a TComboBoxitem and for that ...

  2. 220V和380V电器设备电流计算方法

    220V和380V电器设备电流计算方法 1)单相电机电流=功率/(电压*功率因数*效率): 2)三相电机电流=功率/(1.732*电压*功率因数*效率): 3)空载电流为额定电流的30-50%左右: ...

  3. erlang 大神

    http://blog.csdn.net/erlib/article/details/46655905

  4. 小道消息:CSDN社区产品重大更新

    Hi,小伙伴们: 悄悄给大家透露个消息:CSDN社区将要有重大更新. 都有哪些呢?各自是:新极客头条.Ink.博乐 是不是后面两个比較眼生?不要着急,那但是我们的重中之重.我来给大家一一道来-- 先来 ...

  5. Ubuntu删除文件夹的命令

    1. 删除文件夹的内容包括文件夹: rm -rf 文件夹的名字       (-r 是 循环的意思, f是不询问的意思) 2 .删除文件夹的内容不包括文件夹: rm -rf  文件夹的名字/*     ...

  6. easyui icon的使用相关

    easyui的默认图标有以下这些: .icon-blank{ background:url('icons/blank.gif') no-repeat; } .icon-add{ background: ...

  7. matlab从文件夹名中获得该文件夹下所图像文件名

    function [s,nameC]=get_FileNameFromFolderPath(path) % 函数调用:[s,nameC]=get_FileNameFromFolderPath(path ...

  8. webapp开发基础

    1.首先我们来看看webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用   <meta content="width=device-wid ...

  9. 【python】gevent学习

    之前测试了stackless,感觉不太好. 不过python作为最火的脚本语言,还是吸引力难挡. python的协程方案,除了stackless,还有greenlet, 相应的事件框架也有gevent ...

  10. JS-HTML DOM remove() 方法

    定义和用法 remove() 方法用于从下拉列表删除选项. 语法 selectObject.remove(index) 说明该方法从选项数组的指定位置移除 <option> 元素.如果指定 ...