`

连接池

    博客分类:
  • Java
阅读更多

 

         Java JDBC 中会有一个连接池的概念,那么我们来看看常用的连接池有哪些: proxool dbcp c3p0 ,其优劣各有优点不想评价,自己在项目中以 proxool 为主;

         那么连接池具体是做什么的呢?其基本思想就是为数据连接建立一个“缓冲池”,而后预先在这个缓冲池中放入一定数量的连接,当需要建立数据库连接的时候,只需要从缓冲池中取出一个即可,使用完之后再放回缓冲池中去。在这个过程中服务启动要相对慢点,但是这相对用户访问时是的请求处理速度来说,替换的是值得的。这里我们还可以设置连接池的最大连接数来防止系统无尽的与数据库建立连接,更重要的是我们可以通过连接池的管理机制监视数据库的连接数量和使用情况,为系统开发、测试及性能调整提供依据;

         Ok ,废话少说,以 proxool 为例,来看看 JDBC 中如何加入连接池。

1、  首先要导入“ commons-logging-1.1.jar ”、“ proxool-0.9.1.jar ”、“ proxool-cglib.jar ”;

2、  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>
  <servlet>
    <servlet-name>proxoolAdmin</servlet-name>
    <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>proxoolAdmin</servlet-name>
    <url-pattern>/proxool_admin</url-pattern>
  </servlet-mapping>

 

说明:

         · <load-on-startup>1</load-on-startup> :这里表示启动是加载;

         · proxoolAdmin proxool 提供的管理监控工具,可查看当前数据库连接情况。如果运行不成功,请删除本行(用 http://localhost/web-name/Admin 访问得到监控结果);

         ·还有一些其他的属性,但只有特定条件下才会使用,这里就一一列举了。

3、  WEB-INF 添加 proxool.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
  <proxool>
    <alias>db_onlineproject</alias>
    <driver-url>jdbc:mysql://localhost:3306/db_onlineproject</driver-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <driver-properties>
      <property name="user" value="root"/>
      <property name="password" value="123"/>
    </driver-properties>
    <maximum-connection-count>100</maximum-connection-count> 
    <minimum-connection-count>10</minimum-connection-count> 
    <trace>true</trace>
    <house-keeping-test-sql>select 0</house-keeping-test-sql> 
  </proxool>
</something-else-entirely>

 

说明:

         · alias :别名

         · maximum-connection-count :最大的数据库连接数 .

         · minimum-connection-count :最小的数据库连接数 .

         · house-keeping-test-sql :这里的 select 0 是为了可以在任意数据库中都可以正常执行,测试连接

         Other

 

house-keeping-sleep-time: house keeper 保留线程处于睡眠状态的最长时间 ,house keeper 的职责就是检查各个连接的状态 , 并判断是否需要销毁或者创建,这个的默认值是 30 秒。

      house-keeping-test-sql:  如果发现了空闲的数据库连接 .house keeper 将会用这个语句来测试 . 这个语句最好非常快的被执行 . 如果没有定义 , 测试过程将会被忽略。

      maximum-active-time: 如果 housekeeper 检测到某个线程的活动时间大于这个数值 . 它将会杀掉这个线程 . 所以确认一下你的服务器的带宽 . 然后定一个合适的值 . 默认是 5 分钟。经常有些人或许会遇到正在执行的程序忽然拒绝连接,莫明其妙的程序假死,这些都与这个参数的设置有关,我们大部分数据库操作都会在 5 分钟之内完成,可是偏偏有些可能 5 分钟还完成不了,而这个值如果按照默认值的话,连接池就会不管你到底有没有执行完,都会强行关闭数据库连接,所以这个值你可要小心设置哦:)

     maximum-connection-count: 最大的数据库连接数 . 一般的大应用设置 30 就足够了。

     maximum-connection-lifetime: 一个线程的最大寿命 .

     minimum-connection-count: 最小的数据库连接数,一般最好事先初始化一部分连接这样,对于初次连接数据库的应用效率比较高,推荐设置 5 10

     prototype-count: 连接池中可用的连接数量 . 如果当前的连接池中的连接少于这个数值 . 新的连接将被建立 ( 假设没有超过最大可用数 ). 例如 . 我们有 3 个活动连接 2 个可用连接 , 而我们的 prototype-count 4, 那么数据库连接池将试图建立另外 2 个连接 . 这和 minimum-connection-count 不同 . minimum-connection-count 把活动的连接也计算在内 .prototype-count spare connections 的数量 .

      trace: 如果为 true, 那么每个被执行的 SQL 语句将会在执行期被 log 记录 (DEBUG LEVEL). 你也可以注册一个 ConnectionListener ( 参看 ProxoolFacade) 得到这些信息 .

 

4、调用

package com.theone.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


/**
 * 建立数据库连接类
 * @author xudongwang
 *
 */
public class DbUtil {
	public static Connection getConn() throws SQLException {
		
		return DriverManager.getConnection("proxool.db_onlineproject");
	}
}

 

 

分享到:
评论

相关推荐

    数据库连接池技术详解

    对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接池技术。某一应用最大可用数据库连接数的限制,避免某一应用独占所有数据库资源。 在较为完备的数据库连接池实现中,可根据...

    连接池案例 连接池案例

    连接池案例

    连接池连接池连接池

    连接池连接池连接池连接池连接池

    Http连接池工具类

    传统的HttpURLConnection并不支持连接池,如果要实现连接池的机制,还需要自己来管理连接对象。对于网络请求这种底层相对复杂的操作,个人以为如果有可用的其他方案,也没有必要自己去管理连接对象。 除了...

    Qt 多线程连接数据库——数据库连接池

    * 数据库连接池特点: * 获取连接时不需要了解连接的名字,连接池内部维护连接的名字 * 支持多线程,保证获取到的连接一定是没有被其他线程正在使用 * 按需创建连接,可以创建多个连接,可以控制连接的数量 * 连接...

    SpringBoot2.2+commons-pool2实现多Ftp连接池完整项目,开箱即用,经过长期生产使用稳定可靠

    使用JDK1.8、SpringBoot2.2.10.RELEASE、lombok1.18.8、guava23.0、hutool5.3.10、commons-pool2 2.7.0、tika1.22等实现多Ftp连接池实现,通过守护线程实现连接池内连接可用性校验,配置最大、最小连接个数防止Ftp...

    ADO.NET连接池示例

    ADO.NET链接对象(SqlConnection或者OracleConnection)默认情况都开启连接池(平时编程时可能会忽略)。当我们调用Close或者Dispose方法时,实际并不断开连接,而是把连接放回连接池,再次使用时候重连接池中取得...

    R2数据库连接池高性能连接池v1.3

    v1.3改进了清理线程可能出现的减少连接池中链接而不计数的问题。 v1.2处理了oracle环境下由于服务器关闭休眠链接造成的连接池循环检测进程异常退出的情况,改为当循环周期大于服务器关闭休眠链接间隔时,后台打印...

    ftp连接池实例

    经过几天的琢磨,去看了csdn上一位大牛的数据库的连接池实现方案,从中感悟很多,感谢这位大神。 让我才能有信心去坚持下去。也不知道写的好不好··不好的话,大家指出。但是我是努力去做了,这一个过程,很享受,...

    kafka生产者连接池

    封装抽取了一个kafka生产者的连接池,能很好的用池的方式对kafka生产者连接点进行有效的管理

    C# 数据库连接池 C# 数据库连接池

    C# 数据库连接池 C# 数据库连接池 C# 数据库连接池 C# 数据库连接池

    数据库连接池配置

    这个文档详细讲述了mysql数据库连接池的配置以及数据库连接池的工作原理。

    C#高效数据库连接池源码

    C#高效数据库连接池源码

    Tomcat6配置连接池

    Tomcat6配置连接池很全面的东东

    okhttp中连接池实现

    代码中包含okhhtp中连接池的设计,包含连接对象的添加,连接对象何时被移除。

    连接池管理连接oracle数据库

    这是用连接池技术管理连接oracle数据库的工具类代码,如果想连接MySQL,直接修改配置文件即可。

    RabbitMQ连接池+SpringBoot实现

    RabbitMQ连接池+SpringBoot实现。通过连接池实现将高效的管理RabbitMQ的Connection,并与springboot进行整合,实现消息发送,获取队列列表等功能。基于此可以进行更多功能的扩充。

    java ftp连接池

    在网上找了好久没有现成的ftp连接池jar包,自己花了一些时间实现了一个简单的连接池,用了一段时间稳定性还可以。

    hibernate连接池.doc

    Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP 在配置连接池时需要注意的有三点: 一、Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已经不再推荐使用,官方的解释是这个连接池存在...

    java 数据库 连接池驱动.rar

    java 数据库 连接池驱动.rar java 数据库 连接池驱动.rar java 数据库 连接池驱动.rar

Global site tag (gtag.js) - Google Analytics