关于Tomcat中数据源的配置,不同的版本方法略有不同,如果不注意这些差别,就会使得Web应用在不同环境中布署出现问题。
Tomcat 5的数据源配置跟Tomcat 5.5的数据源配置有很多的差别,Tomcat 6的数据源配置跟Tomcat 5.5的配置基本上相同。
这里用Tomcat6+MySQL来配置数据源:
在WebRoot目录下,新建一个META-INF的目录(假如不存在),在该目录下创建一个context.xml文件,(或conf目录下的全局context.xml),并且在context.xml文件当添加以下的配置信息(要根据自己的情况稍加修改):
这里选在META-INF下新建一个context.xml文件,该文件的内容为:
<Context> <Resource name="jdbc/dstest" auth="Container" type="javax.sql.DataSource" maxActive="5" maxIdle="2" maxWait="10000" username="root" password="root" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/dstest" /> </Context>
//Resource要根据你自己的情况配置
name: 指定数据源在容器中的JNDI名
maxActive:指定数据源最大活动连接数
maxIdle:指定数据源中最大的空闲连接数
maxWait:指定数据源中最大等待获取连接的客户端
username:指定连接数据库的用户名
password:指定连接数据库的密码
driverClassName:指定连接数据库的驱动
url:指定数据库服务的URL
在以往的tomcat当中还需要在web.xml指定相应的resource,在tomcat 5.5以后的版本不写也可以,但建议还是配置,配置如下:
<resource-ref> <description>Tomcat DataSource</description> <res-ref-name>jdbc/dstest</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
//这个很容易看懂,就做解释了。。。
最后,记得把mysql的驱动存放到%TOMCAT_HOME%/lib里面,这是必须的,不然,tomcat没有办法找到driver,也就没法帮你new.
Ok,配置完成,编写一个小小的程序测试下。
---------------------------------------------------------------------------
这里假设已经要上面的步骤配置好,
用MyEclipse新建一个Web Project, 项目名:DataSource
编写一个测试用的Servlet,放在wen.hui.ds这个包下, 代码如下:
package wen.hui.ds; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import javax.naming.Context; import javax.naming.InitialContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; public class TestDataSource extends HttpServlet { protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { try { Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("java:comp/env/dstest"); Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from user"); while(rs.next()) { System.out.println(rs.getString(1) + ", " + rs.getString(2)); } rs.close(); stmt.close(); } catch (Exception e) { e.printStackTrace(); } } }
在web.xml中配置servlet
<servlet> <servlet-name>test</servlet-name> <servlet-class>wen.hui.ds.TestDataSource</servlet-class> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping>
建一个数据库:
drop database if exists dstest;
create database dstest;
use dstest;
create table user(
username varchar(20) primary key,
password varchar(20) not null
);
insert into user values('wwh', '123');
insert into user values('wwf', '123');
insert into user values('wwe', '123');
部署项目, 访问http://localhost:8080/DataSource/test
后台输出:
wwe, 123
wwf, 123
wwh, 123