文档章节

测试发现commons-dbcp2没有缓存Connection对象

zhxdong95
 zhxdong95
发布于 2017/05/25 20:08
字数 1185
阅读 22
收藏 0

由于项目需要用到DataSource,自然而然想到的就是apache的comments-dbcp!因为用的是JDK7,自然而然引用的就是commons-dbcp2-2.1.1.jar。在使用的过程中想到了之前写的一个测试redis.clients.jedis.JedisPool的代码,就把直接拿过来修改一下跑了一下,结果发现Connection对象没有缓存到池中!!!!

首先检测自己的代码,继续查找原因……始终结果一样!

最后想到了换成1.4版本的,测试结果是预期想要的!

现贴出测试代码请各位替我把把关!

public class BasicDataSourceForMysqlTest {
    private static final String url = "jdbc:mysql://127.0.0.1:3306/test";
    private static final String username = "root";
    private static final String password = "";
    private static final String driverClassName = "com.mysql.jdbc.Driver";

    private static org.apache.commons.dbcp2.BasicDataSource dataSource;

    /*dataSource = new BasicDataSource();
        dataSource = new BasicDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setInitialSize(5);
        dataSource.setMaxIdle(5);
        dataSource.setMinIdle(5);
        dataSource.setValidationQuery("select 1;");*/
    static {
        java.util.Properties props = new java.util.Properties();
        props.put("driverClassName", driverClassName);
        props.put("url", url);
        props.put("username", username);
        props.put("password", password);
        props.put("minIdle", 5);
        props.put("mzxIdle", 5);
        props.put("maxActive", 5);
        props.put("initialSize", 5);
        props.put("logAbandoned", true);
        props.put("removeAbandoned", true);
        props.put("maxWait", 500);
        props.put("validationQuery", "select 1;");
        try {
            dataSource = org.apache.commons.dbcp2.BasicDataSourceFactory.createDataSource(props);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        final java.util.Set<String> set = new java.util.HashSet<>();
        int count = 0;
        while (count <= 10) {
            int num = 5;
            final java.util.concurrent.CountDownLatch startSignal = new java.util.concurrent.CountDownLatch(num);
            try {
                Thread.sleep(600);
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }
            for (int i = 0; i < num; i++) {
                new Thread("testThread_" + (i + 1)) {
                    @Override
                    public void run() {
                        try {
                            startSignal.countDown();
                            java.sql.Connection client = dataSource.getConnection();
                            set.add(client.hashCode() + "");
                            try {
                                System.out.println(getName() + "__" + dataSource.getNumActive() + "---" + dataSource.getNumIdle() + "---" + dataSource.getInitialSize());
                                System.out.println(client.hashCode());
                            } finally {
                                client.close();
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }.start();
            }
            try {
                startSignal.await();
            } catch (InterruptedException e) {
            }
            System.out.println("start " + count);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
            count++;
        }
        System.err.println("Over ... " + set.toString() + "_____" + set.size());

        try {
            dataSource.close();
        } catch (java.sql.SQLException e) {
            e.printStackTrace();
        }
    }

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-dbcp2</artifactId>
			<version>2.1.1</version>
		</dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>

1.4版本的测试结果,也是预期测试结果!

start 0
testThread_3__2---0---0
testThread_4__2---0---0
223589918
510850432
testThread_5__1---2---0
64319410
testThread_2__1---3---0
131974647
testThread_1__1---4---0
1894768425
testThread_1__2---1---0
1894768425
testThread_3__3---1---0
testThread_2__3---1---0
64319410
start 1
131974647
testThread_4__1---3---0
510850432
testThread_5__1---4---0
223589918
testThread_1__2---2---0
testThread_2__2---2---0
510850432
testThread_4__3---2---0
223589918
131974647
start 2
testThread_5__1---3---0
510850432
testThread_3__1---4---0
131974647
testThread_2__3---1---0
testThread_3__3---1---0
223589918
testThread_1__3---1---0
131974647
start 3
testThread_4__4---1---0
64319410
510850432
testThread_5__1---4---0
223589918
testThread_2__3---1---0
testThread_3__3---1---0
64319410
testThread_1__3---1---0
510850432
223589918
start 4
testThread_4__3---1---0
131974647
testThread_5__2---3---0
1894768425
testThread_2__2---2---0
testThread_1__2---2---0
1894768425
131974647
testThread_3__3---2---0
223589918
start 5
testThread_4__1---3---0
131974647
testThread_5__1---4---0
1894768425
testThread_2__1---1---0
131974647
testThread_1__2---1---0
1894768425
testThread_4__2---2---0
223589918
start 6
testThread_5__1---3---0
131974647
testThread_3__1---4---0
510850432
testThread_2__2---2---0
131974647
testThread_1__2---2---0
510850432
testThread_3__2---3---0
223589918
start 7
testThread_4__2---3---0
510850432
testThread_5__2---3---0
223589918
testThread_1__1---1---0
223589918
testThread_2__2---1---0
1894768425
testThread_4__2---1---0
testThread_3__3---1---0
510850432
start 8
testThread_5__2---3---0
223589918
131974647
testThread_2__2---2---0
testThread_1__2---2---0
131974647
223589918
testThread_3__1---3---0
510850432
start 9
testThread_4__1---3---0
223589918
testThread_5__1---4---0
131974647
testThread_2__2---1---0
223589918
testThread_1__2---1---0
131974647
testThread_3__2---2---0
510850432
start 10
testThread_5__2---2---0
1894768425
testThread_4__1---4---0
64319410
Over ... [1894768425, 64319410, 223589918, 131974647, 510850432]_____5

2.1和2.1.1的测试结果

start 0
testThread_2__4---0---0
1510417198
testThread_3__4---0---0
1664207618
testThread_1__4---0---0
177655599
testThread_4__4---0---0
855383063
testThread_5__1---4---0
624427163
start 1
testThread_1__5---0---0
509459080
testThread_3__5---0---0
461456971
testThread_2__5---0---0
1143862280
testThread_4__2---3---0
1923254538
testThread_5__1---4---0
215165522
testThread_2__3---2---0
1337836835
testThread_1__3---2---0
869901755
testThread_3__4---1---0
370127509
start 2
testThread_4__2---3---0
1620402051
testThread_5__1---4---0
1857143550
testThread_2__4---1---0
1213238765
start 3
testThread_3__4---1---0
1369335764
testThread_1__4---1---0
546695090
testThread_5__3---2---0
1493347140
testThread_4__4---0---0
1991424296
testThread_1__4---1---0
1703954167
start 4
testThread_2__3---2---0
1663252024
testThread_3__3---2---0
492942072
testThread_4__3---2---0
2032977625
testThread_5__1---4---0
1707791737
testThread_2__4---1---0
1235983733
testThread_1__4---1---0
569283100
testThread_3__3---2---0
1279460130
start 5
testThread_4__2---3---0
1641427189
testThread_5__1---4---0
891836161
testThread_1__3---2---0
1637289197
start 6
testThread_3__4---1---0
64081321
testThread_5__4---1---0
431404444
testThread_2__3---2---0
709698036
testThread_4__1---4---0
1076326904
testThread_1__4---1---0
2022316086
testThread_3__4---1---0
842776333
start 7
testThread_4__3---2---0
670897142
testThread_5__2---3---0
279713436
testThread_2__2---3---0
1471810322
testThread_1__4---1---0
1134728957
testThread_3__4---1---0
1734794939
testThread_2__4---1---0
313064454
start 8
testThread_4__3---2---0
1772550211
testThread_5__2---4---0
190755917
testThread_2__4---1---0
testThread_3__4---1---0
1027738753
1256624859
testThread_1__4---1---0
1739820615
start 9
testThread_4__4---1---0
994248850
testThread_5__2---3---0
437312607
testThread_1__3---2---0
348190607
testThread_3__3---2---0
testThread_2__3---1---0
testThread_4__4---1---0
1691184586
287765893
start 10
637816509
testThread_5__1---4---0
2138472547
Over ... [1471810322, 287765893, 1703954167, 2138472547, 1510417198, 624427163, 1739820615, 891836161, 492942072, 64081321, 437312607, 370127509, 1027738753, 1664207618, 709698036, 215165522, 569283100, 1663252024, 1337836835, 279713436, 546695090, 1637289197, 1707791737, 509459080, 1076326904, 1213238765, 1279460130, 177655599, 637816509, 1620402051, 1235983733, 1256624859, 431404444, 348190607, 461456971, 1772550211, 842776333, 994248850, 1991424296, 1734794939, 1641427189, 1143862280, 1923254538, 869901755, 1369335764, 855383063, 1691184586, 1493347140, 313064454, 1134728957, 190755917, 2022316086, 1857143550, 2032977625, 670897142]_____55

 

© 著作权归作者所有

zhxdong95
粉丝 0
博文 4
码字总数 2772
作品 0
西安
程序员
私信 提问
Apache Commons DBCP 2.2.0 发布

DBCP (Database Connection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。 更新内容: 将Apache Commons Pool从2.4.2更新到2.5.0。修复D...

淡漠悠然
2017/12/28
1K
12
DBCP2 的 org.apache.commons.dbcp2.PoolableConnection 示例

DBCP2 是基于 Commons Pool 2 的数据库连接池实现,提供高性能的 JDBC 连接封装,支持 JMX 和其他特性。使用 DBCP2 我们还需要以下内容: DBCP2 Apache Commons Library Pool2 Apache Common...

红薯
2015/01/20
2K
2
activemq 5.13.2 jdbc 数据库持久化 异常 找不到驱动程序

配置activemq 5.13.2 数据库持久化的时候,首先将mysql数据库驱动拷贝到activemq 的lib目录下, 然后配置activemq.xml 文件 增加两个配置点: 1, <persistenceAdapter> <jdbcPersistenceAda...

Atom_me
2016/04/18
469
3
捏造的信仰/hydrogen-dao

#hydrogen-dao hydrogen-dao 是一个 Java 的轻量级的数据库访问库,依赖标准的 JDBC 接口。主要功能有: 连接池管理,状态查看 跨数据库的事务 根据参数值来动态组装 select/insert/update/d...

捏造的信仰
2015/03/06
0
0
解决dbcp数据库连接池错误

使用dbcp数据库连接池时报错 java.lang.NoClassDefFoundError: org/apache/commons/pool2/PooledObjectFactory 原因:缺少commons-pool2-2.4.2.jar commons-dbcp2-2.1.1.jar 本文转自爱情897......

技术小胖子
2017/11/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式架构 实现分布式锁的常见方式

一、我们为什么需要分布式锁? 在单机时代,虽然不需要分布式锁,但也面临过类似的问题,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制...

太猪-YJ
39分钟前
3
0
GitLab Docker 安装记录

安装环境 环境Centos7.4 64 1.拉取镜像文件 docker pull gitlab/gitlab-ce:latest 2.docker 安装 git.zddts.com 为访问域名或换成可以访问的IP docker run -d --hostname git.***.com -p ......

侠者圣
今天
0
0
部署kubernates dashboard

参考官方文档: https://github.com/kubernetes/dashboard 直接部署官方默认的dashboard: kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/r......

猫海豚
今天
0
0
Docker中Redis的安装

一、下载镜像 docker pull redis 二、创建外挂目录及配置 mkdir /opt/docker/redismkdir /opt/docker/redis/confmkdir /opt/docker/redis/data 三、安装 docker run -d --name compose_r......

闊苡訆涐囍醣
今天
0
0
JNI内存泄露处理方法汇总

在c++中new的对象,如果不返回java,必须用release掉,否则内存泄露。包括NewStringUTF,NewObject。如果返回java不必release,java会自己回收。   jstring jstr = env->NewStringUTF((*p)....

shzwork
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部