线程池c3p0和dbcp2的配置初始化实例
一、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的配置初始化实例的更多相关文章
- SpringBoot线程池的创建、@Async配置步骤及注意事项
最近在做订单模块,用户购买服务类产品之后,需要进行预约,预约成功之后分别给商家和用户发送提醒短信.考虑发短信耗时的情况所以我想用异步的方法去执行,于是就在网上看见了Spring的@Async了. 但是 ...
- 【玩转SpringBoot】异步任务执行与其线程池配置
同步代码写起来简单,但就是怕遇到耗时操作,会影响效率和吞吐量. 此时异步代码才是王者,但涉及多线程和线程池,以及异步结果的获取,写起来颇为麻烦. 不过在遇到SpringBoot异步任务时,这个问题就不 ...
- java多线程详解(7)-线程池的使用
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, 这样频繁创建线程就会大大降低系 ...
- 从源代码分析Universal-Image-Loader中的线程池
一般来讲一个网络访问就需要App创建一个线程来执行,但是这也导致了当网络访问比较多的情况下,线程的数目可能积聚增多,虽然Android系统理论上说可以创建无数个线程,但是某一时间段,线程数的急剧增加可 ...
- Universal-Image-Loader完全解析--从源代码分析Universal-Image-Loader中的线程池
一般来讲一个网络访问就需要App创建一个线程来执行,但是这也导致了当网络访问比较多的情况下,线程的数目可能积聚增多,虽然Android系统理论上说可以创建无数个线程,但是某一时间段,线程数的急剧增加可 ...
- Java 线程池(ThreadPoolExecutor)原理分析与使用
在我们的开发中"池"的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 使用线程池的好处 1.降低资源消耗 可以重复利用 ...
- Tomcat系列(8)——Tomcat运行模式连接数和线程池
Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据:然后分配线程让Engine(也就是Servlet容器)来处理这个请求,并把产生的Reques ...
- Java线程池(ThreadPoolExecutor)原理分析与使用
在我们的开发中"池"的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 使用线程池的好处 1.降低资源消耗 可以重复利用 ...
- Java并发(四)线程池使用
上一篇博文介绍了线程池的实现原理,现在介绍如何使用线程池. 目录 一.创建线程池 二.向线程池提交任务 三.关闭线程池 四.合理配置线程池 五.线程池的监控 线程池创建规范 一.创建线程池 我们可以通 ...
随机推荐
- ELM327 OBD to RS232 Interpreters
http://elmelectronics.com/DSheets/ELM327DS.pdf
- QMsgPack的用法DEMO
QMsgPack的用法DEMO 引用单元文件: uses qstring, qmsgpack, qjson; 演示一: procedure TForm2.Button10Click(Sender: T ...
- [Android 新特性] 改进明显 Android 4.4系统新特性解析
Android 4.3发布半年之后,Android 4.4随着新一代Nexus5一起出现在了用户的面前,命名为从之前的Jelly Bean(果冻豆)换成了KitKat(奇巧).这个新系统究竟都有怎样的 ...
- Python学习(四)数据结构 —— dict
词典类型 dict 字典由键(key)和对应值(value)成对组成.字典也被称作关联数组或哈希表. dict 赋值 dict 整体放在花括号{}中,每个键与值用冒号隔开(:),每对用逗号分割: d ...
- 从头開始写项目Makefile(十):make内嵌函数及make命令显示
[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 这一节我们讲一下make的函数,在之前的章节已经讲到了几 ...
- 第一章 consul简介
1.consul的作用 服务发现 Consul clients提供服务(例如API) 其他的client发现服务的提供者(通过DNS或http,应用可以轻松的发现他们所依赖的服务) 健康检查 Key- ...
- 倾斜摄影三维建模软件photoscan教程 [转]
PhotoScan是一款基于影响自动生成高质量三维模型的优秀软件,这对于3D建模需求来说实在是一把利器. PhotoScan无需设置初始值,无须相机检校,它根据最新的多视图三维重建技术,可对任意照片进 ...
- 标准C++类std::string的内存共享和Copy-On-Write技术
标准C++类std::string的 内存共享和Copy-On-Write技术 陈皓 1. 概念 Scott Meyers在<More Effective C++>中举了个例子,不知你是 ...
- 设计模式实例(Lua)笔记之四(Builder 模式)
1.描写叙述: 又是一个周三,快要下班了,老大突然又拉住我,喜滋滋的告诉我"牛叉公司非常惬意我们做的模型,又签订了一个合同,把奔驰.宝马的车辆模型都交给我我们公司制作了,只是这次又 ...
- window yii2 安装插件 报yiisoft/yii2 2.0.x-dev requires ext-mbstring错
Problem 1 - yiisoft/yii2 2.0.x-dev requires ext-mbstring * -> the requested PHP extens ion mbstri ...