J2EE开发技术点6:Proxool数据库连接池

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

前言
Proxool也是目前主流的数据库连接池,Proxool是一种Java数据库连接池技术。也是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。下面是对Proxool连接池的一些技术小结

使用Proxool连接池方式
在官方提供的文档中,有多种使用Proxool的方式,这里只介绍两种:一种是通过配置文件的方式使用Proxool;一种是通过直接设置属性的方式使用。其中使用了Proxool连接池中的数据源。与jdbc pool一样也是通过数据源的方式进行配置

1、直接设置属性的方式

编写一个工具类,该类可以返回Proxool数据库连接对象

package cp;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.logicalcobwebs.proxool.ProxoolDataSource;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;

public class Proxool {

    private ProxoolDataSource dataSource = null;
    public Proxool() {
        dataSource = new ProxoolDataSource();
        init2();
    }

    public void init2(){
         dataSource = new ProxoolDataSource(); 
         dataSource.setDriver("com.mysql.jdbc.Driver"); 
         dataSource.setDriverUrl("jdbc:mysql://localhost/test");    
         dataSource.setUser("root"); 
         dataSource.setPassword("1234"); 
         dataSource.setAlias("mysql"); 
         dataSource.setMaximumConnectionCount(5); 
         dataSource.setMinimumConnectionCount(0); 
         dataSource.setMaximumActiveTime(5); 
    }

