Proxool连接池使用方法

2023-10-15 02:50

本文主要是介绍Proxool连接池使用方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先从 http://proxool.sourceforge.net/ 下载proxool-0.9.0RC2.zip
解压后,把commons-logging.jar和proxool-0.9.0RC2.jar放到工程的lib文件夹里面。

连接方法一:  和JDBC连接方法类似。

JDBC连接方法:

Class.forName( " com.mysql.jdbc.Driver " ); // 数据库的驱动
Connection con  =  DriverManager.getConnection( " jdbc:mysql://127.0.0.1:3306/student " , " root " , " root " ); // 连接的url

 proxool连接方法:

Class.forName( " org.logicalcobwebs.proxool.ProxoolDriver " );
Connection con 
=  DriverManager.getConnection( " proxool.aaa:com.mysql.jdbc.Driver:jdbc:mysql://127.0.0.1:3306/student " , " root " , " root " );

需要注意的是,Class.forName加载的是proxool的驱动。

getConnection里url的内容是("proxool.别名:数据库的驱动:连接的url")

这里的别名可以随便填写,但一定要写……

连接方法二: XML

首先在WEB-INF目录下创建proxool.xml文件。

内容如下:

<? xml version="1.0" encoding="ISO-8859-1" ?>

<!--  the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. 
-->

< something-else-entirely >
< proxool >
< alias > mysql </ alias >
< driver-url > jdbc:mysql://127.0.0.1:3306/student </ driver-url >
< driver-class > com.mysql.jdbc.Driver </ driver-class >
< driver-properties >
< property  name ="user"  value ="root" />
< property  name ="password"  value ="root" />
</ driver-properties >
< maximum-connection-count > 10 </ maximum-connection-count >
< house-keeping-test-sql > select CURRENT_DATE </ house-keeping-test-sql >
</ proxool >
</ something-else-entirely >

proxool.xml这个文件是用来设置别名的。其中<proxool>标签就是别名的设置段。

alias是别名;

driver-url是驱动的url,就是连接的url;

driver-class是驱动的类,就是数据库驱动;

driver-properties是驱动的属性,可以设置登陆数据库的用户名和密码。

maximum-connection-count是最大连接数。

在工程的web.xml里添加

<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/proxool.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

这段标记是要求tomcat在启动的时候加载proxool驱动并且指明 proxool.xml的位置。

不写的话,上面设置的别名就没用了。

做完上面的工作后,建立连接只需要

Connection con = DriverManager.getConnection("proxool.mysql");

这一句就可以了,Class.forName也不需要了。

注:别名是可以设置多个的,我们在连接多种数据库的时候就可以设置多个别名方便访问了!!

查看proxool的状态

在工程的web.xml里添加

<servlet>
<servlet-name>Admin</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Admin</servlet-name>
<url-pattern>/admin</url-pattern>
</servlet-mapping>


就可以通过/admin来访问proxool的状态了。

import java.sql.*;
import org.apache.log4j.*;

public class InitAction
{
  private Connection conn;
  Logger log  = Logger.getLogger("InitAction");

  public Connection getConnection()
  {
   try
   {
   conn = DriverManager.getConnection("proxool.xml-db");
   }
   catch(Exception ex)
   {
     log.error("数据库连接异常:"+ex.toString());
   }
   if(conn==null)
   {
    log.error("连接无效...");
   }
   return conn;
  }
 
}

而每次在使用时只需要:

Connection conn = new InitAction().getConnection();

即可,真是太方便了!

注:使用完之后需要一定得conn.close(),不然连接很快会被用光..

 

----------------------

           if (conn != null) {
                System.out.println("数据连接测试成功!");
            }
            Stmt = conn.createStatement();
            //Rst = Stmt.executeQuery("select * from t_function t");
            Rst = Stmt.executeQuery("select * from nodetype t");
            //Rst = Stmt.executeQuery("select * from insurecorp t");

            while (Rst.next()) {
                System.out.println(Rst.getString(1));
            }
        } catch (SQLException e) {
            System.out.println("error" + e);
        } catch (ProxoolException e1) {
            System.out.println(e1);
        } finally {
            try {
                if (conn != null) {
                    conn.close();
                    Stmt.close();
                    Rst.close();
                }
            } catch (SQLException e2) {
                System.out.println(e2);
            }
        }
    }

    public static void main(String[] args) {
        test databean = new test();
        databean.TestReadPro();
        //databean.TestReadXML();
    }
}

 

XML配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>Fee</alias>
<driver-url>jdbc:oracle:thin:@90.0.12.112:1521:ORCL</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="feemanager"/>
<property name="password" value="1"/>
</driver-properties>
<maximum-connection-count>500</maximum-connection-count>
<house-keeping-test-sql>select sysdate from DUAL</house-keeping-test-sql>
</proxool>
</something-else-entirely>

 

properties文件配置:

