Proxool 配置

news/2025/2/26 7:19:16

一.Proxool 在hibernate 中的配置
1, Hibernate的三种连接池设置C3P0、Proxool和DBCP
以下三种连接都是以连接MySQl为例。
 <!-- JDBC驱动程序 --> 
<property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK</property> <!-- 数据库用户名 --> 
<property name="connection.username">root</property> <!-- 数据库密码 --> 
<property name="connection.password">8888</property> 
 
上面的一段配置,在c3p0和dbcp中,都是必需的,因为hibernate会根据上述的配置来生成connections,再交给c3p0或dbcp管理.但是,proxool则不能,虽然说服文档上说proxool也可以和hibernate结合,但我按照官方文档上的说明怎么配也出错.
1 C3P0 
 
只需在hibernate.cfg.xml中加入 
<property name="c3p0.min_size">5</property> 
<property name="c3p0.max_size">30</property> 
<property name="c3p0.time_out">1800</property> 
<property name="c3p0.max_statement">50</property> 
 
还有在classespath中加入c3p0-0.8.4.5.jar 
 
 
2 dbcp 
 
在hibernate.cfg.xml中加入 
 
<property name="dbcp.maxActive">100</property> 
<property name="dbcp.whenExhaustedAction">1</property> 
<property name="dbcp.maxWait">60000</property> 
<property name="dbcp.maxIdle">10</property> 
 
<property name="dbcp.ps.maxActive">100</property> 
<property name="dbcp.ps.whenExhaustedAction">1</property> 
<property name="dbcp.ps.maxWait">60000</property> 
<property name="dbcp.ps.maxIdle">10</property> 
 
还有在classespath中加入commons-pool-1.2.jar 和commons-dbcp-1.2.1.jar. 
 
 
3 proxool 
 
由于数据库connection在较长时间没有访问下会自动断开连接,导致浏览出错,增加proxool作为数据库pool。它有自动连接功能。
1)、从http://proxool.sourceforge.net/下载proxool,释放proxool.jar到WEB-INF/lib
 
2)、在hibernate.cfg.xml中增加:
 下面是Hibernate的配置:这里我们还是用XML文件,因为它配置映射有独特的昧力

hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <!-- Database connection settings -->
        <property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
        <property name="hibernate.proxool.pool_alias">DBPool</property>
        <property name="hibernate.proxool.xml">Proxool.xml</property>
        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">false</property>
        <!-- Drop and re-create the database schema on startup
        <property name="hbm2ddl.auto">create</property>
        -->
        <mapping resource="Orders.hbm.xml"/>
        <mapping resource="Users.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

  Hibernate3版本的配置都使用<property>
  首先hibernate.connection.provider_class定义Hibernate的连接加载类,这里Proxool连接池是用这个,不同的连接池有不同的加载类,可以查阅Hibernate文档获取相关信息
  hibernate.proxool.pool_alias这里就是用我们上面提到的连接池的别名
  hibernate.proxool.xml是向Hibernate声明连接池的配置文件位置,可以用相对或绝对路径,用相对路径时要注意一定在要Path范围内!不然会抛出异常。
  dialect是声明SQL语句的方言
  show_sql定义是否显示Hibernate生成的SQL语言,一般在调试阶段设为true,完成后再改成false,这样有利于调试。
  hbm2ddl.auto是声明是否使用hbm2 ddl工具,也就是根据映射文件生成SQL的DDL文件。
  <mapping >这个可是个好东西了,方便的用于映射。如果用资源文件的话就没有这个功能了.呵呵.resource是定义映射文件的位置,和Proxool.xml一样。
 
