在TOMCAT上配置连接池

TOMCAT上配置连接池

一.配置数据源:

使用TOMCAT提供的JNDI将数据源对象注册为一个命名服务,然后在系统中使用JNDI提供的接口按照名称查询得到对应的数据源。


1.  安装DBCPDatabase Connection Pool)数据源

TOMCAT默认自带的三个JAR文件:(TOMCAT_HOME/common/lib目录下)

Commons-dbcp-1.1.jar

Commons-collections. jar

Commons-pool-1.1.jar

复制JDBC驱动器的JAR文件至common/lib目录下。


2.  配置server.xml

<Context path="" docBase="E:/MyProject/sample" debug="0" reloadable="true" >

<Resource name="jdbc/sample" auth="Container" type="javax.sql.DataSource"/>

<ResourceParams name="jdbc/sample">

<parameter>

<name>factory</name>

<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>

</parameter>

<!--回收被遗弃的数据库连接至连接池-->

<parameter>

<name>removeAbandoned</name>

<value>true</value>

</parameter>

<!--数据库连接过60秒不用将被遗弃而收回连接池-->

<parameter>

<name>removeAbandonedTimeout</name>

<value>60</value>

</parameter>

<!--将被遗弃的连接回收记入日志-->

<parameter>

<name>logAbandoned</name>

<value>true</value>

</parameter>

<!--连接池中可容纳的最大连接数-->

<parameter>

<name>maxActive</name>

<value>100</value>

</parameter>

<!--池中可容纳的最大闲置数据连接数-->

<parameter>

<name>maxIdle</name>

<value>30</value>

</parameter>

<!--等待数据库连接的最长时间(超时则抛出异常)-->

<parameter>

<name>maxWait</name>

<value>10000</value>

</parameter>

<!--数据库访问的用户名与密码-->

<parameter>

<name>username</name>

<value>sa</value>

</parameter>

<parameter>

<name>password</name>

<value>sa</value>

</parameter>

<!--Class name for Microsoft SQLServer-->

<parameter>

<name>driverClassName</name>

<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>

</parameter>

<parameter>

<!--JDBC connection url for connecting to MSSQL dB-->

<name>url</name>

<value>jdbc:microsoft:sqlserver://10.28.78.150:1433;databaseName=Northwind</value>

</parameter>

</ResourceParams>

</Context>

    3.  配置web.xml

    <resource-ref>

        <description>DataSource</description>

    <res-ref-name>jdbc/sample</res-ref-name>

    <res-type> javax.sql.DataSource </res-type>
    
<res-auth> Container </res-auth>  

    </resource-ref>


二.使用配置的数据池:

定义一个DBSource类作为数据库的全局唯一访问点,封装了查询JNDI数据源并获得连接的操作,提供了一个静态方法getConnection()用于获得连接。

import javax.sql.DataSource;

import javax.naming.*;

import java.sql.*;

public class DBSource {

      

       private static DataSource ds;

       static{

              init();

       }

       private static void init(){

              try

              {

                     //创建命名服务环境

 

                     Context ctx = new InitialContext();

                     if(ctx == null)

                            throw new Exception("No Context");

                     //JNDI中查询数据源对象

 

                     ds = (DataSource)ctx.lookup("java:comp/env/jdbc/ykz");

              }catch(Exception e)

              {

                     e.printStackTrace();

              }

       }

       //将构造函数定义为private是为了保证全局只有一个DataSource实例

 

       private DBSource(){

              ds = null;

       }

       public static Connection getConnection() throws SQLException{

              if(ds == null)

                     throw new SQLException("数据源对象为空");

              else

              {

                     //从数据源获得数据库连接

 

                     return ds.getConnection();

              }

       }

}


配置连接池所需注意的问题:
(1)最小连接数是连接池一直保持的数据库连接,如果应用程序对数据库连接的使用量不大,将会有连接资源被浪费。
(2)最大连接数是连接池能申请到的最大连接数,如果连接请求超过此数,后面的请求将被加入到等待队列中,这会影响数据库操作。
(3)如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值