配置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的一个重点。