Tomcat配置连接池

4 篇文章 0 订阅
2 篇文章 0 订阅

在我们做项目的时候连接数据库一般采用两种方式

1:应用程序直接获取数据库连接

2:通过数据库连接池获取连接


第一种方法是用户每次请求都需要向数据库获得连接,这样有一个很大的缺点,就是数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。如果网站一天的访问量大的话,就会极大浪费数据库资源,并且极易造成数据库服务器内存溢出、宕机。直接从数据库获取连接的示意图:


然而采用数据库连接池就可以很好的解决这个问题,采用数据库连接池获取数据连接的过程如下:


下面介绍如何在tomcat容器中配置数据源


1.找到tomcat所在目录中的conf文件夹中的context.xml文件,在其中做修改(在Context结点里面添加):

[java]   view plain copy
  1. <!—mysql数据源配置-->  
  2.     <Resource  
  3.        name="ds_mysql"  
  4.        auth="Container"  
  5.        type="javax.sql.DataSource"  
  6.        maxActive="100"  
  7.        maxIdel="30"  
  8.        maxWait="10000"  
  9.        username="root"  
  10.        password="5982285"  
  11.        driverClassName="com.mysql.jdbc.Driver"  
  12.        url="jdbc:mysql://localhost/myblog"  
  13.     />  
  14.     <!—oracle数据源配置-->  
  15.     <Resource  
  16.        name="jdbc/oracleds"  
  17.        auth="Container"  
  18.        type="javax.sql.DataSource"  
  19.        maxActive="100"  
  20.        maxIdel="30"  
  21.        maxWait="10000"  
  22.        username="scott"  
  23.        password="tiger"  
  24.        driverClassName="oracle.jdbc.driver.OracleDriver"  
  25.        url="jdbc:oracle:thin:@localhost:1521:sky"  
  26.     />  

注:上面为mysql和Oracle配置了数据源,看个人需求而定,二者选其一。

属性说明:

name:数据源名称,这个随便,通常取为jdbc/XXX的格式

auth:Container容器

type:javax.sql.DataSource 注意是javax不是java

username:数据库用户名

password:数据库用户密码

maxIdle:最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。

maxActive:连接池的最大数据库连接数。设为0表示无限制。

maxWait:最大建立连接等待时间。设为-1表示无限制。

driverClassName:数据库完整的驱动类全称。

url:数据库链接

注:网上很多人都说需要在web.xml文件中再次配置,其实不配置也是可以的(本人就没有在web.xml配置,依然跑的很溜),另外有一个要特别注意的是要将数据源的jar包和数据库的驱动包放到tomcat的lib包中。


JNDI技术简介

JNDI(Java Naming and Directory Interface)即Java命名和目录接口,它对应于Java EE中的javax.naming包,这套API的主要作用:它可以把DataSource对象放在一个Tomcat容器中(JNDI容器),并为容器中的DataSource对象取一个名称,以后程序想获得DataSource对象,只需要通过名称检索即可。

JNDI的核心API为Context,它代表JNDI容器,核心方法是lookup()它的功能是检索容器中对应名称的对象。


连接池工具类:

[java]   view plain copy
  1. /** 
  2.  * 获取数据库连接的工厂 
  3.  * @author Liao 
  4.  */  
  5. public class ConnectionFactory {  
  6.   
  7.     private static DataSource dataSource;  
  8.       
  9.     static {  
  10.         try {  
  11.             //初始化查找命名空间  
  12.             Context context = new InitialContext();  
  13.             //找到DataSource  
  14.             dataSource = (DataSource) context.lookup("java:comp/env/ds_mysql");  
  15.         } catch (Exception e) {  
  16.             e.printStackTrace();  
  17.         }  
  18.     }  
  19.       
  20.     /** 
  21.      * 获取数据库连接 
  22.      */  
  23.     public static Connection getConnection(){  
  24.         try {  
  25.             //通过数据源获取连接然后返回  
  26.             return dataSource.getConnection();  
  27.         } catch (Exception e) {  
  28.             e.printStackTrace();  
  29.             return null;  
  30.         }  
  31.     }  
  32.       
  33.     /** 
  34.      * 关闭资源 
  35.      * @param conn 
  36.      * @param sta 
  37.      * @param res 
  38.      */  
  39.     public static void closeConnection(Statement sta, ResultSet res) {  
  40.         try {  
  41.             if (res != null) {  
  42.                 res.close();  
  43.                 res = null;  
  44.             }  
  45.             if (sta != null) {  
  46.                 sta.close();  
  47.                 sta = null;  
  48.             }  
  49.   
  50.         } catch (SQLException e) {  
  51.             e.printStackTrace();  
  52.         }  
  53.     }  
  54. }  
注:上述程序,没有关闭连接,是因为用完连接之后,连接又回到了连接池,处于空闲状态。


连接池配置常见错误:
Invalid byte 1 of 1-byte UTF-8 sequence.

原因:

在context.xml文件中使用了中文的注释(这个确实比较坑爹,但确实是这样的)。

解决方案:

把中文的注释去掉即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值