Tomcat數據源(DataSource)簡介

来源:http://www.cnblogs.com/jishushijie/archive/2016/12/03/6123585.html
-Advertisement-
Play Games

JDBC2.0提供了javax.sql.DataSource介面,它負責建立與資料庫的連接,在應用程式中訪問資料庫時不必編寫連接資料庫的代碼,可以直接從數據源獲得資料庫連接 1.資料庫和連接池 在DataSource中事先建立了多個資料庫連接,這些資料庫連接保存在連接池(ConnectPool)中。 ...


JDBC2.0提供了javax.sql.DataSource介面,它負責建立與資料庫的連接,在應用程式中訪問資料庫時不必編寫連接資料庫的代碼,可以直接從數據源獲得資料庫連接

1.資料庫和連接池

  在DataSource中事先建立了多個資料庫連接,這些資料庫連接保存在連接池(ConnectPool)中。java程式訪問資料庫時,只需要從連接池中取出空閑狀態的資料庫連接,當程式訪問資料庫結束,再將資料庫連接放回連接池,這樣做可以調高訪問資料庫的效率。

  如果Web應用每次接收到客戶的請求,都和數控建立一個連接,數控操作結束就斷開連接,這樣會消費大量的時間和資源。因為資料庫每次配置連接都要將Connection對象載入到記憶體中,再驗證用戶名和密碼。

2.數據源和JNDI資源

  由於DataSource對象是由Tomcat提供的,因此不能夠在程式中創建一個DataSource對象,而要採用JNDI技術來獲得DataSource對象的引用。

  可以簡單的把JNDI理解為一種將對象和名字綁定的技術,對象工廠負責生產出對象,這些對象都和唯一的名字綁定,外部程式可以通過名字來獲得某個對象的引用。在javax.naming包中提供了Context介面,該介面提供了將對象和名字綁定,以及通過名字檢索對象的方法。

  Context介面方法

方 法 描 述
bind(String name,Object obj) 將對象與一個名字綁定
lookup(String name) 返回與指定的名字綁定的對象

  Tomcat把DataSource作為一種可配置的JNDI資源來處理。生成DataSource對象的工廠org.apache.commons.dbcp.BasicDataSourceFactory。

3.配置數據源

  數據源的配置涉及修改server.xml和web.xml文件

  (1)在server.xml中加入<Resource>元素

    <Resource>元素用來定義JNDI Resource。例如:

    <Context path="/bookstore" docBase="bookstore" debug="0" reloadable="true">

    <Resource name="jdbc/BookDB" auth="Container" type="javax.sql.DataSource"/>

    <ResourceParams name="jdbc/BookDB">

      <parameter>

        <name>factory</name>

        <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>

      </parameter>

      

      <parameter>

        <name>maxActive</name>

        <value>100</value>

       </parameter>

 

      <parameter>

        <name>maxIdle</name>

        <value>30</value>

        </parameter>

 

      <parameter>

        <name>maxWait</name>

        <value>10000</value>

      </parameter>

     

      <parameter>

        <name>username</name>

        <value>dbuser</value>

      </parameter>

 

      <parameter>

        <name>password</name>

        <value>123456</value>

      </parameter>

 

      <parameter>

        <name>driverClassName</name>

        <value>com.mysql.jdbc.Driver</value>

      </parameter>

  

      <parameter>

        <name>url</name>

        <value>jdbc:mysql://localhost:3306/BookDB?autoReconnect=true</value>

      </parameter>

    </ResourceParams>

</Context>

 

<Resource>屬性說明:

  name:指定Resource的JNDI名字。

  auth:指定管理Resource的Manager.它有兩個值可選:Container和Application。Container表示由容器來創建和管理Resource,Application表示由Web應用來創建和管理Resource

  type:指定Resource所屬的JAVA類名。

