国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
【轉(zhuǎn)】Java程序數(shù)據(jù)庫連接,數(shù)據(jù)源配置,數(shù)據(jù)庫連接池

  【轉(zhuǎn)】Java程序數(shù)據(jù)庫連接,數(shù)據(jù)源配置,數(shù)據(jù)庫連接池 收藏

Java程序數(shù)據(jù)庫連接,數(shù)據(jù)源配置,數(shù)據(jù)庫連接池

Java程序,用到的數(shù)據(jù)庫一定要配置數(shù)據(jù)源嗎?

一般寫小程序直接在程序里設(shè)置連接就可以了,而大的系統(tǒng)一般要配置數(shù)據(jù)源

數(shù)據(jù)源是要配置到中間件服務(wù)器中的(比如:Tomcat,JBoss,WebLogic一類的),配置后可以提高數(shù)據(jù)庫查詢性能,避免重復的打開和關(guān)閉數(shù)據(jù)庫。因此開發(fā)javaB/S項目時(就是J2EE的項目,通過瀏覽器訪問的項目),都會配置數(shù)據(jù)源連接。如果你寫的管理軟件是B/S結(jié)構(gòu),那么只需要在搭建環(huán)境的服務(wù)器上配置數(shù)據(jù)源就可以了,用戶訪問時是通過瀏覽器訪問,不需要做其他設(shè)置。如果是C/S(就是用戶需要單獨安裝客戶端程序,比如QQ),也不需要在用戶那里設(shè)置數(shù)據(jù)源,只需要在你的服務(wù)器端程序上手工配置好數(shù)據(jù)源即可。java實現(xiàn)數(shù)據(jù)庫操作,現(xiàn)在多數(shù)流行的都是JDBC,采用配置數(shù)據(jù)源的方式多數(shù)是用了框架的原因,比如Hibernate、EJBStruts、Spring。但是所有的數(shù)據(jù)源配置原理都是基于JDBC的操作。

1.直接編碼連接數(shù)據(jù)庫

JDBC (Java Database Connectivity)

JDBC以一種統(tǒng)一的方式來對各種各樣的數(shù)據(jù)庫進行存取,JDBC為開發(fā)人員隱藏了不同數(shù)據(jù)庫的不同特性。程序員開發(fā)時,知道要開發(fā)訪問數(shù)據(jù)庫的應(yīng)用,于是將一個對應(yīng)數(shù)據(jù)庫的JDBC驅(qū)動程序類的引用進行了編碼,并通過使用適當?shù)?/span>JDBC URL 連接到數(shù)據(jù)庫。

代碼示例: 

 

 

或者通過配置屬性文件的方式:

 

以上都是傳統(tǒng)的做法,這種做法一般在小規(guī)模的開發(fā)過程中不會產(chǎn)生問題,只要程序員熟悉Java語言、了解JDBC技術(shù)和各種數(shù)據(jù)庫,可以很快開發(fā)出相應(yīng)的應(yīng)用程序。

這種方式帶來的問題:

1、數(shù)據(jù)庫服務(wù)器名稱、用戶名和口令都可能需要改變,由此引發(fā)JDBC URL需要修改;
2
、數(shù)據(jù)庫可能改用別的產(chǎn)品,如改用DB2或者Oracle,引發(fā)JDBC驅(qū)動程序包和類名需要修改;
3
、隨著實際使用終端的增加,原配置的連接池參數(shù)可能需要調(diào)整;

解決辦法:
程序員應(yīng)該不需要關(guān)心具體的數(shù)據(jù)庫后臺是什么?JDBC驅(qū)動程序是什么?JDBC URL格式是什么?訪問數(shù)據(jù)庫的用戶名和口令是什么?等等這些問題,程序員編寫的程序應(yīng)該沒有對 JDBC 驅(qū)動程序的引用,沒有服務(wù)器名稱,沒有用戶名稱或口令 —— 甚至沒有數(shù)據(jù)庫池或連接管理。而是把這些問題交給J2EE容器來配置和管理,程序員只需要對這些配置和管理進行引用即可。由此,就有了JNDI,配置數(shù)據(jù)源。

