码迷,mamicode.com
首页 > 其他好文 > 详细

Tomcat中设置数据源和连接池

时间:2017-04-03 13:27:33      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:highlight   init   new   表示   ebs   basename   sof   sql   ace   

对于大型网站来说,信息查询的次数会非常多,每次查询都需要这样的过程:加载驱动程序、创建连接、创建语句对象、执行SQL语句、关闭这些对象。这样使得每一个用户访问的时候都需要服务器做出相应,这样的话服务器端承受巨大的压力,如此效率就会下降,建立与数据库之间的连接和释放连接会占用很多系统的时间。如果能够让所有用户共享连接,仅仅创建一次连接,谁需要连接谁就使用,这样可以大大减少创建连接所占用的时间。让所有用户共享连接,并且在需要的时候就能够使用,就需要有专门的机制来创建连接,数据库连接池(Dababase Connection Pool,简称DBCP)技术就是来解决这个问题的。

工作原理:

技术分享

如果连接池中有空闲的连接,Tomcat就分配给客户端;如果没有空闲的连接,请求客户端将会在队列池中等待。

配置过程:

实例使用的是Tomcat 7.0,使用的方法是在Tomcat的conf/server.xml中配置虚拟目录时配置 

在配置虚拟目录时,也就是在配置conf下面的server.xml时,在context标签内添加池配置

在说该方法之前,先说一下,如何用tomcat配置虚拟目录

配置虚拟目录:

在tomcat\conf下server.xml中找到

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
在

 

<Host>标签下面添加:
<Context path="/website" docBase="F:/myweb" reloadable="true"></Context>

 

注意:

docBase要改成你的实际项目的目录

path为虚拟路径,访问时的路径,注意一定要加“/” 

debug建议设置为0

reloadable设置为true

接下来添加池配置,如下

<Context path="/myWebSiteV2.0" docBase="D:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\myWebSiteV2.0" reloadable="true">
            <Resource name="TestDBCP" 
            auth="Container" 
            type="javax.sql.DataSource" 
            username="sa" 
            password="123456" 
            maxIdle="10" 
            maxWait="-1" 
            maxActive="200"
            driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
            url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=TestServlet"
            />
</Context>  

 

各属性的含义如下:

  • name:给数据源设置名字
  • auth:表示数据源由谁管理(Container  容器,即tomcat管理)
  • username 和 password:连接数据库的用户名和口令
  • maxIdle:池中最大空闲数据库连接数。如果为-1,则没有限制。
  • axWait:等待一个连接变成可用的最长时间,单位是ms,这个例子中是10毫秒,如果超时将抛出异常。如果设置为-1,将无限等待
  • maxActive:池中连接的最大数。如果为0,则没有最大数量限制。
  • driverClassName:数据库的JDBC驱动程序的名字
  • url:JDBC连接数据库的url
最后在Servlet中获得连接即可:
/** 
 * @(#)ConnDB.java 
 * 
 *连接到数据库 
 * @author  
 * @version 2.00 2017/3/26 
 */  
package com.chongqing;  
  
import java.sql.*;  
import javax.sql.*;
import javax.naming.*;
  
public class ConnDB {  
  
   private Connection ct = null;  
     
   public Connection getConn(){  
      
      
        try {  
        	
        	//使用数据源连接池的方式连接数据库  
        	//创建一个上下文环境  
            Context con=new javax.naming.InitialContext();  
              
            //通过con得到数据源  
            DataSource ds=(DataSource)con.lookup("java:comp/env/TestDBCP");  //这里的TestDBCP是数据源的名字  
              
            ct=ds.getConnection();  
              
            System.out.println ("使用连接池的方式"); 
        	     	
        	/*
            //连接到数据库  
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  
            ct = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=TestServlet","sa","123456");   
            */
        }  
        catch (Exception ex) {  
            ex.printStackTrace();  
        }           
        //不用关闭资源  
          
        return ct;  
   }       
}  

 

 

Tomcat中设置数据源和连接池

标签:highlight   init   new   表示   ebs   basename   sof   sql   ace   

原文地址:http://www.cnblogs.com/yzy-blogs/p/6661682.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!