在<ResourceParam>元素中指定了配置BookDB數據源的參數,<ResourceParam>元素的參數說明如下:

  factory:指定生成DataResource的factory類名。

  maxActive:指定資料庫連接池中處於活動狀態的資料庫連接的最大數目,取值為0,表示不受限制。

  maxIdle:指定資料庫連接池中處於空閑狀態的資料庫連接的最大數目,取值為0,表示不受限制。

  maxWait:指定資料庫連接池中的資料庫連接處於空閑狀態的最長時間(單位:毫秒),超過這一時間,將超時異常。取值為-1,表示可以無限等待。

  username:指定連接資料庫用戶名

  password:指定連接資料庫密碼

  driverClassName:指定連接資料庫的JDBC驅動

  url:指定連接資料庫的URL。

(2)在web.xml中加入<resource-ref>元素

  如果web應用訪問了由servlet容器管理的某個JNDI Resource,必須在web.xml文件中聲明對這個JNDI Resource的引用。表示資源引用的元素為<resource-ref>,以下是聲明應用jdbc/BookDB數據源代碼

  <webapp>

    <resource-ref>

      <description>DB Connection</description>

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

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

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

    </resource-ref>

  </webapp>

resource-ref屬性說明:

   description:指定所引用的資源的說明

   res-ref-name:指定所引用資源的JNDI名字,與<Resource>元素中name屬性對應

    res_type:指定所引用資源的類名,與<Resource>元素中的type屬性對應

   res-auth:指定管理所引用資源的Manager,與<Resource>元素中的auth屬性對應

 

4.程式中訪問數據源

  javax.naming.Context提供了查找JNDI Resource的介面,例如:可以通過以下代碼獲得jdbc/BookDB數據源的應用:

    Context ctx = new InitialContext();

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

  得到DataSource對象的引用後,就可以通過DataSource的getConnection()方法獲得資料庫的連接對象:

    Connection con = ds.getConnection();

  當程式結束資料庫訪問後,應該調用Connection的close()方法,及時將Connection返回資料庫連接池,使Connection恢復空閑狀態。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如標題所言,是做刪除ListView綁定項的功能的;鑒於這個功能當時確實花費了很多時間,並且網上也找不到刪除所需的案例,所以,我就做了一份案例,僅供各位前輩和同行進行參考,如有不當之處,還望指點,我將再接再勵,下麵進入正題: 按照需求我們是需要實現的功能:點擊刪除的時候,把整個Items給移除,最初 ...
  • 操作 MySql 資料庫使用 程式包(MySql 開發,其他第三方可能會有些問題)。 project.json 代碼: 測試資料庫腳本: sql CREATE TABLE ( int(11) NOT NULL AUTO_INCREMENT, varchar(255) DEFAULT NULL, in ...
  • Smobiler是一個在VS環境中使用.Net語言來開發APP的開發平臺,也許比Xamarin更方便 ...
  • 反骨仔的 2016 年度全文目錄索引 目錄 Linq 系列 非同步編程系列(一) 非同步編程系列(二) 委托與事件系列 C# 基礎回顧 .NET 相關 SQL 基礎梳理 其它 - 暫無分類 Linq 系列 走進 LINQ 的世界(推薦) 進階 - LINQ 標準查詢操作概述(強烈推薦) Linq To ...
  • 工欲善其事,必先利其器。如今 Web 開發標準越來越高,Web 開發者也在不斷尋找途徑提升自己的技能。為使大家的開發工作更順利進行,本文整理了 10+ 款比較優秀的 Web 開發工具,希望對你有幫助。 喜歡的不要忘了收藏、點贊和打賞哦,感謝大家的支持! Bootstrap Bootstrap 是快速 ...
  • 英文文檔: The constructor builds a tuple whose items are the same and in the same order as iterable‘s items. iterable may be either a sequence, a containe ...
  • 1、直接把表單的參數寫在Controller相應的方法的形參中,適用於get方式提交,不適用於post方式提交。若"Content-Type"="application/x-www-form-urlencoded",可用post提交 url形式:http://localhost:8080/SSMDe ...
  • 為瞭解決C++記憶體泄漏的問題,C++11引入了智能指針(Smart Pointer)。 智能指針的原理是,接受一個申請好的記憶體地址,構造一個保存在棧上的智能指針對象,當程式退出棧的作用域範圍後,由於棧上的變數自動被銷毀,智能指針內部保存的記憶體也就被釋放掉了,除非將智能指針保存起來。 C++11提供了 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...