JNDI的介紹和配置
1 Tomcat配置JNDI資源
JNDI(Java Naming and Directory Interface),Java命名和目錄介面。JNDI的作用就是:在伺服器上配置資源,然後通過統一的方式來獲取配置的資源。
我們這裡要配置的資源當然是連線池了,這樣專案中就可以通過統一的方式來獲取連線池物件了。
下圖是Tomcat文件提供的:
配置JNDI資源需要到<Context>元素中配置<Resource>子元素:
- name:指定資源的名稱,這個名稱可以隨便給,在獲取資源時需要這個名稱;
- factory:用來建立資源的工廠,這個值基本上是固定的,不用修改;
- type:資源的型別,我們要給出的型別當然是我們連線池的型別了;
- bar:表示資源的屬性,如果資源存在名為bar的屬性,那麼就配置bar的值。對於DBCP連線池而言,你需要配置的不是bar,因為它沒有bar這個屬性,而是應該去配置url、username等屬性。
<Context> <Resource name="mydbcp" type="org.apache.tomcat.dbcp.dbcp.BasicDataSource" factory="org.apache.naming.factory.BeanFactory" username="root" password="123" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1/mydb1" maxIdle="3" maxWait="5000" maxActive="5" initialSize="3"/> </Context> |
<Context> <Resource name="myc3p0" type="com.mchange.v2.c3p0.ComboPooledDataSource" factory="org.apache.naming.factory.BeanFactory" user="root" password="123" classDriver="com.mysql.jdbc.Driver" jdbcUrl="jdbc:mysql://127.0.0.1/mydb1" maxPoolSize="20" minPoolSize ="5" initialPoolSize="10" acquireIncrement="2"/> </Context> |
2 獲取資源
配置資源的目的當然是為了獲取資源了。只要你啟動了Tomcat,那麼就可以在專案中任何類中通過JNDI獲取資源的方式來獲取資源了。
下圖是Tomcat文件提供的,與上面Tomcat文件提供的配置資源是對應的。
獲取資源:
- Context:javax.naming.Context;
- InitialContext:javax.naming.InitialContext;
- lookup(String):獲取資源的方法,其中”java:comp/env”是資源的入口(這是固定的名稱),獲取過來的還是一個Context,這說明需要在獲取到的Context上進一步進行獲取。”bean/MyBeanFactory”對應<Resource>中配置的name值,這回獲取的就是資源物件了。
Context cxt = new InitialContext(); DataSource ds = (DataSource)cxt.lookup("java:/comp/env/mydbcp"); Connection con = ds.getConnection(); System.out.println(con); con.close(); //較第二種方便,推薦使用這種 |
Context cxt = new InitialContext(); Context envCxt = (Context)cxt.lookup("java:/comp/env"); DataSource ds = (DataSource)env.lookup("mydbcp"); Connection con = ds.getConnection(); System.out.println(con); con.close(); |
上面兩種方式是相同的效果。