2.配置數(shù)據(jù)源

JNDIJava Naming and Directory Interface

JNDI API被用于執(zhí)行名字和目錄服務(wù)。它提供了一致的模型來存取和操作企業(yè)級的資源如DNSLDAP,本地文件系統(tǒng),后者在應(yīng)用服務(wù)器中的對象。在JNDI中,在目錄結(jié)構(gòu)中的每一個結(jié)點稱為context。每一個JNDI名字都是相對于context的。應(yīng)用可以通過這個初始化的context經(jīng)由這個目錄樹來定位它所需要的資源或?qū)ο蟆?/span>

Tomcat中配置數(shù)據(jù)源獲得連接

 tomcat中通過JNDI服務(wù)獲得DataSource引用,通過DataSource獲得數(shù)據(jù)庫連接,步驟如下:
 1.
配置數(shù)據(jù)源JNDI服務(wù)
 2.
在應(yīng)用中通過JNDI使用javax.naming.Contextlookup方法來檢索DataSource引用
 3. DataSource
getConnection方法獲得連接

 

配置JNDI服務(wù)的代碼:

 

配置文件內(nèi)容:

 

在應(yīng)用中通過JNDI使用javax.naming.Contextlookup方法來檢索DataSource引用,DataSource獲得數(shù)據(jù)庫連接:

 

直接使用JDBC或者通過JNDI引用數(shù)據(jù)源的編程代碼量相差無幾,但是現(xiàn)在的程序可以不用關(guān)心具體JDBC參數(shù)了。在系統(tǒng)部署后,如果數(shù)據(jù)庫的相關(guān)參數(shù)變更,只需要修改配置文件中的JDBC參數(shù),只要保證數(shù)據(jù)源的名稱不變,那么程序源代碼就無需修改。由此可見,JNDI避免了程序與數(shù)據(jù)庫之間的緊耦合,使應(yīng)用更加易于配置、易于部署。JNDI在滿足了數(shù)據(jù)源配置的要求的基礎(chǔ)上,還進一步擴充了作用:所有與系統(tǒng)外部的資源的引用,都可以通過JNDI定義和引用。所以,在J2EE規(guī)范中,J2EE 中的資源并不局限于 JDBC 數(shù)據(jù)源。引用的類型有很多,其中包括資源引用、環(huán)境實體和 EJB 引用。特別是 EJB 引用,它暴露了 JNDI J2EE 中的另外一項關(guān)鍵角色:查找其他應(yīng)用程序組件。EJB JNDI 引用非常類似于 JDBC 資源的引用。在服務(wù)趨于轉(zhuǎn)換的環(huán)境中,這是一種很有效的方法。可以對應(yīng)用程序架構(gòu)中所得到的所有組件進行這類配置管理,從 EJB 組件到 JMS 隊列和主題,再到簡單配置字符串或其他對象,這可以降低隨時間的推移服務(wù)變更所產(chǎn)生的維護成本,同時還可以簡化部署,減少集成工作。

J2EE 規(guī)范要求所有 J2EE 容器都要提供 JNDI 規(guī)范的實現(xiàn)。JNDI J2EE 中的角色就是交換機” —— J2EE 組件在運行時,間接地查找其他組件、資源或服務(wù)的通用機制。在多數(shù)情況下,提供 JNDI 供應(yīng)者的容器可以充當有限的數(shù)據(jù)存儲,這樣管理員就可以設(shè)置應(yīng)用程序的執(zhí)行屬性,并讓其他應(yīng)用程序引用這些屬性(Java 管理擴展(Java Management Extensions,JMX)也可以用作這個目的)。JNDI J2EE 應(yīng)用程序中的主要角色就是提供間接層,這樣組件就可以發(fā)現(xiàn)所需要的資源,而不用了解這些間接性。在 J2EE 中,JNDI 是把 J2EE 應(yīng)用程序合在一起的粘合劑,JNDI 提供的間接尋址允許跨企業(yè)交付可伸縮的、功能強大且很靈活的應(yīng)用程序。

