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檔案配置內容:
<Resource
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" >
</Resource>
將 jdbc 驅動添加到Tomcat 的lib 目錄下
2、配置JNDI資源引用web.xml:
在 項目的web.xml的 <web-app> </web-app>中添加如下內容:
<resource-ref>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource </res-type>
<res-auth>Container</res-auth>
</resource-ref>
使用相對簡單些的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 檔案複製過來
內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/">
<Resource
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"/>
</Context>
然後把JDBC驅動匯入到 WEB-INF 下的lib檔案夾裡
2、配置JNDI資源引用web.xml:
並在該項目web.xml <web-app> </web-app>加入
<resource-ref>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
JNDI 擷取資料來源,資料庫連結:
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/mysql");
Connection conn = ds.getConnection();
********************* 元素屬性說明**********************
<Resource>元素的屬性說明:
Name:指定Resource資源的JNDI名稱;
auth:可選填Container或Application,指定Resource的管理者;
type:指定Resource資源的Java類名;
maxActive:設定資料庫連接池中活動狀態串連的最大數目,為0則不受限制;
maxIdle:設定資料庫連接池中空閑狀態串連的最大數目,為0則不受限制;
maxWait:設定資料庫連接池中空閑狀態串連的最長等待時間,逾時則拋出異常,為-1則可無限等待;
username:指定資料庫的使用者名稱;
password:指定串連資料庫的密碼;
driverClassName:指定資料庫的JDBC磁碟機的Driver實作類別名字(這裡為MySQL資料庫連接);
url:串連資料庫的url。
*******************************************************
<resource-ref>元素的子項目說明:
description:對所引用JNDI資源的描述;
res-ref-name:引用的JNDI資源的名稱,與上面<Resource>元素中的name屬性一致;
res-type:引用的JNDI資源的類名稱,與上面<Resource>元素中的type屬性一致;
res-auth:引用資源的管理者,上面<Resource>元素中的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程式的代碼:
<%--
網站: <a href="http://www.111cn.net">雲棲社區</a>
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.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>測試Tomcat資料來源</title>
</head>
<body>
<%
//初始化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) + "<br/>");
}
%>
</body>
</html>
這裡直接使用了瘋狂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系統,所以應該盡量避免使用全域資料源。