3)、在与hibernate.cfg.xml同级目录(src根目录下)增加proxool.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<!-- the proxool configuration can be embedded within your own application's.
  Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
  <proxool>
    <alias>dbpool</alias>
    <!--proxool只能管理由自己产生的连接-->
    <driver-url>
      jdbc:mysql://127.0.0.1:3306/wlsh?characterEncoding=GBK&useUnicode=true&autoReconnect=true     </driver-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <driver-properties>
        <property name="user" value="root" />
        <property name="password" value="123456" />
    </driver-properties>
    <!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁-->
    <house-keeping-sleep-time>90000</house-keeping-sleep-time>
    <!-- 最少保持的空闲连接数-->
    <prototype-count>5</prototype-count>
    <!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定-->
    <maximum-connection-count>100</maximum-connection-count>
    <!-- 最小连接数-->
    <minimum-connection-count>10</minimum-connection-count>
  </proxool>
</something-else-entirely>

<alias>是连接池的别名,在JDBC中可以用DriverManager.getConnection("Proxool.DBPool");取得一个连接(但你得先在程序运行时先加载它)。

  <driver-url>是数据库地址,不用说也明白了。后面也可以带一段参数useUnicode=true&characterEncoding=GB2312这是设定连接的参数,这里是定义了连接使用的编码为GB2312,这是为了解决数据库存取中的乱码问题(如果数据库没有提供编码设定的话,比如MySQL5.0以前版本)
  <driver-class>这是JDBC使用的数据库驱动类,对于不同的数据库,有不同的驱动类支持,一般官方会提供
  <driver-properties>里面的都很简单啦,不说了。

  还有就是<maxmum-connection-count>是设置连接池内生成的最大连接数

  Proxool配置完成,把它放在WEB-INFclasses下面(放在哪都没关系,只要让路径Path包含着就行)!
 
4)、重起tomcat 
 
在hibernate3.0中,已经不再支持dbcp了,hibernate的作者在hibernate.org中,明确指出在实践中发现dbcp有BUG,在某些种情会产生很多空连接不能释放,所以抛弃了对dbcp的支持。proxool不少行家推荐使用.c3p0占用资源比较大,效率也不高.

二.Proxool 在web 应用程序中的配置
(1)1、下载proxool 地址:http://proxool.sourceforge.net
2、解压缩proxool-0.9.0RC2.zip,拷贝lib/proxool-0.9.0RC2.jar到web-info/lib
       拷贝jdbc驱动到web-info/lib
    3、在web-info下建立文件:proxool.xml
     文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
  <proxool>
    <alias>Develop</alias>
    <driver-url>jdbc:oracle:thin:@192.168.100.18:1521:RNMS</driver-url>
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <driver-properties>
      <property name="user" value="scmlp"/>
      <property name="password" value="scmlpscmlp"/>
    </driver-properties>
    <maximum-connection-count>500</maximum-connection-count>
    <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
  </proxool>
  <proxool>
    <alias>Develop2</alias>
    <driver-url>jdbc:oracle:thin:@192.168.100.18:1521:RNMS</driver-url>
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <driver-properties>
      <property name="user" value="scmdob"/>
      <property name="password" value="scmdob"/>
    </driver-properties>
    <maximum-connection-count>500</maximum-connection-count>
    <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
  </proxool>
</something-else-entirely>

    4、在web.xml文件内加入以下内容:

<servlet>
     <servlet-name>proxoolServletConfigurator</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>
<!-- proxool提供的管理监控工具,可查看当前数据库连接情况。如果运行不成功,请删除本行 -->
   <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>

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

     6、利用proxool监控工具查看数据库运行状态。地址:./admin
(2)用proxool配置数据库连接池properties配置
1、下载proxool 地址:http://proxool.sourceforge.net
2、解压缩proxool-0.9.0RC2.zip,拷贝lib/proxool-0.9.0RC2.jar到web-info/lib
   拷贝jdbc驱动到web-info/lib
3、在WEB-INF/classes/下建立文件:Proxool.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

4、在web.xml文件内加入以下内容:
<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/classes/Proxool.properties</param-value>
 </init-param>
 <load-on-startup>1</load-on-startup>
</servlet>
<!-- proxool提供的管理监控工具,可查看当前数据库连接情况。如果运行不成功,请删除本行 -->  
<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>

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

 