3.數(shù)據(jù)庫連接池

連接池是創(chuàng)建和管理多個連接的一種技術(shù),這些連接可被需要使用它們的任何線程使用。連接池技術(shù)基于下述事實:對于大多數(shù)應(yīng)用程序,當它們正在處理通常需要數(shù)毫秒完成的事務(wù)時,僅需要能夠訪問JDBC連接的1個線程。未處理事務(wù)時,連接處于閑置狀態(tài)。使用連接池,允許其他線程使用閑置連接來執(zhí)行有用的任務(wù)。事實上,當某一線程需要用JDBCMySQL或其他數(shù)據(jù)庫上執(zhí)行操作時,需要用到由連接池提供的連接。使用連接完成線程后,線程會將連接返回給連接池,以便該連接能夠被其他需要使用連接的線程使用。從連接池借出連接時,該連接僅供請求它的線程使用。從編程觀點看,其效果等同于每次需要JDBC連接時調(diào)用DriverManager.getConnection(),但是,采用連接池技術(shù),可通過使用新的或已有的連接結(jié)束線程。連接池技術(shù)能顯著增加Java應(yīng)用程序的性能,同時還能降低資源使用率。

連接池技術(shù)的主要優(yōu)點包括:

1 縮短了連接創(chuàng)建時間

創(chuàng)建新的JDBC連接會導致聯(lián)網(wǎng)操作和一定的JDBC驅(qū)動開銷,如果這類連接是循環(huán)使用的,使用該方式,可避免這類不利因素。

2)簡化的編程模型

使用連接池技術(shù)時,每個單獨線程能夠像創(chuàng)建了自己的JDBC連接那樣進行操作,從而允許使用直接的JDBC編程技術(shù)。

3)受控的資源使用

如果不使用連接池技術(shù),而是在每次需要時為線程創(chuàng)建新的連接,那么應(yīng)用程序的資源使用將十分浪費,而且在負載較重的情況下會導致無法預期的結(jié)果。

注意,與數(shù)據(jù)庫的每個連接均會在客戶端和服務(wù)器端造成一定的開銷(CPU、關(guān)聯(lián)轉(zhuǎn)換等)。每個連接均會對應(yīng)用程序和數(shù)據(jù)庫服務(wù)器的可用資源帶來一定的限制。無論連接是否執(zhí)行任何有用的任務(wù),仍將使用這些資源中的相當一部分。

連接池能夠使性能最大化,同時還能將資源利用控制在一定的水平之下,如果超過該水平,應(yīng)用程序?qū)⒈罎⒍粌H僅是變慢。

幸運的是,Sun公司通過JDBC-2.0“可選接口,完成了JDBC中連接池概念的標準化實施,所有主要應(yīng)用服務(wù)器均實施了能夠與MySQL Connector/J一起良好工作的這類API

通常,你可以在應(yīng)用服務(wù)器的配置文件中配置連接池,并通過Java命名和目錄接口(JNDI) 訪問它。使用連接池時需要牢記的最重要事項是,無論在代碼中出現(xiàn)了什么(異常、控制流等),連接以及由連接創(chuàng)建的任何部分(語句、結(jié)果集等)均應(yīng)被關(guān)閉, 以便能再次使用它們。如不然,它們將糾纏在一起,在最好的情況下,意味著它們所代表的數(shù)據(jù)庫服務(wù)器資源(緩沖區(qū)、鎖定、套接字等)可能會捆綁一段時間,在 最壞的情況下,可能會導致永久捆綁。

連接池的最佳大小是什么?

