Java開發環境Tomcat (7.0)資料來源配置教程

來源:互聯網
上載者:User

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系統,所以應該盡量避免使用全域資料源。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.