    public Connection getProxoolConnection2() {
        Connection connection = null;
        try {
            connection = dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
}

然后编写测试代码:

public class TestCp {
    public static void main(String[] args) throws SQLException {
        Proxool p = new Proxool();
        for (int i = 0; i < 5; i++) {
            Connection con = p.getProxoolConnection2();
            System.out.println(con);
        }
    }
}

测试结果如下:

可以发现,返回的是不同的五个连接对象。使用这种方式的好处简单直接,缺点是不易维护,属性发生变化需要修改代码。

2、使用配置文件
下面,我们看看如何以配置文件的方式使用Proxool连接池。首先,自然,需要创建一个proxool.xml配置文件,暂且先放到src根目录下。文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
    <proxool>
        <alias>mysql</alias>
        <!--数据源的别名 -->
        <driver-url>jdbc:mysql://127.0.0.1/test</driver-url>
        <!--url-->
        <driver-class>com.mysql.jdbc.Driver</driver-class>
        <!--驱动类 -->
        <driver-properties>
            <property name="user" value="root" />
            <property name="password" value="1234" />
        </driver-properties>
        <!-- 任一时刻,可以(同时)建立的最大连接数 -->
        <simultaneous-build-throttle>10</simultaneous-build-throttle>
        <!--最大连接数(默认5个)-->
        <maximum-connection-count>100</maximum-connection-count>
        <!--最小连接数(默认2个) -->
        <minimum-connection-count>10</minimum-connection-count>
        <!--proxool自动侦察各个连接状态的时间间隔(毫秒)-->
        <house-keeping-sleep-time>120000</house-keeping-sleep-time>
        <!--最少保持的空闲连接数 -->
        <prototype-count>10</prototype-count>
        <!--在使用之前测试 -->
        <test-before-use>true</test-before-use>
        <!--用于保持连接的测试语句 -->
        <house-keeping-test-sql>select 1</house-keeping-test-sql>
    </proxool>
</something-else-entirely>

上面的这些属性也可以通过第一种方式进行设置,之后,需要编写获取连接的方法,代码如下:

public class Proxool {
    public Proxool() {
        dataSource = new ProxoolDataSource();
        init();
    }

    public void init() {
        InputStream in = Proxool.class.getResourceAsStream("/proxool.xml");
        Reader reader = null;
        try {
            reader = new InputStreamReader(in, "utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        try {
            JAXPConfigurator.configure(reader, false);
        } catch (ProxoolException e) {
            e.printStackTrace();
        }
    }

    public Connection getProxoolConnection() {
        Connection connection = null;
        try {
            connection = DriverManager.getConnection("proxool.mysql");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
}

注意两者的区别,使用这种方式需要读取proxool.xml这个配置文件(以流的方式),读取之后,调用JAXPConfigurator的configure方法就可以完成对xml文件的解析了。之后在客户端直接调用getConnection方法就能从数据库连接池中获取连接了。测试代码如下:

public class TestCp {

    public static void main(String[] args) throws SQLException {
        Proxool p = new Proxool();
        for (int i = 0; i < 5; i++) {
            Connection con = p.getProxoolConnection();
            System.out.println(con);
        }
    }
}

测试如下:

Proxool数据库连接池小结
使用Proxool数据库连接池可以很好管理数据库连接,提高服务器的响应性能。总结jdbc pool数据库连接池与Proxool数据库连接池,可以发现两者存在一定的共性:都是通过数据源的方式获取连接,这点与普通jdbc操作有很大不同,Drivermanager类使用后不能及时释放资源,而且是不可重用的。而数据库连接池则管理了数据库连接池任何一个连接对象,包括其创建、释放和销毁。

Proxool上述的两种方式都比较普遍,但是使用配置文件灵活性比较大,便于对代码进行维护,推荐这种使用方式。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
存储 NoSQL 关系型数据库
非关系型数据库-MongoDB技术(二)
非关系型数据库-MongoDB技术(二)
|
3天前
|
NoSQL 关系型数据库 MongoDB
非关系型数据库-MongoDB技术(一)
非关系型数据库-MongoDB技术(一)
|
15天前
|
存储 负载均衡 数据库
探索后端技术:从服务器架构到数据库优化的实践之旅
在当今数字化时代,后端技术作为支撑网站和应用运行的核心,扮演着至关重要的角色。本文将带领读者深入后端技术的两大关键领域——服务器架构和数据库优化,通过实践案例揭示其背后的原理与技巧。无论是对于初学者还是经验丰富的开发者,这篇文章都将提供宝贵的见解和实用的知识,帮助读者在后端开发的道路上更进一步。
|
15天前
|
SQL 关系型数据库 MySQL
MySQL技术安装配置、数据库与表的设计、数据操作解析
MySQL,作为最流行的关系型数据库管理系统之一,在WEB应用领域中占据着举足轻重的地位。本文将从MySQL的基本概念、安装配置、数据库与表的设计、数据操作解析,并通过具体的代码示例展示如何在实际项目中应用MySQL。
52 0
|
22天前
|
关系型数据库 Java MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【9月更文挑战第6天】在Linux环境下安装JDK 1.8、Tomcat和MariaDB是搭建Java Web应用的关键步骤。本文详细介绍了使用apt-get安装OpenJDK 1.8、下载并配置Tomcat,以及安装和安全设置MariaDB(MySQL的开源分支)的方法。通过这些步骤,您可以快速构建一个稳定、高效的开发和部署环境,并验证各组件是否正确安装和运行。这为您的Java Web应用提供了一个坚实的基础。
33 0
|
24天前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
56 0
|
27天前
|
C# UED 定位技术
WPF控件大全:初学者必读,掌握控件使用技巧,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,控件是实现用户界面交互的关键元素。WPF提供了丰富的控件库,包括基础控件(如`Button`、`TextBox`)、布局控件(如`StackPanel`、`Grid`)、数据绑定控件(如`ListBox`、`DataGrid`)等。本文将介绍这些控件的基本分类及使用技巧,并通过示例代码展示如何在项目中应用。合理选择控件并利用布局控件和数据绑定功能,可以提升用户体验和程序性能。
44 0
|
27天前
|
存储 SQL 数据库
|
27天前
|
SQL 关系型数据库 数据库连接
Entity Framework Core 入门教程来袭!快速上手强大的 ORM 工具,开启高效数据库开发之旅!
【8月更文挑战第31天】Entity Framework Core(EF Core)是一个轻量且可扩展的对象关系映射(ORM)框架,允许开发者使用 .NET 语言操作数据库而无需直接编写 SQL 语句。本教程涵盖 EF Core 的安装、数据库上下文创建、数据库连接配置及常见数据库操作(如添加、查询、更新和删除),并介绍如何利用数据库迁移功能安全地更改数据库结构。通过本教程,你可以快速掌握 EF Core 的基本用法,提高开发效率。
36 0