Tomcat配置数据源连接池

Tomcat配置Mysql数据源
本文介绍在Tomcat中配置Mysql数据源的三种方法,包括在context.xml、server.xml文件中配置及通过虚拟目录配置。同时提供测试代码验证配置正确性。

今天遇到了关于数据源连接池配置的问题,发现有很多种方式可以配置,现总结如下,希望对大家有所帮助:(已Mysql数据库为例)

  一、Tomcat配置数据源:

  方式一:在WebRoot下面建文件夹META-INF,里面建一个文件context.xml,内容如下:

  <Context>

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

       maxActive="50" maxIdle="30" maxWait="10000" logAbandoned="true"

       username="root" password="111111" driverClassName="com.mysql.jdbc.Driver"

       url="jdbc:mysql://localhost:3306/testdb" />

  </Context>

  方式二:在tomcat6.0的目录conf下面的context.xml中,修改原来的context标签,改成内容如下:

  <Context>

      <!-- Default set of monitored resources -->

      <WatchedResource>WEB-INF/web.xml</WatchedResource>

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

      maxActive="50" maxIdle="30" maxWait="10000" logAbandoned="true"

      username="root" password="111111" driverClassName="com.mysql.jdbc.Driver"

      url="jdbc:mysql://localhost:3306/testdb" />

  </Context>

  方式三:在配置虚拟目录时,也就是在配置conf下面的server.xml时,在context标签内改成如下形式:

  <Context path="/WebRoot" reloadable="true" docBase="E:/workspace/DataSource/WebRoot" >

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

      maxActive="50" maxIdle="30" maxWait="10000" logAbandoned="true"

      username="root" password="111111" driverClassName="com.mysql.jdbc.Driver"

      url="jdbc:mysql://localhost:3306/testdb" />

  </Context> 

  配置文件中Resource标签中各属性的含义:

  driverClassName - JDBC 所用到的数据库驱动的类全名.

  maxActive - 连接池在同一时刻内所提供的最大活动连接数。

  maxIdle - 连接池在空闲时刻保持的最大连接数.

  maxWait - 当发生异常时数据库等待的最大毫秒数 (当没有可用的连接时).

  password - 连接数据库的密码.

  url - 连接至驱动的URL. (为了向后兼容, DRIVERNAME也被允许.)

  user - 数据库用户名.

  各种配置方式的范围也应该是不一样的。我在这就不细说了,总之就是在Context标签下面配置个Resource标签即可。

  测试代码:

  Context initContext = new InitialContext();

  Context envContext  = (Context)initContext.lookup("java:/comp/env");

  DataSource ds = (DataSource)envContext.lookup("jdbc/test");

  System.out.println(ds.getConnection());

  打印出来不是null应该就成功了。

  注意,测试的时候要在tomcat内测试,也就是要在TOMCAT这个容器内(不要闲麻烦,写个简单的JSP页面测下,用个<%...%>就可以了,相当简单的)。不在tomcat这个容器里面测,会抛异常:

  ... javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

 

 

1. tomcat中添加jndi数据源,修改server.xml文件中<Context>标签的内容,如下所示

Xml代码 复制代码
  1. <Context docBase="TestDevon" path="/TestDevon"  
  2.                     reloadable="true" source="org.eclipse.jst.j2ee.server:TestDevon">  
  3.                     <Resource auth="Container" name="jdbc/mysql" type="javax.sql.DataSource" />  
  4.                     <ResourceParams name="jdbc/mysql">  
  5.                         <parameter>  
  6.                             <name>maxWait</name>  
  7.                             <value>5000</value>  
  8.                         </parameter>  
  9.                         <parameter>  
  10.                             <name>maxActive</name>  
  11.                             <value>20</value>  
  12.                         </parameter>  
  13.                         <parameter>  
  14.                             <name>factory</name>  
  15.                             <value>  
  16.                                 org.apache.commons.dbcp.BasicDataSourceFactory   
  17.                             </value>  
  18.                         </parameter>  
  19.                         <parameter>  
  20.                             <name>url</name>  
  21.                             <!-- value>jdbc:derby://localhost:1527/devonoffice?characterEncoding=euckr</value-->  
  22.                             <value>  
  23.                                 jdbc:mysql://localhost:3306/testdevon?autoReconnect=true  
  24.                             </value>  
  25.                         </parameter>  
  26.                         <parameter>  
  27.                             <name>driverClassName</name>  
  28.                             <value>  
  29.                                 com.mysql.jdbc.Driver   
  30.                             </value>  
  31.                         </parameter>  
  32.                         <parameter>  
  33.                             <name>maxIdle</name>  
  34.                             <value>10</value>  
  35.                         </parameter>  
  36.                         <parameter>  
  37.                             <name>username</name>  
  38.                             <value>root</value>  
  39.                         </parameter>  
  40.                         <parameter>  
  41.                             <name>password</name>  
  42.                             <value>lgcnschina</value>  
  43.                         </parameter>  
  44.                     </ResourceParams>  
  45.                 </Context>  

2. 确认MySql驱动是否存放在tomcat下的common/lib文件夹中

3. 测试数据源的配置是否成功

    (1) 在web.xml中添加如下代码

Xml代码 复制代码
  1. <resource-ref>  
  2.     <description>DataSource</description>  
  3.     <res-ref-name>jdbc/mysql</res-ref-name>  
  4.     <res-type>javax.sql.DataSource</res-type>  
  5.     <res-auth>Container</res-auth>  
  6. </resource-ref>  

    (2) 测试数据源

Java代码 复制代码
  1. <html>   
  2.     <head>   
  3.         <title>test jndi</title>   
  4.     </head>   
  5.     <body>   
  6. <%    
  7. Context initCtx = new InitialContext();     
  8. Context ctx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource) ctx.lookup("jdbc/mysql");    
  9. Connection conn = ds.getConnection();    
  10. Statement stmt = conn.createStatement();    
  11. ResultSet rs = stmt.executeQuery("select * from user_info");    
  12. while (rs.next()) {   
  13. %>   
  14.      <%=rs.getInt(1)%>   
  15. <%   
  16. }    
  17. rs.close();    
  18. stmt.close();    
  19. conn.close();    
  20. %>    
  21.     </body>   
  22. </html>  
<html>
    <head>
        <title>test jndi</title>
    </head>
    <body>
<% 
Context initCtx = new InitialContext();  
Context ctx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource) ctx.lookup("jdbc/mysql"); 
Connection conn = ds.getConnection(); 
Statement stmt = conn.createStatement(); 
ResultSet rs = stmt.executeQuery("select * from user_info"); 
while (rs.next()) {
%>
     <%=rs.getInt(1)%>
<%
} 
rs.close(); 
stmt.close(); 
conn.close(); 
%> 
    </body>
</html>

 

   

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值