您的位置:首页 > 运维架构 > Tomcat

Tomcat7配置数据源

2015-01-25 17:57 309 查看
Tomcat7配置数据源

今天看书的时候,终于知道tomcat的数据源是什么了意思了,以前在看的时候一直不知道,当我知道的时候,我便马上进行了实验,可是看似配置很简单,但是运行起来的时候,却不是那么容易了。我遇到了几个错误,调试挺长的时间后,就剩下了一个错误,可是这个错误提示的很明白“没有找到类”,这使我百思不得其解,我一直在想办法调试,我一直以为是我的某个属性值写错了,调了很长很长的时间,到了最后的时候,才发现是我的resource这个标签多加了字母,这让我感觉太哭笑不得了,怎么能犯这么低级的错误呢?之后又做了几次,终于没有错误了,这让我对tomcat的数据源有了更近一步的了解。下面我来说说配置吧!

从Tomcat的5.5这个版本开始,就内置的了对数据源的实现,所以可以非常方便的配置Tomcat的数据源,这里我使用的是Tomcat7这个版本的。Tomcat提供了两种配置数据源的方式,唯一的区别就是访问的范围不一样,一个是全局的数据源,一个是局部的数据源,大家听了这个名字就知道它们的访问的范围了。全局的数据源是可以让服务器下的所有Web应用访问的,而局部的数据源只能让服务器下的某一个Web应用访问。不同于微软操作系统上自带的odbc的数据源,Tomcat的数据源是基于jdbc这种连接方式的。它将得到连接的那些代码做了一个数据源,通过该数据源可以很方便获得数据库连接的那个Connection对象,不用每一次都进行加载驱动,得到连接的设置了。既然是jdbc的方式,那么就需要对应的数据库的jdbc驱动程序,这里我要连接的mysql和oracle数据库,驱动程序都放在了Web应用下的lib文件夹下,也有的人将该驱动放入到Tomcat的安装目录下的lib文件夹下,这是一样的,只不过这样做就不用每次都将驱动放入到lib文件夹下了。对于局部数据源的配置只需要修改两处即可,修改该Web应用的Context处,和Web.xml文件。对于Tomcat的应用来说,部署该应用通常有四种方式,对于其中的手动部署的方式通常借助于Context这个标签来进行,如果你的Web应用使用Context进行部署的化,那么在该Context的内部加上如下的语句:

<!—这是针对MySQL数据库的-->

<Resource name="jdbc/mysql"

auth="Container"

type="javax.sql.DataSource"

driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://localhost:3306/longyu"

username="root"

password="longyu"

maxActive="5"

maxIdle="2"

maxWait="10000"/>

<!—这是针对Oracle数据库的-->

<Resource name="jdbc/oracle"

auth="Container"

type="javax.sql.DataSource"

driverClassName="oracle.jdbc.driver.OracleDriver"

url="jdbc:oracle:thin:@localhost:1521:orcl"

username="scott"

password="tiger"

maxActive="5"

maxIdle="2"

maxWait="10000"/>

其中各项的含义是:

name属性指定了数据源在容器中的JNDI(即Java Naming Directory Interface,Java命名和目录接口,就是为Java对象起了一个名字,而用在数据源中便是为数据源起了名字,同过这个名字可以让其他程序来访问该数据源对象)名;

auth属性指定了认证方式为container;

type属性指定了数据源的类型,一般都使用javax.sql.DataSource这个类;

driverClassName属性指定了连接数据库的驱动;

url属性指定了连接数据库服务的URL;

username属性指定了连接数据库的用户名;

password属性指定了连接数据库的密码;

maxActive属性指定了数据源最大的活动连接数;

maxIdle属性指定了数据池中最大的空闲连接数;

maxWait属性指定了数据池中最大等待获取连接的客户端。

接下来要修改Web.xml文件,在其中为相应的数据源添加相应的语句,如下所示:

<!—这是针对MySQL数据库的-->

<resource-ref>

<description>Java JDBC</description>

<res-ref-name>jdbc/mysql</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>

<!—这是针对Oracle数据库的-->

<resource-ref>

<description>Java JDBC</description>

<res-ref-name>jdbc/oracle</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>

其中“<res-ref-name>jdbc/mysql</res-ref-name>”中的值要与Resource的name属性值一样。接下来就是要编写测试文件了。内容如下:

[html] view
plaincopyprint?

<span style="font-size:12px;"><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ page import="java.sql.*,javax.sql.*,javax.naming.*" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>

<head>

<title>My JSP 'tomcatTest.jsp' starting page</title>

</head>

<body>

<%

Context ctx = new InitialContext();

DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");

Connection con = ds.getConnection();

Statement st = con.createStatement();

ResultSet rs = st.executeQuery("select * from t_student");

while(rs.next())

{

out.println("<h1>"+rs.getString(1)+"</h1>");

}

rs.close();

st.close();

con.close();

%>

</body>

</html>

</span>

经过测试上述页面就可以连接到oracle数据库和MySQL数据库了。

注意:在每次进行连接数据库的时候都要写上如下的几句话,这些都是固定的,其中第二句的lookup里参数前面一定要加上“java:comp/env”的字符串,否则会出现错误。而且使用这样的方式一定要导入的包是java.sql包,javax.sql包,和javax.naming包下的文件,要不然也会出现错误。

Context ctx = new InitialContext();

DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/oracle");

Connection con = ds.getConnection();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: