[標題]:[轉]Tomcat配置JNDI數據源
[時間]:2009-6-12
[摘要]:在Tomcat中配置JNDI數據源
[關鍵字]:MySQL,JDBC,Driver,Tomcat,JNDI,DataSource
[環境]:Tomcat6,mysql-connector-java-5.1.7-bin.jar
[作者]:Winty (wintys@gmail.com) http://www.tkk7.com/wintys
[正文]:
1、將MySQL JDBC驅動(mysql-connector-java-5.1.7-bin.jar)放到%TOMCAT_HOME%"lib目錄下。注意,不要放到webapps/myjdbc的WEB-INF目錄中,否則可能出現"SQL Exception:Cannot load JDBC driver class 'com.mysql.jdbc.Driver' "。
2、在Tomcat的webapps目錄創建一個工程目錄,例如myjdbc。在myjdbc目錄下創建META-INF目錄,在此目錄下創建一個context.xml文件,里面的內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/mysql_ds_db"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/db"/>
</Context>
Tomcat標準數據源資源工廠配置項如下:
* driverClassName - 所使用的JDBC驅動類全稱。
* maxActive - 同一時刻可以自數據庫連接池中被分配的最大活動實例數。
* maxIdle - 同一時刻數據庫連接池中處于非活動狀態的最大連接數。
* maxWait - 當連接池中沒有可用連接時,連接池在拋出異常前將等待的最大時間,單位毫秒。
* password - 傳給JDBC驅動的數據庫密碼。
* url - 傳給JDBC驅動的連接URL。
* user - 傳給JDBC驅動的數據庫用戶名。
* validationQuery - 一個SQL查詢語句,用于在連接被返回給應用前的連接池驗證。
如果指定了該屬性,則必為至少返回一行記錄的SQL SELECT語句。
3、在myjdbc目錄下創建WEB-INF目錄,創建web.xml文件,內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mysql_ds_db</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
說明:
<resource-ref>
<descrtiption>引用資源說明</descrtiption>
<res-ref-name>引用資源的JNDI名</res-ref-name>
<res-type>引用資源的類名</res-type>
<res-auth>管理者(Container)</res-auth><!--Container-容器管理 Application-Web應用管理-->
</resource-ref>
4、測試
JSP測試:
<%@page contentType="text/html;charset=GBK" %>
<%@ page import="java.sql.*,javax.sql.*,javax.naming.*" %>
2009-6-9
測試Tomcat JNDI 數據源:<br/>
<%
Connection conn = null;
try{
//初始化查找命名空間
Context ctx = new InitialContext();
//InitialContext ctx = new InitialContext();亦可
//找到DataSource,對名稱進行定位java:comp/env是必須加的,后面跟你的DataSource名
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mysql_ds_db");
//取出連接
conn = ds.getConnection();
out.println("connection pool connected !!");
} catch (NamingException e) {
out.println("Naming Exception:" + e.getMessage());
} catch (SQLException e) {
out.println("SQL Exception:" + e.getMessage());
}finally{
if(conn != null)
conn.close();//注意不是關閉,是放回連接池.
}
%>
或寫個JSP用標簽庫測試一下:
<%@page contentType="text/html;charset=GBK" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<sql:setDataSource
dataSource="jdbc/mysql_ds_db"
var="ds" />
<sql:query var="query" dataSource="${ds}" >
select * from bookauthor
</sql:query>
<c:forEach var="row" items="${query.rows}">
authorId:<c:out value="${row.authorId}" /><br/>
authorName:<c:out value="${row.authorName}" /> <br/>
<br/>
</c:forEach>
[參考資料]:
[1] Tomcat配置JNDI數據源: http://www.tkk7.com/supercrsky/archive/2009/05/01/174931.html
[2] Tomcat 6.0 設置 JNDI 數據源 : http://www.tkk7.com/Michael-Q/archive/2008/03/26/188867.html
posted on 2009-06-12 12:43
天堂露珠 閱讀(434)
評論(0) 編輯 收藏 所屬分類:
Java