取決于具體情況。盡管最佳大小取決與預期的負載和平均的數(shù)據(jù)庫事務(wù)時間,最佳的連接池大小小于你的預期。例如,如果使用的是Sun公司的Java Petstore Blueprint應(yīng)用程序,對于包含1520個連接的連接池,使用MySQLTomcat,在可接受的相應(yīng)時間下,可服務(wù)于中等程度的負載(600個并發(fā)用戶)。要想確定用于應(yīng)用程序的連接池大小,應(yīng)使用諸如Apache JmeterThe Grinder等工具創(chuàng)建負載測試腳本,并對應(yīng)用程序進行負載測試。確定出發(fā)點的一種簡單方法是,將連接池的最大連接數(shù)配置為無限,運行負載測試,并測量最大的并發(fā)連接數(shù)。隨后,應(yīng)進行反向操作,確定出使應(yīng)用程序具有最佳性能的連接池的最小和最大值。

連接池與數(shù)據(jù)源區(qū)別?

數(shù) 據(jù)庫連接池是在應(yīng)用程序啟動時建立足夠的數(shù)據(jù)庫連接,并將這些連接組成一個連接池,由應(yīng)用程序動態(tài)地對池中的連接進行申請、使用和釋放。對于多于連接池中 連接數(shù)的并發(fā)請求,應(yīng)在請求隊列中排隊等待。并且應(yīng)用程序可根據(jù)池中連接的使用率,動態(tài)增加或減少池中的連接數(shù)。當關(guān)閉連接操作時,連接并不真正的關(guān)閉, 而是返回到連接池中作為空閑連接在后面繼續(xù)使用,連接池技術(shù)解決了數(shù)據(jù)庫連接頻繁打開關(guān)閉所帶來的性能問題。

有 了連接池,我們沒必要直接找數(shù)據(jù)源打交道了,連接池在你的程序所在的機器內(nèi)存,數(shù)據(jù)源不一定,并且數(shù)據(jù)源和連接池會保持一定數(shù)量的連接,這樣我們訪問數(shù)據(jù) 庫的時候就不需要找數(shù)據(jù)源要連接,直接在本地內(nèi)存中取得連接,可以提高程序的性能。連結(jié)池的存在是為了效率,因為實例化一個連接很耗費資源,而連接又有可 重用的特征,所以可以把一定數(shù)量的連接放在連接池里面以提高效率。

 

Tomcat自帶的數(shù)據(jù)庫連接池管理

C3p0數(shù)據(jù)庫連接池

數(shù)據(jù)庫連接池配置代碼:

 

配置文件:

 

 

 

【參考資料綜合】

 

http://hi.baidu.com/sunkangle/blog/item/55a9db7cb076a3330dd7dadb.html  

JDBCJNDI應(yīng)用比較

 

http://13243356.javaeye.com/blog/402961   

數(shù)據(jù)庫連接與數(shù)據(jù)源配置

 

http://hi.baidu.com/yaoming159/blog/item/5c4efe33e2122df31a4cfff5.html

JDBCJNDI區(qū)別

 

http://wenwen.soso.com/z/q155303937.htm?pid=wenwen.autologin 

java數(shù)據(jù)庫一定要配置數(shù)據(jù)源嗎?

 

 

http://hi.baidu.com/begin_think/blog/item/b959f9f45b67092ebd310973.htmlJNDI

JDBC比較以及連接池的技術(shù)

 

http://topic.csdn.net/u/20090311/10/f6ee00c1-34ed-42ef-b5aa-77d2c7a8e775.html 

連接池與數(shù)據(jù)源 分別起什么作用呢?

 

 

整理

By willowind

 

 

 

 

發(fā)表于 @ 2010年03月31日 16:59:00 | 評論( 4 ) | 編輯| 舉報| 收藏

舊一篇:【轉(zhuǎn)】Eclipse插件安裝總結(jié)

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
JNDI
JNDI與JDBC比較以及連接池的技術(shù) - Do-websoftware - 博客園
TOMCAT配置數(shù)據(jù)源 - - JavaEye技術(shù)網(wǎng)站
WebLogic配置數(shù)據(jù)源
Websphere 6.1下Oracle數(shù)據(jù)源配置
web技術(shù)中文論壇 - 任何web開發(fā)人員(java)需要必備的技巧
更多類似文章 >>
生活服務(wù)
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服