看板 java 關於我們 聯絡資訊
※ 引述《lueichun (no anonymous)》之銘言: : 如果現在想要在java程式連線到資料庫 : 除了使用JDBC API : 也可以設定連線池取得連線 : 我的理解是先在context.xml加入這幾行設定: : https://www.dropbox.com/s/x1t2l71imsy53qa/%E6%93%B7%E5%8F%96103.png?dl=0 : 用來設定連線到資料庫的資訊與連線池的設定 : 但是我不是很清楚在這邊設定資料庫連線資訊 : 跟用JDBC API的方式來連線差在哪裡(是因為效能的關係嗎) 根據小弟的粗淺認知,好處大概是: 1. ap server幫你管理好db connection數量、釋放資源、錯誤處理等等 2. 未來若是佈署環境有變動,例如更換ap server,只要在ap server端改設定 可以"盡量"不去動到程式碼 **暗黑效果** 3. 有些ap server的設定檔藏得很好,好到你只會想用管理介面來修改設定,比起 用properties的方式安全點 : 而且我也不是很懂連接資料庫的資訊跟連線池的設定 : 為何可以被包在同一個tag裡,一起做設定 : 因為資料庫跟連線池應該是兩個分開的部分 : 然後設定name="jdbc/xxxx"的部分,google到的說法是要設定jndi name : jndi name是可以理解成: : java程式為取得連線池的連線以連接資料庫 jndi是存取資源的一種統一介面,不僅僅只有存取資料庫連線的功能而已 只要server端提供jndi的實作,都可以透過jndi來存取,例如AD Server等 : 所以程式必須利用jndi name找到連線池 : 以取得連線嗎 你要在code裡面用jdbc硬幹也可以,只是這樣就沒了使用jndi的優點 : 這樣的話以下在web.xml裡的設定: : https://www.dropbox.com/s/u82pyuph48ye58i/%E5%9C%96%E7%89%871.png?dl=0 : 這裡又重複設定一次jndi name : 我就不懂了,不懂這裡再打一次的目的是什麼 參考你用的ap server所提供的手冊 : 最後在java程式裡面 : 產生dtasource物件並取得連線 : code長這樣: : https://dl.dropboxusercontent.com/u/63402326/%E5%9C%96%E7%89%872.png
: datasource物件之後會call getConnection取得連線 : 只是我覺得一個datasource不是表示一個資料庫嗎 DataSource是資料來源的泛稱,可以是資料庫,也可以是其他資料來源 : 資料庫內含取得連線池連線的方法(getConnection) : 感覺不太自然,畢竟資料庫跟連線池是兩個分開的東西 是說從資料庫給的api來取connection pool以後再拿到connection逆? 這樣幹的好處大概是connection取得跟釋放有connection pool幫忙管 不過最好了解一下相關設定(例如怎麼設定connection數量) : 希望有大大可以解惑(套色部分),謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.117.0.66 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1427314145.A.982.html
lueichun: 我現在的理解是如果成是要從連線池取得連線的話 03/26 23:17
lueichun: 首先在comtext.xml設定連線管理工具,相當於是 03/26 23:18
lueichun: new一個連線管理工具的物件在xml檔裡,這個物件的名稱 03/26 23:20
lueichun: 就是jdbc/xxx 之後程式要利用這個連線管理工具從連線池 03/26 23:21
lueichun: 取得連線,因此call initialContext(),取出剛剛new的 03/26 23:23
lueichun: 管理工具物件 然後再利用資料庫的名稱(jndi/xxx)找到資 03/26 23:25
lueichun: 料庫 回傳datasource物件 03/26 23:29
lueichun: 只是我在這邊就卡住了 不懂datasource物件為何可以 03/26 23:32
lueichun: getConnection 在JDBC對應的方法叫driverManager.getCon 03/26 23:32
lueichun: ection datasource跟driverManager不管怎麼看都不像 03/26 23:33
lueichun: 為何會有一樣的方法 03/26 23:34
lueichun: 自問自答一下 在JAVA程式如果要用連線池連線到資料庫 03/29 00:19
lueichun: 的話 SUN官方有推出相對應的規格 叫做JNDI API 這份API 03/29 00:20
lueichun: 是由各家伺服器去實作 我們只要拿來用就可連線到資料庫 03/29 00:21
lueichun: 第一步是要設定連線到資料庫的相關資訊 就是設定 03/29 00:23
lueichun: 連線池的內容 連線池對應到JNDI API的物件就叫做 03/29 00:26
lueichun: dataSource物件 所以dataSource物件本身既包含資料庫連 03/29 00:28
lueichun: 線資訊 也包含連線池的資訊 所以之後要取得連線的話 03/29 00:29
lueichun: 就要從dataSource物件取得 所以dataSource物件之所以可 03/29 00:31
lueichun: 以用來取得連線 就是因為其包含了連線池的資訊 03/29 00:32
haha02: JNDI跟連線池&DataSource沒有絕對關係 你的理解有誤 03/29 03:00
lueichun: 我修正一下想法 連線池是伺服器根據SUN的規範去實作的 03/29 15:50
lueichun: 而連線池在SUN官方是定義成DataSource物件 所以在java程 03/29 15:51
lueichun: 式裡面只要取得DataSource物件就等於取得連線池 而要取 03/29 15:52
lueichun: 得這物件 就要以這物件(連線池)的名稱搭配命名服務來取 03/29 15:54
lueichun: 得 命名服務可以用來取得連線池 也可以用來取得別的資源 03/29 15:55
lueichun: 利用這服務取得連線池後 就可以call getConnection()了 03/29 15:55
lueichun: 看來我前面的自問自答錯很大... 03/29 15:57