一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Java开发环境Tomcat (7.0)数据源配置教程

时间:2015-07-12 编辑:简简单单 来源:一聚教程网

Tomcat的Java Web容器下配置DataSource(数据源)对象。JDBC中的javx.sql.DataSource接口负责建立于数据库的连接,程序中直接从数据源中获取数据库连接。DataSource对象由Servlet容器Tomcat进行管理,其实获取数据库连接是从连接池中选取空闲连接。它基于Java中的JNDI(Java 命名与目录接口)来实现。

一、所有项目共用一个连接池

1、配置数据源context.xml:

tomcat 的conf 目录下有context.xml 文件,这个文件就是配置数据源的。

在tomcat->conf->context.xml文件配置内容:


   name="jdbc/mysql"

   auth="Container"

   type="javax.sql.DataSource"

   maxActive="20"

   maxIdel="10"

   maxWait="1000"

   username="root"

   password="admin"

  driverClassName="com.mysql.jdbc.Driver"

   url="jdbc:mysql://127.0.0.1:3306/user" >



将 jdbc 驱动添加到Tomcat 的lib  目录下

2、配置JNDI资源引用web.xml:
在 项目的web.xml的    中添加如下内容:

       
          jdbc/mysql   
          javax.sql.DataSource    
          Container   
       
   

使用相对简单些的JNDI资源访问方式lookup方法,如下:

    Context sourceCtx = new InitialContext();
    DataSource ds =(DataSource)sourceCtx.lookup("java:comp/env/jdbc/mysql");
    conn = ds.getConnection();

ok 到这里数据库链接就获取到了


二、每个Web项目独立用自己连接池配置:把xml内容放入一个具体的项目目录

1、配置数据源context.xml:
在该项目目录的META-INF,创建context.xml,其实这个配置和tomcat/conf/context.xml这个文件是一样的,可以直接将那个context.xml 文件复制过来

内容如下:

            
             
                   name="jdbc/mysql"    
          type="javax.sql.DataSource"    
          driverClassName="com.mysql.jdbc.Driver"    
          maxIdle="2"    
          maxWait="5000"    
          username="root"     
          password="admin"    
          url="jdbc:mysql://localhost:3306/user"    
          maxActive="4"/>   
         
   
       

然后把JDBC驱动导入到 WEB-INF 下的lib文件夹里

2、配置JNDI资源引用web.xml:

并在该项目web.xml  加入

 
  jdbc/mysql
  javax.sql.DataSource
  Container
 



JNDI 获取数据源,数据库链接:

Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/mysql");
Connection conn = ds.getConnection();

********************* 元素属性说明**********************

元素的属性说明:

Name:指定Resource资源的JNDI名称;

auth:可选填Container或Application,指定Resource的管理者;

type:指定Resource资源的Java类名;

maxActive:设置数据库连接池中活动状态连接的最大数目,为0则不受限制;

maxIdle:设置数据库连接池中空闲状态连接的最大数目,为0则不受限制;

maxWait:设置数据库连接池中空闲状态连接的最长等待时间,超时则抛出异常,为-1则可无限等待;

username:指定数据库的用户名;

password:指定连接数据库的密码;

driverClassName:指定数据库的JDBC驱动器的Driver实现类名字(这里为MySQL数据库连接);
url:连接数据库的url。

*******************************************************

元素的子元素说明:

description:对所引用JNDI资源的描述;

res-ref-name:引用的JNDI资源的名称,与上面元素中的name属性一致;

res-type:引用的JNDI资源的类名称,与上面元素中的type属性一致;
res-auth:引用资源的管理者,上面元素中的auth属性一致;



J2EE环境搭建 配置Tomcat 7.0的局部数据源

配置Tomcat 7.0的局部数据源方面的内容,对于J2EE环境搭建,这里使用的是MySQL


1.配置MySQL的JDBC驱动

(1)下载MySQL的JDBC驱动,这里用的是mysql-connector-java-5.1.17-bin.jar。

(2)将该jar文件复制到Web应用的lib目录下。

2.下载安装MySQL

这里要求MySQL的版本在5.1以上,我安装的是mysql-essential-5.1.65-win32.msi。

在安装时选择Custom方式,到达配置时选择GBK编码方式,用户名root(默认),密码123456(自定吧)。

在安装完成后,可以打开MySQL安装目录下的my.ini文件进行查看修改:


例如这里的端口号是3306,默认的字符编码方式为GBK等。

然后在环境变量中配置数据库的路径:

%PATH%; F:\software\J2EE\MySQL\bin

之后可以打开MySQL的命令行查看,打开方式有多种:

方法一:可以在开始菜单中搜索MySQL,然后打开MySQL Command Line Client。


打开后输入密码123456即可:


