最近一个项目遇到了一个问题,tomcat跑一段时间后,项目就会造成类似死锁状态,所有的servlet都无法访问,造成网络堵塞的现象。我项目中使用的连接池是c3p0,网上有人说是c3p0的bug,不知是真是假。我将连接池换成dbcp配置后,问题解决。至于到底是不是c3p0的bug,不得而知。但有一点可以肯定的是,的确是c3p0惹的祸。

下面是dbcp连接池的一个小例子,它包含了连接池管理类,连接池配置文件和一个测试类讲解如何获取链接和如何关闭链接。现在详述之。

1.相关的依赖包

使用jar包:commons-dbcp-1.4.jar、commons-pool-1.6.jar、commons-logging-1.1.3.jar,另外还有数据库的jdbc驱动,适用java6及以上平台。

2.连接池管理类

<span style="font-size:14px;">package cn.songxinqiang.samples.commonsdbcp.util;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory;
/*** tomcat数据库连接池管理类<br>* 使用为tomcat部署环境<br>* 需要在类路径下准备数据库连接配置文件dbcp.properties* * @author 许助云* @mail261530219@qq.com* * @time 2015-06-24* */
public class DBManager {private static final Log log = LogFactory.getLog(DBManager.class);private static final String configFile = "dbcp.properties";private static DataSource dataSource;static {Properties dbProperties = new Properties();try {dbProperties.load(DBManager.class.getClassLoader().getResourceAsStream(configFile));dataSource = BasicDataSourceFactory.createDataSource(dbProperties);Connection conn = getConn();DatabaseMetaData mdm = conn.getMetaData();log.info("Connected to " + mdm.getDatabaseProductName() + " "+ mdm.getDatabaseProductVersion());if (conn != null) {conn.close();}} catch (Exception e) {log.error("初始化连接池失败:" + e);}}private DBManager() {}/*** 获取链接,用完后记得关闭* * @see {@link DBManager#closeConn(Connection)}* @return*/public static final Connection getConn() {Connection conn = null;try {conn = dataSource.getConnection();} catch (SQLException e) {log.error("获取数据库连接失败:" + e);}return conn;}/*** 关闭连接* * @param conn*            需要关闭的连接*/public static void closeConn(Connection conn) {try {if (conn != null && !conn.isClosed()) {conn.setAutoCommit(true);conn.close();}} catch (SQLException e) {log.error("关闭数据库连接失败:" + e);}}
}</span>

3.连接池配置文件

在src根目录下面新建一个配置文件dbcp.properties

<span style="font-size:14px;">#数据库驱动
driverClassName=com.mysql.jdbc.Driver
#数据库连接地址
url=jdbc:mysql://localhost/ctg
#用户名
username=root
#密码
password=123456
#连接池的最大数据库连接数。设为0表示无限制
maxActive=30
#最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连
#接将被标记为不可用,然后被释放。设为0表示无限制
maxIdle=10
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制
maxWait=1000
#超过removeAbandonedTimeout时间后,是否进 行没用连接(废弃)的回收(默认为false,调整为true)
removeAbandoned=true
#超过时间限制,回收没有用(废弃)的连接(默认为 300秒,调整为180)
removeAbandonedTimeout=180</span>

4.测试类

测试连接池工作效率,同时演示怎样获取连接和关闭连接

<span style="font-size:14px;">public class ConnectionSource {public static void main(String[] args){long begin=System.currentTimeMillis();for(int i=0;i<10000;i++){Connection conn=DBManager.getConn();System.out.print(i+"   ");DBManager.closeConn(conn);}long end=System.currentTimeMillis();System.out.println("用时:"+(end-begin));}
}</span>

java配置dbcp连接池(数据库连接池)示例相关推荐

  1. Java通过DBCP连接池方法实现JDBC代码案例

    Java和大数据系列 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等 ...

  2. spring 数据库 链接db2_Druid,Java语言中最好的数据库连接池

    Druid是Java语言中最好的数据库连接池,这话不是我说的,是Druid官方文档自己这样描述的,这是何等的自信! 连接池的作用,跟线程池的作用大同小异,都是为了减少频繁的创建销毁连接IO,提升性能. ...

  3. SpringBoot2数据库连接池自动装配原理,以及如何配置使用其他的数据库连接池(druid)为例

    SpringBoot2数据库连接池自动装配原理 一.SpringBoot的数据库连接池的相关默认 二.SpringBoot默认的数据库连接池,以及自动装配原理 三.使用其他的数据库连接池:例如Drui ...

  4. 【java基础知识】编写数据库连接池

    之前一直用JDBC,现在接触到了DataSource.网上查到数据库连接池工具最好用的是Druid.下面分别介绍一下. 1.DataSource   数据源 什么是数据源: JDBC2.0提供了jav ...

  5. java连接mysql数据库连接池_java使用原生MySQL实现数据的增删改查以及数据库连接池技术...

    一.工具类及配置文件准备工作 1.1 引入jar包 使用原生MySQL,只需要用到MySQL连接的jar包,maven引用方式如下: mysql mysql-connector-java 5.1.48 ...

  6. oracle中多个数据库连接池,数据库连接池为什么要建立多个连接

    一般程序在访问数据库的时候,都是使用数据库连接池,比如:DBCP,C3P0等等.至于为什么使用连接池,大家都知道,就是为了避免频繁的与数据库建立连接, 因为建立连接是一个比较耗时的操作.而连接池的配置 ...

  7. mysql dbcp 配置文件_数据库连接池DBCP使用方式

    数据库连接池DBCP使用方式 概念 开源数据源实现,使用这些数据库连接池后,我们在项目开发中就不需要编写连接数据库的代码了. 开源数据源包含DBCP.C3P0.Druid等 DBCP Java使用实例 ...

  8. 数据库连接池 DBCP和c3p0数据库连接池

    一.数据库连接池 1. 什么是连接池 传统的开发模式下,Servlet处理用户的请求,找Dao查询数据,dao会创建与数据库之间的连接,完成数据查询后会关闭数据库的链接. 这样的方式会导致用户每次请求 ...

  9. Java Web 03 — JDBC_02(数据库连接池_C3P0_Druid、JdbcTemplate)

    文章目录 六:数据库连接池 6.1 概念 6.2 c3p0 6.3 Druid 6.4 DBCP(Apache) 6.5 DBUtils(快速创建对象,并以集合形式返回) 七.Spring JDBC ...

最新文章

  1. 计算机算法设计与分析一
  2. python浅拷贝_Python中的浅拷贝和深拷贝
  3. 指令系统——数据寻址(1)(详解)
  4. 技术人员转行产品经理读这些书就够了
  5. 二叉树节点数目计算的两种思路
  6. 数据库运维家中常备:上限约400MB/s,比COPY等工具还好用的数据利器
  7. linux查看db2存储过程,DB2查看存储过程里SQL语句的执行情况
  8. jsx怎么往js里传参数_给js文件传参数(详解)
  9. 基于JAVA+SpringBoot+Mybatis+MYSQL的婚纱影楼摄影网站
  10. 怎样才能在前端职场中拥有更强的竞争力?
  11. bzoj 2844: albus就是要第一个出场
  12. visio画图(保存为pdf,不留空白)
  13. 光环PMP:超凡IT经理人的“六重修炼”专题讲座
  14. 学生考勤系统设计mysql_学生考勤系统的设计与实现(Eclipse,MySQL)
  15. h5-吸顶效果的实现方法
  16. android studio中Option + Enter选择了disable 'introduce local variable'
  17. 吐槽智能手机上那些不爽的事
  18. maven~本地仓库的指定
  19. 评价网络舆情系统的eCIA方法---灵玖网络舆情
  20. pyhton 对列表按照日期进行排序

热门文章

  1. vimdiff解决git merge冲突
  2. android的UI性能优化
  3. Python random模块(获取随机数)常用方法和使用例子
  4. 国内的IT生意还真TMD难做,想生存发展大家还得多思考一下,出路在哪里?稍微迷茫了一点点...
  5. ChatGLM-6B 安装试用
  6. 【软件工具】之下载微软官方正版 windows 系统
  7. (附源码)springboot家庭财务分析系统 毕业设计 641323
  8. RocketMQ消息消费源码分析(二消息的消费)
  9. javascript大全
  10. 探店「无聊猿」BAYC 主题餐厅:食物都很棒,口味超预期,有点小贵