`

Proxool 连接池基本操作

 
阅读更多

大家都知道,现在假如要连接数据库,都要用到连接池

现在最优秀的,也是OpenSource的连接池,就数Proxool了,那我们就开始把

官网:

http://proxool.sourceforge.net/index.html

 

我自己写了一个连接池,很粗糙,但也能加深对连接池的理解:

package com.chenhailong;

import com.chenhailong.exception.DBException;
import com.mysql.jdbc.Connection;

public interface ConnectionPool {

    public Connection getConnection() throws DBException;

    public void releaseConnection(Connection conn);

}
 
package com.chenhailong;

import java.sql.DriverManager;
import java.util.Vector;

import com.chenhailong.exception.DBException;
import com.mysql.jdbc.Connection;

/**
 * 
 * @author Administrator
 *
 */
public class DBConnectionPool implements ConnectionPool {

    private static Vector<Connection> pool;
    private final int POOL_MAX_SIZE = 20;
    private static final String url = "jdbc:mysql://localhost:3306/test";
    private static final String user = "root";
    private static final String password = "****";

    @Override
    public synchronized Connection getConnection() throws DBException {
        if (pool == null) {
            pool = new Vector<Connection>();
        }
        Connection conn;
        if (pool.isEmpty()) {
            conn = createConnection();
        } else {
            int last_idx = pool.size() - 1;
            conn = (Connection) pool.get(last_idx);
            pool.remove(pool.get(last_idx));
        }
        return conn;
    }

    public static Connection createConnection() throws DBException {
        Connection conn = null;
        try {
            Class.forName("org.gjt.mm.mysql.Driver");
            conn = (Connection) DriverManager
                    .getConnection(url, user, password);
            System.out.println("Success to connect the mysql");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

    @Override
    public synchronized void releaseConnection(Connection conn) {
        if (pool.size() > POOL_MAX_SIZE) {
            try {
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            pool.add(conn);
        }
    }

}
 
package com.chenhailong.exception;

public class DBException extends Exception {

    public DBException(){
        
    }
}

 

很简单,是把

 

我的当然比不上Proxool了

 

下面是关于Proxool的具体操作(如果有什么不明白的,请给我发站内信,我会常看)

 

/**
 * 
 */
package com.chenhailong;

import java.sql.Connection;


/**
 * @author Administrator
 *
 */
public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Connection conn = PoolManager.getConnectionByPerpertiesUtil();
        PoolManager.executeQuery(conn);
        Connection connXml = PoolManager.getConnectionByXMLUtil();
        PoolManager.executeQuery(connXml);
        Connection connProperty = PoolManager.getConnectionByPropertyUtil();
        PoolManager.executeQuery(connProperty);
        PoolManager.close(connXml);
        PoolManager.close(conn);
        PoolManager.close(connProperty);
    }

}

 

package com.chenhailong;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.ProxoolFacade;
import org.logicalcobwebs.proxool.admin.SnapshotIF;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
import org.logicalcobwebs.proxool.configuration.PropertyConfigurator;

/**
 * 
 * @author chenhailong
 * 2011-8-31
 * 下午5:12:07
 */
public class PoolManager {

    private static int activeCount = 0;

    public PoolManager() {
    }

    public static Connection getConnectionByPerpertiesUtil() {
        Connection conn = null;
        try {
            Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
            Properties pro = new Properties();
            pro.setProperty("proxool.maximum-connection-count", "20");
            pro.setProperty("proxool.house-keeping-test-sql", "select CURRENT_DATE");
            pro.setProperty("user", "root");
            pro.setProperty("password", "***");
            String alias = "properties";
            String driverClass = "org.gjt.mm.mysql.Driver";
            String driverUrl = "jdbc:mysql://localhost:3306/test";
            String url = "proxool." + alias + ":" + driverClass + ":" + driverUrl;
            conn = DriverManager.getConnection(url, pro);
            printSnapShot(alias);
            return conn;
        } catch (Exception ex) {
            ex.printStackTrace();
        } 
        return null;
    }

    public static Connection getConnectionByXMLUtil() {
        Connection conn = null;
        try {
            Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
            JAXPConfigurator.configure("proxool.xml", false);
            conn = DriverManager.getConnection("proxool.xml");
            printSnapShot("xml");
            return conn;
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

    public static Connection getConnectionByPropertyUtil() {
        Connection conn = null;
        try {
            Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
            PropertyConfigurator.configure("proxool.properties");
            conn = DriverManager.getConnection("proxool.property");
            printSnapShot("property");
            return conn;
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

    public static void printSnapShot(String alias) throws ProxoolException {
        SnapshotIF snapshot = ProxoolFacade.getSnapshot(alias);
        int currentActiveCount = snapshot.getActiveConnectionCount();
        int availableCount = snapshot.getAvailableConnectionCount();
        int maxCount = snapshot.getMaximumConnectionCount();
        if (activeCount != currentActiveCount) {
            System.out.println("Active count :" + currentActiveCount);
            System.out.println("Available count :" + availableCount);
            System.out.println("Max count :" + maxCount);
        }
    }

    public static void close(Connection conn) {
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void executeQuery(Connection conn) {
        Statement stat = null;
        ResultSet rs = null;
        try {
            // test so not use the preparedStatement
            stat = conn.createStatement();
            rs = stat.executeQuery("select * from test");
            while (rs.next()) {
                String id = rs.getString(1);
                String name = rs.getString(2);
                String age = rs.getString(3);
                String sex = rs.getString(4);
                String message = id + "\t" + name + "\t" + age + "\t" + sex;
                System.out.println(message);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                stat.close();
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }
    }

}
 
jdbc-0.proxool.alias=property
jdbc-0.proxool.driver-url=jdbc:mysql://localhost:3306/test
jdbc-0.proxool.driver-class=org.gjt.mm.mysql.Driver
jdbc-0.user=root
jdbc-0.password=***
jdbc-0.proxool.maximum-connection-count=20
jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE
 
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
	<proxool>
		<alias>xml</alias>
		<driver-url>jdbc:mysql://localhost:3306/test</driver-url>
		<driver-class>org.gjt.mm.mysql.Driver</driver-class>
		<driver-properties>
			<property name="user" value="root" />
			<property name="password" value="***" />
		</driver-properties>
		<maximum-connection-count>20</maximum-connection-count>
		<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
	</proxool>
</something-else-entirely>

 

 

1
0
分享到:
评论

相关推荐

    proxool连接池用户名密码加密

    总之,"proxool连接池用户名密码加密"是一个重要的安全实践,通过加密数据库连接的凭证,我们可以提高系统的安全性,保护数据免受未经授权的访问。正确地配置和使用这个功能,可以确保在享受数据库连接池带来的性能...

    proxool连接池使用详细说明

    Proxool连接池是数据库连接管理的一种解决方案,它允许应用程序高效地管理和复用数据库连接,以提高系统的性能和响应速度。下面将详细讲解Proxool连接池的使用方法及其核心概念。 1. **Proxool简介** Proxool是...

    proxool连接池配置文件

    项目实用的proxool连接池配置文件,每个标签都有注释,可以直接拿来使用

    在Hibernate中配置Proxool连接池

    本篇将详细介绍如何在Hibernate中配置Proxool连接池。 首先,我们需要在Spring的配置文件`applicationContext.xml`中设置SessionFactory Bean。SessionFactory是Hibernate的核心组件,它负责创建Session对象,而...

    Proxool连接池使用方法

    Proxool连接池使用方法 首先, 你要把下载 proxool 的 lib 下面所有的 jar 文件, 放到 WEB-INF/lib 下面, 另外, 把你的 jdbc driver 也放到相同的 lib,

    proxool连接池配置

    -- 连接池的别名 --&gt; &lt;alias&gt;DBPool&lt;/alias&gt; - &lt;!-- proxool只能管理由自己产生的连接 --&gt; &lt;driver-url&gt;jdbc:sqlserver://localhost:1433;dataBaseName=books&lt;/driver-url&gt; - &lt;!-- JDBC驱动程序 --&gt; ...

    proxool连接池配置详解

    ### Proxool连接池配置详解 #### 一、概述 Proxool是一个开源的轻量级Java数据库连接池实现,其主要目标是替代常见的数据库连接池解决方案,如C3P0或DBCP,并且提供了更加灵活和易于配置的特性。在实际应用中,...

    proxool连接池所涉及的jar包文件

    在本压缩包中,包含的是与Proxool连接池相关的MySQL驱动jar包,这将有助于在Java应用程序中建立与MySQL数据库的连接。 首先,我们来深入理解一下Proxool连接池。Proxool的核心功能是创建一个池化的数据库连接集合,...

    proxool连接池jar包

    `proxool连接池jar包`是一个包含Proxool数据库连接池技术的软件包。Proxool作为源码开放的项目,源自著名的开源平台SourceForge,它为Java开发者提供了一个高效且易于管理的数据库连接池解决方案。数据库连接池在多...

    ssh2简单案例,注解+proxool连接池+sf4j记录日志

    在这个"ssh2简单案例"中,我们将探讨如何结合注解、Proxool连接池和SF4J日志记录来构建一个SSH2注册登录系统。 首先,SSH2在Java中的实现通常通过JSch库来完成。JSch允许开发者在Java程序中执行命令、传输文件以及...

    Spring+Hibernate+Proxool连接池

    标题 "Spring+Hibernate+Proxool连接池" 涉及到的是在Java Web开发中,如何使用Spring框架集成Hibernate ORM框架,并结合Proxool作为数据库连接池的技术实践。这通常是为了提高应用性能,有效管理和复用数据库连接,...

    proxool数据库连接池实例(带监控功能)

    本文将详细介绍Proxool数据库连接池及其监控功能,通过一个实际的实例来展示其工作原理和使用方法。 Proxool是Apache软件基金会的一个开源项目,它提供了一个轻量级、高性能的数据库连接池解决方案。Proxool与其他...

    Proxool连接池jar包

    Proxool连接池是数据库连接管理的一个开源工具,它提供了一种高效且灵活的方式来管理和复用数据库连接,以提升应用程序的性能和响应速度。在Java应用程序中,尤其是在高并发环境下,数据库连接池扮演着至关重要的...

    proxool连接池

    **Proxool 连接池详解** Proxool 是一个高效、易用的数据库连接池,它通过提供中间代理层管理数据库连接,从而实现数据库连接的复用,提高应用程序的性能和效率。Proxool 的设计目标是为 Java 应用程序提供简单、...

    Hibernate Proxool连接池配置总结及常遇问题

    **Hibernate Proxool连接池配置详解** 在Java应用程序中,数据库连接池是管理数据库连接的一种高效方式,它可以显著提升系统性能,减少数据库资源的浪费。本文将深入探讨Hibernate与Proxool连接池的配置,以及在...

    Proxool连接池实例.zip

    "G2"可能是一个辅助类或者测试用例,可能包含了数据库操作的逻辑,比如执行SQL查询、事务处理等,以便展示在使用Proxool连接池时的正确操作方式。而"H"可能是另一个相关文件,可能是配置文件或者额外的代码部分,...

    基于ssh的proxool连接池配置

    在这里,我们通过`dataSource`属性引用了上面配置的数据源,这样Hibernate就能使用Proxool连接池进行数据库操作。 5. 在`hibernateProperties`中,我们设置了`hibernate.dialect`为`MySQLDialect`,表示使用的是...

    Spring2.5配置proxool连接池

    Spring2.5配置proxool连接池

    Struts2+spring+hibernate中的proxool连接池配置

    本文将详细介绍如何在Struts2+Spring+Hibernate的环境中配置Proxool连接池。 首先,理解Proxool的工作原理。Proxool是一个基于池化的JDBC代理,它维护着一个数据库连接池,当应用需要访问数据库时,可以从池中获取...

Global site tag (gtag.js) - Google Analytics