方法二:也可以将bin目录下的mysql.exe(直接打开的话会闪退)复制一个快捷方式到某个盘中例如F盘,然后用cmd打开。注意直接输入mysql.exe由于没有密码是被拒绝访问的,因此必须输入用户名和密码:


然后输入

mysql> select version(), current_date;

可以查看版本信息和当然日期。

输入

mysql>quit

可以退出MySQL程序,当然输入exit可以直接退出命令行窗口。

3.建立一个数据库和表

可以通过MySQL语句建立,可以通过sql成批处理导入脚本,也可以用图形界面的MySQL管理软件导入。

下面说说前面两种方法:

方法一:通过MySQL语句建立

像2那样打开mysql.exe,然后输入下列命令

1)创建并选择数据库javaee

mysql> CREATE DATABASE javaee;

mysql> USE javaee;

2)在javaee数据库中创建表格news_inf

mysql>create table news_inf

->( news_id int primary key auto_increment,

-> news_title varchar(255));

3)往表格news_inf中插入数据

mysql>insert into news_inf values

->(null , 'Jimmy Lee'),

->(null , 'is SB');

4)查看数据库的内容

mysql> USE javaee;

mysql> SHOW TABLES;

可以看到javaee中多了一个表格news_inf。


如果要删除数据库javaee,可以输入

drop database javaee;

方法二:直接导入脚本

首先建立一个sql文件,代码如下:

drop database javaee;
create database javaee;
use javaee;

create table news_inf
(
 news_id int primary key auto_increment,
 news_title varchar(255)
);

insert into news_inf
values
(null , 'Jimmy Lee'),
(null , 'is SB');

将该文件复制到一个便于使用的路径,例如F盘目录下。

然后打开mysql.exe,输入

mysql>source f:/test.sql;

之后可以看到命令行窗口输入Query OK等信息。

4.部署程序和配置局部数据源

(1)将程序部署到Tomcat中,方法有多种,在(一)中已经说过,这里不再赘述。

首先看看jsp程序的代码:

<%--
网站: 一聚教程
version  1.0
Copyright (C), 2001-2012, yeeku.H.Lee
This program is protected by copyright laws.
Program Name:
Date:
--%>

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@ page import="javax.naming.*,java.sql.*,javax.sql.*" %>
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


 测试Tomcat数据源


<%
//初始化Context,使用InitialContext初始化Context
Context ctx=new InitialContext();
/*
通过JNDI查找数据源,该JNDI为java:comp/env/jdbc/dstest,分成两个部分
java:comp/env是Tomcat固定的,Tomcat提供的JNDI绑定都必须加该前缀
jdbc/dstest是定义数据源时的数据源名
*/
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/dstest");
//获取数据库连接
Connection conn=ds.getConnection();
//获取Statement
Statement stmt=conn.createStatement();
//执行查询,返回ResulteSet对象
ResultSet rs=stmt.executeQuery("select * from news_inf");
while(rs.next())
{
 out.println(rs.getString(1)
  + "\t" + rs.getString(2) + "
");
}
%>

这里直接使用了疯狂Java一书作者李刚先生的例子代码。这里的局部数据源对应的JNDI自定义名字为jdbc/dstest。

(2)修改当前工程的WEB-INF目录下的web.xml文件,在web元素中添加以下子元素:

auth="Container"

type="javax.sql.DataSource"

driverClassName="com.mysql.jdbc.Driver"

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

username="root"

password="123456"

maxActive="5"

maxIdle="2"

maxWait="10000"/>

其中name指定JNDI名字,driverClassName为该JNDI的类型。url指定其路径(3306为MySQL程序的端口,javaee为要访问的数据库),username和password要和自定的用户名密码匹配。其他信息以上代码注释已有详细说明。

作用是为本工程配置一个JNDI(Java命名和目录接口,用于为自己创建的Java对象命名)。

立即运行的话,会发现如下错误:

org.apache.jasper.JasperException: javax.servlet.ServletException: javax.naming.NameNotFoundException: Name jdbc is not bound in this Context

原因在于创建的JNDI在Tomcat的Context上下文环境中找不到该变量的声明。

(3)配置Tomcat的context.xml

因此还需要在Tomcat的conf目录下的context.xml中加入以上Resource元素。有些资料说还要在Catalina/localhost目录新建一个相应的xml文件,经验证是不需要的。

现在重启Tomcat的startup.bat,再打开本程序,即可看到数据库javaee中的news_inf表格中的内容:


以上是为Tomcat 7.0配置局部数据源的方法,也就是该数据源仅限于某一个工程中的程序使用,如果需要配置全局数据源,那么必须修改Tomcat的server.xml文件,引用教材的话:这样做可能导致破坏Tomcat系统,所以应该尽量避免使用全局数据源。


热门栏目