`
wush121
  • 浏览: 13106 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

几种Java数据库连接池实现(三)<2>

    博客分类:
  • Java
 
阅读更多
ackage pool;

//连接池调度线程
public class FactoryMangeThread implements Runnable {
    ConnectionFactory cf = null;

    long delay = 1000;

    public FactoryMangeThread(ConnectionFactory obj) {
        cf = obj;
    }

    /*
    * (non-Javadoc)
    *
    * @see java.lang.Runnable#run()
    *
    */
    public void run() {
        while (true) {
            try {
                Thread.sleep(delay);
            } catch (InterruptedException e) {
            }
            System.out.println("eeeee");
            // 判断是否已经关闭了工厂,那就退出监听
            if (cf.isCreate())
                cf.schedule();
            else
                System.exit(1);
        }
    }
}



package pool;

//连接池工厂参数
public class FactoryParam {
    // 最大连接数
    private int MaxConnectionCount = 4;

    // 最小连接数
    private int MinConnectionCount = 2;

    // 回收策略
    private int ManageType = 0;

    public FactoryParam() {
    }

    /**
    *
    * 构造连接池工厂参数的对象
    *
    * @param max
    *            最大连接数
    *
    * @param min
    *            最小连接数
    *
    * @param type
    *            管理策略
    *
    */
    public FactoryParam(int max, int min, int type) {
        this.ManageType = type;
        this.MaxConnectionCount = max;
        this.MinConnectionCount = min;
    }

    /**
    *
    * 设置最大的连接数
    *
    * @param value
    *
    */
    public void setMaxConn(int value) {
        this.MaxConnectionCount = value;
    }

    /**
    *
    * 获取最大连接数
    *
    * @return
    *
    */
    public int getMaxConn() {
        return this.MaxConnectionCount;
    }

    /**
    *
    * 设置最小连接数
    *
    * @param value
    *
    */
    public void setMinConn(int value) {
        this.MinConnectionCount = value;
    }

    /**
    *
    * 获取最小连接数
    *
    * @return
    *
    */
    public int getMinConn() {
        return this.MinConnectionCount;
    }

    public int getType() {
        return this.ManageType;
    }
}


===
package pool;

import java.sql.*;

public class testmypool {
    public void test1() {
        String user = "DevTeam";
        String password = "DevTeam";
        String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
        String url = "jdbc:odbc:gfqh2";
        ConnectionParam param = new ConnectionParam(driver, url, user, password);
        ConnectionFactory cf = null;// new ConnectionFactory(param, new
        // FactoryParam());
        try {
            cf = new ConnectionFactory(param, new FactoryParam());
            Connection conn1 = cf.getFreeConnection();
            Connection conn2 = cf.getFreeConnection();
            Connection conn3 = cf.getFreeConnection();
            Statement stmt = conn1.createStatement();
            ResultSet rs = stmt.executeQuery("select * from requests");
            if (rs.next()) {
                System.out.println("conn1 y");
            } else {
                System.out.println("conn1 n");
            }
            stmt.close();
            conn1.close();
            Connection conn4 = cf.getFreeConnection();
            Connection conn5 = cf.getFreeConnection();
            stmt = conn5.createStatement();
            rs = stmt.executeQuery("select * from requests");
            if (rs.next()) {
                System.out.println("conn5 y");
            } else {
                System.out.println("conn5 n");
            }
            conn2.close();
            conn3.close();
            conn4.close();
            conn5.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                cf.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        String user = "DevTeam";
        String password = "DevTeam";
        String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
        String url = "jdbc:odbc:gfqh2";
        ConnectionParam param = new ConnectionParam(driver, url, user, password);
        ConnectionFactory cf = null;
        // new ConnectionFactory(param,new FactoryParam());
        try {
            cf = new ConnectionFactory(param, new FactoryParam());
            // ConnectionFactory cf1 = new ConnectionFactory(param,new
            // FactoryParam());
            Connection conn1 = null;
            long time = System.currentTimeMillis();
            for (int i = 0; i < 10; i++) {
                conn1 = cf.getFreeConnection();
                Statement stmt = conn1.createStatement();
                ResultSet rs = stmt.executeQuery("select * from requests");
                if (rs.next()) {
                    System.out.println("conn1 y");
                } else {
                    System.out.println("conn1 n");
                }
                conn1.close();
            }
            System.out.println("pool:" + (System.currentTimeMillis() - time));
            time = System.currentTimeMillis();
            Class.forName(param.getDriver()).newInstance();
            for (int i = 0; i < 10; i++) {
                conn1 = DriverManager.getConnection(param.getUrl(), param
                        .getUser(), param.getPassword());
                Statement stmt = conn1.createStatement();
                ResultSet rs = stmt.executeQuery("select * from requests");
                if (rs.next()) {
                    System.out.println("conn1 y");
                } else {
                    System.out.println("conn1 n");
                }
                conn1.close();
            }
            System.out
                    .println("no pool:" + (System.currentTimeMillis() - time));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                cf.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
分享到:
评论

相关推荐

    java数据库连接池

    Java数据库连接池(JDBC Connection Pool)是一种管理数据库连接的技术,它允许应用程序重复使用已经存在的数据库连接,而不是每次需要时都创建新的连接。这大大提高了应用程序的性能和效率,因为创建和销毁数据库...

    JAVA数据库连接池类

    本篇文章将深入解析一个自定义的JAVA数据库连接池类,帮助开发者更好地理解和运用这一关键技术。 首先,连接池的基本思想是预先创建一定数量的数据库连接,并存储在一个集合(如Vector)中,供应用程序按需获取和...

    TOMCAT中数据库连接池的几种配置方法_TOMCAT中数据库连接池的几种配置方法_

    本文将详细讲解在Tomcat中配置数据库连接池的几种常见方法,帮助开发者实现高效、稳定的数据库访问。 一、Apache Commons DBCP Apache Commons DBCP是Apache组织提供的一款开源数据库连接池组件,它基于Jakarta-...

    java项目开发实践经验之二:几种常见数据库连接池的使用比较(转)

    本篇文章将探讨几种常见的数据库连接池的使用比较,包括Proxool、DBCP、C3P0,并通过配置文件(如`proxool.xml`、`dbcp.xml`和`c3p0.xml`)来展示它们的配置细节。 首先,我们来看Proxool,它是一个轻量级的数据库...

    Java数据库连接池的原理与应用.pdf

    Java数据库连接池的原理与应用 在Java开发领域,数据库连接池(Database Connection Pool,简称DBCP)是一种提高数据库访问性能、降低资源消耗的重要技术。它通过预先建立一定数量的数据库连接,存储在一个“池”中...

    java数据库连接池源码及使用示例

    总结来说,本资源提供了学习和实践Java数据库连接池的一个起点。通过分析源码并运行示例,你可以深入理解数据库连接池的实现细节,这将对提升Java应用的数据库性能有很大帮助。同时,这也是一次了解和比较不同连接池...

    Java各数据库连接池配置介绍

    Java数据库连接池是管理数据库连接的一种机制,它可以有效地复用数据库连接,避免每次数据库操作时创建和销毁连接的开销,从而提高了应用的性能。在Java中,有多种数据库连接池实现,包括C3P0、DBCP和Proxool等。 *...

    JAVA数据库连接池

    总的来说,Java数据库连接池是提高JSP网站性能的关键技术之一,它通过优化数据库连接的创建和管理,降低了系统资源的消耗,提升了网站的响应速度。正确理解和使用数据库连接池,是每个Java开发者必备的技能。

    java数据库连接池的资料

    Java数据库连接池是一种高效管理数据库连接的技术,它在Java应用程序中扮演着至关重要的角色。连接池的基本思想是预先创建一定数量的数据库连接,存储在内存中,当应用程序需要时,从池中获取一个已存在的连接,用完...

    java 数据库连接池

    Java数据库连接池是一种重要的技术,它在Java应用程序与数据库交互时起到了关键的作用。数据库连接池在多线程、高并发的环境下尤其重要,因为它能够有效地管理和重用数据库连接,从而提高系统性能,减少资源消耗。 ...

    数据库连接池驱动包_数据库连接池驱动包_

    Druid 是阿里巴巴开源的一个强大、全面且高性能的Java数据库连接池。它不仅提供了基础的连接池功能,还集成了监控、SQL解析、拦截器等功能,可以帮助开发者进行性能分析和问题定位。Druid 还支持多种数据库,包括 ...

    Spring下配置几种常用连接池

    HikariCP被誉为最快的Java数据库连接池,它的设计目标是提供最小的延迟和最大的并发性能。在Spring中配置HikariCP,首先需要添加依赖: ```xml &lt;dependency&gt; &lt;groupId&gt;com.zaxxer&lt;/groupId&gt; &lt;artifactId&gt;HikariCP...

    数据库连接池的配置与使用

    数据库连接池是现代应用程序开发中的重要组成部分,它有效地管理和复用数据库连接,提高了系统的性能和资源利用率。在Java Web开发中,C3P0和DBCP是常用的两种连接池实现。下面将详细介绍这两种连接池的配置与使用。...

Global site tag (gtag.js) - Google Analytics