日期:2014-05-16  浏览次数:20816 次

配置tomcat6创建mysql连接池
  刚做完一个小项目,是用普通的JDBC方式取得与数据库的连接的,现在想用数据库连接池的方式取得与数据库的连接,提高访问的效率。于是花了一下午去弄这个连接池的实现,我用的是tomcat6.x和mysql的数据库,刚开始的时候配置总是出错,提示 Cannot create JDBC driver of class '' for connect URL '',在网上查了有关的资料,说的方法都要么不全面要么观点不一致,经过总结和实验结果,终于配置通过,下面分享一下我的配置过程,没什么复杂的东西但是清楚了可以节省很多时间在这上面。
1.首先把mysql的驱动程序拷贝到tomcat根目录下的lib目录,原来我的工程的lib目录下也考了驱动程序但是会出错提示找不到驱动,所以根目录下的lib目录还是要考一个。
2.配置tomcat根目录/conf下的server.xml文件,在<GlobalNamingResources>标签中插入如下标签:
<Resource 
name="jdbc/Testcp" 
auth="Container" 
								 type="javax.sql.DataSource"
								driverClassName="com.mysql.jdbc.Driver" 
								url="jdbc:mysql://localhost:3306/bbs?autoReconnect=true"
maxActive="50" 
maxldle="10" 
maxWait="5000"
username="root"
password="admin" 
		/>  

上面标签的具体含义我就不解释了,接着在<HOST>标签中插入如下标签:
<Context path="/Testconnpool" debug="5" reloadable="true" crossContext="true">
         <ResourceLink name="jdbc/Testcp" global="jdbc/Testcp" type="javax.sql.DataSource"/>
        </Context>

其中的jdbc/Testcp可以使随意的名字,path="/Testconnpool"代表你的访问路径,网上说可以在工程的META-INF目录下建立context.xml文件把上面的配置写到那里面去我试过了好像不行,再接着在你工程的web.xml文件中作如下配置:
<resource-ref>
  	<description>DB Connection</description>
  	<res-ref-name>jdbc/Testcp</res-ref-name>
  	<res-type>javax.sql.DataSource</res-type>
  	<res-auth>Container</res-auth>
  </resource-ref>

但是我通过实验发现没有配置这一步也没有问题,但是配置了就一定要配置对了,jdbc/Testcp和上面的配置是一样的。
3.最后写一个JSP测试一下就可以了,下面是一个简单的测试代码:
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<%@ page import = "java.sql.*" %>
<%@ page import = "javax.naming.*"%>
<%@ page import = "javax.sql.*" %>

<%
	DataSource ds = null;
	Context initCtx = new InitialContext();
	ds = (DataSource)initCtx.lookup("java:comp/env/jdbc/Testcp");
	Connection conn = ds.getConnection();
	Statement stmt = conn.createStatement();
	ResultSet rs = stmt.executeQuery("select * from article");
	while(rs.next()){
		out.println(rs.getString("title")+"<br>");
	}
        rs.close();
        stmt.close();
        conn.close();
%>

上面的conn.close()并没有真正的关闭连接,而是把连接返回了连接池,因为连接池创建连接的方式和DriverManager.getConnection的方式不一样。这里使用的是tomcat自带的连接池,也可以使用如dbcp,c3p0,proxypool等数据库连接池,当然也可以自己实现如果你很有信心并且不怕麻烦的话呵呵。
基本的配置完成了,但其中的原理还有待研究,JNDI方面的内容是JAVA EE的一个重点。