//网上查车数据库
jdbc-1.proxool.alias=WEBGIS
jdbc-1.proxool.driver-class=oracle.jdbc.driver.OracleDriver
jdbc-1.proxool.driver-url=jdbc:oracle:thin:@192.168.0.1:1521:ORCL
jdbc-1.user=gis
jdbc-1.password=1
jdbc-1.proxool.maximum-connection-count=20
jdbc-1.proxool.prototype-count=4
jdbc-1.proxool.house-keeping-test-sql=select sysdate from DUAL
jdbc-1.proxool.verbose=true
jdbc-1.proxool.statistics=10s,1m,1d
jdbc-1.proxool.statistics-log-level=ERROR
//标准版数据库
jdbc-2.proxool.alias=Navtech
jdbc-2.proxool.driver-class=oracle.jdbc.driver.OracleDriver
jdbc-2.proxool.driver-url=jdbc:oracle:thin:@192.168.0.2:1521:orcl
jdbc-2.user=Nav
jdbc-2.password=1
jdbc-2.proxool.maximum-connection-count=20
jdbc-2.proxool.prototype-count=4
jdbc-2.proxool.house-keeping-test-sql=select sysdate from DUAL
jdbc-2.proxool.verbose=true
jdbc-2.proxool.statistics=10s,1m,1d
jdbc-2.proxool.statistics-log-level=ERROR
//计费数据库
jdbc-3.proxool.alias=Fee
jdbc-3.proxool.driver-class=oracle.jdbc.driver.OracleDriver
jdbc-3.proxool.driver-url=jdbc:oracle:thin:@192.168.0.3:1521:ORCL
jdbc-3.user=fee
jdbc-3.password=1
jdbc-3.proxool.maximum-connection-count=20
jdbc-3.proxool.prototype-count=4
jdbc-3.proxool.house-keeping-test-sql=select sysdate from DUAL
jdbc-3.proxool.verbose=true
jdbc-3.proxool.statistics=10s,1m,1d
jdbc-3.proxool.statistics-log-level=ERROR

特别注意:

1、在用main类测试时可以直接将XML或properties文件放置于工程目录下。

2、如果将以上文件放于classes目录下时必须给出绝对路径,当然也可以使用变通做法,我是这样做的:

        try {
            InputStream is = getClass().getResourceAsStream("/Proxool.properties");
            Properties properties = new Properties();
            properties.load(is);
            PropertyConfigurator.configure(properties);
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (ProxoolException e1) {
            e1.printStackTrace();
        }

------------

 5、在调用数据库连接代码:
       Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
       Connection conn = DriverManager.getConnection("proxool.Develop");

     6、利用proxool监控工具查看数据库运行状态。地址:./admin


      以上配置是采用的XML文件方式,也可以采用properties配置方式:

proxool.alias=Test
proxool.driver-class=oracle.jdbc.driver.OracleDriver
proxool.driver-url=jdbc:oracle:thin:@192.168.10.160:1521:orcl
proxool.user=test
proxool.password=testpass
proxool.maximum-connection-count=20
proxool.prototype-count=4
proxool.house-keeping-test-sql=select sysdate from DUAL
proxool.verbose=true
proxool.statistics=10s,1m,1d
proxool.statistics-log-level=ERROR


<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
 
 <init-param>
   <param-name>propertyFile</param-name>
   <param-value>WEB-INF/config/Proxool.properties</param-value>
 </init-param>
 <load-on-startup>1</load-on-startup>
</servlet>


在调用数据库连接代码
   Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
   Connection conn = DriverManager.getConnection("proxool.Test");


还有一些配置属性:
maximum-connection-lifetime   最大连接生命周期  默认值:4小时
maximum-active-time:     最大活动时间   默认值:5分钟
maximum-connection-count   最大连接数    默认值:15个
minimum-connection-count   最小连接数    默认值:5个

在用admin调用的时候,可以查看这个WEB应用所有的连接数的状态,虽然这个插件可以把不活动的连接自动放到连接池里,但是如果连接数过多,而不及时KILL的话,对网站的连接是有很大的影响的,建议还是手工KILL。

 

 



这篇关于Proxool连接池使用方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/214892

相关文章

Mysql中RelayLog中继日志的使用

《Mysql中RelayLog中继日志的使用》MySQLRelayLog中继日志是主从复制架构中的核心组件,负责将从主库获取的Binlog事件暂存并应用到从库,本文就来详细的介绍一下RelayLog中... 目录一、什么是 Relay Log(中继日志)二、Relay Log 的工作流程三、Relay Lo

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

Springboot请求和响应相关注解及使用场景分析

《Springboot请求和响应相关注解及使用场景分析》本文介绍了SpringBoot中用于处理HTTP请求和构建HTTP响应的常用注解,包括@RequestMapping、@RequestParam... 目录1. 请求处理注解@RequestMapping@GetMapping, @PostMappin

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

Nginx 访问控制的多种方法

《Nginx访问控制的多种方法》本文系统介绍了Nginx实现Web访问控制的多种方法,包括IP黑白名单、路径/方法/参数控制、HTTP基本认证、防盗链机制、客户端证书校验、限速限流、地理位置控制等基... 目录一、IP 白名单与黑名单1. 允许/拒绝指定IP2. 全局黑名单二、基于路径、方法、参数的访问控制

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

nginx跨域访问配置的几种方法实现

《nginx跨域访问配置的几种方法实现》本文详细介绍了Nginx跨域配置方法,包括基本配置、只允许指定域名、携带Cookie的跨域、动态设置允许的Origin、支持不同路径的跨域控制、静态资源跨域以及... 目录一、基本跨域配置二、只允许指定域名跨域三、完整示例四、配置后重载 nginx五、注意事项六、支持

MySQL查看表的历史SQL的几种实现方法

《MySQL查看表的历史SQL的几种实现方法》:本文主要介绍多种查看MySQL表历史SQL的方法,包括通用查询日志、慢查询日志、performance_schema、binlog、第三方工具等,并... 目录mysql 查看某张表的历史SQL1.查看MySQL通用查询日志(需提前开启)2.查看慢查询日志3.