/*
*@author 我为J狂 建立日期 2007-4-18
*
*/
package net.blogjava.lzqdiy;
import java.net.URL;
import java.sql.*;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.ProxoolFacade;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
import org.logicalcobwebs.proxool.admin.SnapshotIF;
public class DBConnection
{
private static boolean initialized = false;
private static int activeCount = 0;
public static Connection getConnection() throws SQLException
{
Connection connection = null;
if (!initialized)
{
init();
}
connection = DriverManager.getConnection("proxool.Develop");
try
{
SnapshotIF snapshot = ProxoolFacade.getSnapshot("Develop", true);
int curActiveCount = snapshot.getActiveConnectionCount();// 获得活动连接数
int availableCount = snapshot.getAvailableConnectionCount();// 获得可得到的连接数
int maxCount = snapshot.getMaximumConnectionCount();// 获得总连接数
if (curActiveCount != activeCount)// 当活动连接数变化时输出信息
{
System.out.println("----------------------------------");
System.out
.println(curActiveCount + "(active) " + availableCount
+ "(available) " + maxCount + "(max)");
System.out.println("----------------------------------");
activeCount = curActiveCount;
}
} catch (ProxoolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
if (connection != null)
{
return connection;
} else
{
throw new NullPointerException(
"Didn't get connection, which probably means that no Driver accepted the URL");
}
}
private static void init()
{
String fileName = "proxool.xml";
URL resourceURL = null;
try
{
if (Thread.currentThread().getContextClassLoader() != null)
{
resourceURL = Thread.currentThread().getContextClassLoader()
.getResource(fileName);
}
if (resourceURL == null)
{
resourceURL = DBConnection.class.getClassLoader().getResource(
fileName);
}
JAXPConfigurator.configure(resourceURL.getFile(), false);
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
} catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ProxoolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
initialized = true;
}
}
*@author 我为J狂 建立日期 2007-4-18
*
*/
package net.blogjava.lzqdiy;
import java.net.URL;
import java.sql.*;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.ProxoolFacade;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
import org.logicalcobwebs.proxool.admin.SnapshotIF;
public class DBConnection
{
private static boolean initialized = false;
private static int activeCount = 0;
public static Connection getConnection() throws SQLException
{
Connection connection = null;
if (!initialized)
{
init();
}
connection = DriverManager.getConnection("proxool.Develop");
try
{
SnapshotIF snapshot = ProxoolFacade.getSnapshot("Develop", true);
int curActiveCount = snapshot.getActiveConnectionCount();// 获得活动连接数
int availableCount = snapshot.getAvailableConnectionCount();// 获得可得到的连接数
int maxCount = snapshot.getMaximumConnectionCount();// 获得总连接数
if (curActiveCount != activeCount)// 当活动连接数变化时输出信息
{
System.out.println("----------------------------------");
System.out
.println(curActiveCount + "(active) " + availableCount
+ "(available) " + maxCount + "(max)");
System.out.println("----------------------------------");
activeCount = curActiveCount;
}
} catch (ProxoolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
if (connection != null)
{
return connection;
} else
{
throw new NullPointerException(
"Didn't get connection, which probably means that no Driver accepted the URL");
}
}
private static void init()
{
String fileName = "proxool.xml";
URL resourceURL = null;
try
{
if (Thread.currentThread().getContextClassLoader() != null)
{
resourceURL = Thread.currentThread().getContextClassLoader()
.getResource(fileName);
}
if (resourceURL == null)
{
resourceURL = DBConnection.class.getClassLoader().getResource(
fileName);
}
JAXPConfigurator.configure(resourceURL.getFile(), false);
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
} catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ProxoolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
initialized = true;
}
}
proxool.xml内容
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>Develop</alias>
<driver-url>jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.6)(PORT=1521)))(CONNECT_DATA=(SID=lzqdiy)(SERVER=DEDICATED)))
</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="lzqdiy"/>
<property name="password" value="lzqdiy"/>
</driver-properties>
<maximum-connection-count>120</maximum-connection-count>
<minimum-connection-count>20</minimum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
</something-else-entirely>
<something-else-entirely>
<proxool>
<alias>Develop</alias>
<driver-url>jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.6)(PORT=1521)))(CONNECT_DATA=(SID=lzqdiy)(SERVER=DEDICATED)))
</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="lzqdiy"/>
<property name="password" value="lzqdiy"/>
</driver-properties>
<maximum-connection-count>120</maximum-connection-count>
<minimum-connection-count>20</minimum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
</something-else-entirely>
通过语句:Connection con=DBConnection.getConnection();来获得一个数据库连接,当活动连接数变化时向控制台输出连接信息。
相关推荐
Proxool 是一款简洁的数据库连接池,它的主要优势在于易于配置和使用,同时提供了监控和诊断功能。虽然在当前的开发环境中,其他连接池可能更为流行,但Proxool 的设计理念和工作原理对于理解和掌握数据库连接池的...
4. **监控与管理**: Proxool提供了监控和管理连接池的功能,可以查看当前连接状态、连接使用情况,以及进行动态调整,如增加或减少最大连接数。 5. **性能优化**: 通过调整连接池参数,如设置合理的最大和最小连接...
Proxool连接池的工作原理主要包括以下几个方面: 1. 连接初始化:在应用启动时,Proxool会根据配置信息预先创建一定数量的数据库连接,这些连接在空闲时会被缓存起来,供后续的数据库操作使用。 2. 连接复用:当多...
2. **Proxool**:它是一个可以将其他类型的JDBC驱动封装进连接池的Java SQL Driver,具有高度可配置性,快速且稳定,能为现有JDBC驱动添加连接池功能。 3. **Jakarta DBCP**:基于Apache Commons Pool的对象池机制...
- **透明性**:对应用程序来说,使用Proxool连接池几乎透明,只需要简单的配置即可实现数据库连接的管理。 3. **配置与使用** 配置Proxool主要通过XML文件,定义数据库URL、驱动类名、最大和最小连接数等参数。在...
- 动态扩展:当连接池达到预定上限时,Proxool可以动态地创建新的连接,以适应负载的变化。 - 支持多种数据库:Proxool支持多种主流的数据库,如Oracle、MySQL、SQL Server等。 在实际应用中,开发人员通常会将...
Proxool是Apache软件基金会的一个开源项目,它提供了一个连接池解决方案,用于管理数据库连接。在Java应用程序中,使用数据库连接池可以显著提高性能和效率,因为它减少了创建和销毁数据库连接的开销。标题提到的...
2. **动态调整**:可以动态调整连接池的大小,以应对负载变化。 3. **连接池健康检查**:定期检查连接的有效性,及时回收无效连接。 4. **线程安全**:确保在多线程环境中的正确性和稳定性。 5. **配置灵活**:可以...
在Spring中配置Proxool连接池,我们需要创建一个名为`proxool_dataSource`的bean,并设置相应的属性,如驱动类、URL、用户和密码。此外,还可以设置测试SQL语句、最小和最大连接数、连接保持时间和空闲连接回收策略...
Proxool作为一个数据库连接池,提供了许多特性,如监控、配置灵活性以及对多种数据库的支持。然而,像所有软件一样,它可能会存在bug或性能问题,"bug_fix"就表示这个压缩包可能包含了针对这些问题的修复代码。 ...
**Proxool连接池简介** Proxool是Java平台上的一个开源数据库连接池实现,它在2004年由James果酱项目发布。标题中的"proxool-0.9.0RC3.zip"指的是Proxool的一个特定版本,即0.9.0候选发布3版。这个版本的压缩包包含...