三.Proxool 在java 应用中的配置
1,Using an XML file.  For instance:
<?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>xml-test</alias>
    <driver-url>jdbc:hsqldb:.</driver-url>
    <driver-class>org.hsqldb.jdbcDriver</driver-class>
    <driver-properties>
      <property name="user" value="sa"/>
      <property name="password" value=""/>
    </driver-properties>
    <maximum-connection-count>10</maximum-connection-count>
    <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
  </proxool>
</something-else-entirely>
And then simply call the XML configurator (JAXPConfigurator) in your startup code:
JAXPConfigurator.configure("src/java-test/org/logicalcobwebs/proxool/configuration/test-no-ns.xml", false);
// The false means non-validating
And then, picking up connections is really easy ("xml-test" is the alias we used above)
connection = DriverManager.getConnection("proxool.xml-test");


 


http://www.niftyadmin.cn/n/4411685.html

相关文章

c# websocket client java websocket server

实现功能&#xff1a;c# websocket 客户端 连接 java websocket 服务端 一&#xff0c;c# websocket 客户端 nuget websocketsharp-netstandard Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threadi…

【实现一套爬虫数据抓取平台】[3-3-03] Ubuntu 如何升级 CMake

文章目录0、系列目录1、背景2、操作步骤3、总结0、系列目录 写这套文章的时候&#xff0c;不会完全按照目录的顺序一篇一篇写&#xff0c; 大家可以到目录中直接找到对应的章节进行查看。 点我跳转 1、背景 安装某些 Python 依赖库的时候&#xff0c;需要特定版本的 Cmake&…

网上有关回车和换行的一个有趣说法

"回车"(carriage return)和"换行"(line feed)这两个概念的来历和区别: 在计算机还没有出现之前&#xff0c;有一种叫做电传打字机(Teletype Model 33)的玩意&#xff0c;每秒钟可以打10个字符。但是它有一个问题&#xff0c;就是打完一行换行的时候&#x…

【实现一套爬虫数据抓取平台】[3-3-04] 使用 Docker-Compose 安装 Kafka

文章目录0、系列目录1、代码0、系列目录 写这套文章的时候&#xff0c;不会完全按照目录的顺序一篇一篇写&#xff0c; 大家可以到目录中直接找到对应的章节进行查看。 点我跳转 1、代码 简单粗暴&#xff0c;直接上代码。 version: 2 services:zookeeper:image: wurstmei…

汇编的有趣问题

int main(){ int a1; int b2; int c-1;} 问题是下面哪个关系成立: &a>&b>&c还是&a<&b<&c? 我们知道局部变量是存放在栈中的,a先PUSH,然后是b,最后是c。 而栈指针SP是从高地址→低地址方向移动的,所以&a>&b>…

【解决方法】如何用 SQL 查询特殊字符(换行符、Tab符)

背景 某些情况下&#xff0c;我们的数据库里面可能会保存有特殊字符&#xff0c;最好的方式是在保存之前处理一下&#xff0c;不然后面的业务使用到的时候可能会有各种奇奇怪怪的问题。 但&#xff0c;不可避免的&#xff0c;总有漏网之鱼&#xff0c;我们需要检查一下库里面…

5条DBA最佳实践指导

本文5条基本最佳实践源于我多年使用大大小小的Oracle系统的实际经验总结……就我而言&#xff0c;最佳实践之所以是最佳实践必须满足 1)它能够被证明是有效的&#xff0c;2)它足够灵活&#xff0c;可以适用于多种环境。下面的5条基本最佳实践源于我多年使用大大小小的Oracle系统…

【解决方法】Docker+uWSGI+Flask 报错 ModuleNotFoundError: No module named ‘flask‘

背景 Docker Nginx uWSGI Flask 部署的环境&#xff0c;以前一直都能好好跑&#xff0c;这次把基础镜像的 Python 版本由原来的 3.6 升级到了 3.8&#xff0c;就报了标题的错。 Docker Nginx uWSGI Flask 部署可以参考 这篇文章 问题分析 先看一下 Docker 的启动日志&a…