JNDI
一、 為什麼要有JNDI
1. JDBC
JDBC操作數據庫的四個步驟:
加載數據庫驅動程序( Class.forName("數據庫驅動類"); )
連接數據庫( Connection con = DriverManager.getConnection() ; )
操作數據庫( Query query = con.prepareStatement(sql).executeQuery ; )
關閉數據庫,釋放連接( con.close() ; )
2. 連接池
所有用戶都需要經過四步操作,但有三步(加載數據庫驅動、連接數據庫、關閉連接)對所有都是一樣
的,只是在操作數據庫上是不一樣的,那麼就造成了性能損耗。
做法:準備一個空間,此空間專門保存全部數據庫連接,以後用戶操作數據庫時直接從空間中取連接,
釋放連接,這就是連接池
3. 連接池的疑慮?
1. 如果沒有任何一個用戶使用連接,那麼應該維持一定數量的連接,等待使用。
2. 如果連接已經滿了,則必須打開新的連接,供更多用戶使用。
3. 如果一個服務器只能有 100個連接,那麼如果有 101個人?應該等待其他用戶釋放連接。
4. 如果一個用戶等待時間太久,則應該告訴用戶,操作是失敗的。
4. Tomcat服務增加數據源配置
Tomcat 4.1.27後增加數據源的配置選項,在服務器上保存著一個數據庫的多個連接。每一個連接通過DataSource可以找到。DataSource 被綁定在 JNDI樹上(為每個DataSource提供一個名字)客戶端通過名稱找到JNDI樹上綁定的DataSource,再由DataSource找到一個連接。
!
那麼在以後操作中,除了連接方式不同,其他操作都一樣,只是關閉的時候不是徹底地關閉數據庫,而是把連接放回連接池中。
二、JNDI 簡介及優點
1. JNDI定義
1) JNDI java命名與文件夾接口(Java Naming And Directory Interface)
2) 區別JDBC:
jdbc 是 java去找數據庫驅動,jndi 是通過你的服務器配置(如:Tomcat)的配置文件 context來找數據
庫驅動。
3) JNDI已成為 J2EE 的標準之一,所有的 J2EE容器都必須提供一個 JNDI的服務器。(就是Tomcat等服務器)
*4) 為什麼使用了連接池還要用 JNDI?*
為了數據庫資源的管理,在容器中配置一個數據庫連接池,使用 JNDI來管理 這樣容器中運行多個服務的
時候,每個服務只需添加一個 jndi 的名稱就可以連接帶數據庫了。
如果不使用 JNDI的方式,直接在項目中配置數據庫連接池,那麼每個項目需要配置一次,如果更改數據
庫地址時,每個項目的數據庫連接方式都要更改,使用 JNDI 時,直接更改 JNDI 裡面的數據庫連接池的配置
就可以了。
一般來說如果目標客戶有專業的應用服務器,比如 WebSphere、WebLogic,就不需要在代碼中配置特定的連接池。
三、JNDI 在 Tomcat中的配置(全局配置)
1. 添加驅動包
例:
mysql : mysql-connect-java-***.jar
- 打開server.xml 文件 ( conf / server.xml)
- 默認 Resource配置
- !
- 更改Resource 配置
-
- name="jdbc/mysql"
- 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/cy?useUnicode=truecharacterEncoding=utf-8"/>
- 在項目的META-INF 下面建 context.xml 文件
- `
`
圖片添加就卡
閱讀更多 給我一杯溫開水 的文章