今天天氣已經(jīng)轉(zhuǎn)涼了呀!
明天開始要早點(diǎn)6.30分起床了!不然時(shí)間不夠了。
今天講的書Tomcat數(shù)據(jù)源。
傳統(tǒng)的JDBC操作分為四種:
1.加載去數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序(通過classpath映射找到驅(qū)動(dòng))
2.通過DriverManage類取得連接對(duì)象(Connection)
3.通過鏈接取得PreparedStatement對(duì)象,編寫sql操作語(yǔ)句,進(jìn)行crud操作。
4.數(shù)據(jù)庫(kù)操作是屬于資源操作,運(yùn)行完成以后要關(guān)閉自愿。
今天學(xué)習(xí)的是在tomcat前提下配置的數(shù)據(jù)源,既然是在tomcat那么必然要對(duì)tomcat進(jìn)行配置:
首先還是要先來解釋下JNDI這個(gè)名詞。
命名與目錄借口。
1.拷貝數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序到tomcat/comman/lib目錄下。
2.修改Tomcat的server.xml文件。
<context·····>
<Resource name = "jdbc/mldn" -->>設(shè)置一個(gè)匹配名字,在項(xiàng)目web.xml中要設(shè)置用到。
auth = "Container" -->>這個(gè)一聽是連接池的設(shè)置屬性吧。(有Container 和Application兩個(gè)屬性,一般都選用Container)
type = "javax.sql.Datasource" -->>所有的鏈接池里面的鏈接都要用Datasource獲得,所以一定要讓鏈接指向這個(gè)庫(kù)。
maxActive = "100" -->>設(shè)置最大鏈接數(shù)
minIdle = "10" -->>設(shè)置最小保存在鏈接池里面的鏈接數(shù)。
maxWait = "10000" -->>最大等待時(shí)間,如果再等待時(shí)間內(nèi)有鏈接空閑的話就可以繼續(xù)取得連接,但是如果超過這個(gè)時(shí)間的話將對(duì)數(shù)據(jù)庫(kù)的操作失 敗。這個(gè)是毫秒數(shù),這個(gè)數(shù)表示為10S
username = "root" --->>鏈接的數(shù)據(jù)庫(kù)的用戶名。
password = "root123" -->>數(shù)據(jù)庫(kù)用戶的密碼。
DriverClassName = "" -->>驅(qū)動(dòng)程序
url = "" -->>數(shù)據(jù)庫(kù)的地址
>
</Resource>
</context>
3.修改項(xiàng)目中的web.xml -->>這個(gè)設(shè)置的主要目的是要讓他讀取到Tomcat中<resource>屬性中的值。
<resource-ref>
<description>DB DRIVER</description> -->>這個(gè)僅僅是描述,可以在程序中取得,現(xiàn)在還體現(xiàn)不到他又什么用。
<res-ref-name>jdbc/mldn</res-ref-name> -->>這個(gè)名字跟Tomcat中<resource>屬性中的name匹配的。通過這個(gè)名字找到Tomcat中的配置。
<res-type>javax.sql.Datasource</res-type> -->>跟Tomcat中<resource>屬性中的type匹配的。
<res-auth>Container</res-auth> -->>跟Tomcat中<resource>屬性中的auth匹配的.
<resource -ref>
4.在項(xiàng)目中具體的讀取方式:(取的Connection pool中的鏈接)
A.初始化名稱,查找上下文。
B.通過名稱(JNDI)查找Datasource
C.通過Datasource取得鏈接。
eg:
String jndi = "java:comp/env/jdbc/mldn"
Context ctx = InitialContext();
Datasource ds = (Datasource) ctx.lookUp(jndi);
Connection conn = ds.getConnection();
java:comp/env/這個(gè)是javaee規(guī)范特定的在Tomcat中沒有實(shí)現(xiàn),其他服務(wù)器的話都已經(jīng)實(shí)現(xiàn),換句話說,其他地方只要用server中的name屬性即可。