Tomcat下配置JNDI数据源的三种方法

时间:2021-05-02 19:12:24


 JNDI
(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。

 没有使用JNDI时我用要这样连接数据库:

[html] view plaincopyprint?
  1. Connection conn=null;  
  2. try {  
  3.   Class.forName("com.mysql.jdbc.Driver");  
  4.   conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/ssh");  
  5.   ......  

传统做法的缺点:

  (1) 链接的数据库名称、用户名、密码、驱动字符串写在源码里,修改时要进行二次编译; 写在配置文件里容易暴露给他人。

  (2) 改用其它产品的数据库时,要在源码上更改驱动名及驱动连接数据库字符串及更换数据库驱动。

  (3) 随着实际使用终端的增加,原配置的连接池参数可能需要调整。

  (4) ......

 用了JNDI又是什么样子的呢.....

 首先:把mysql的驱动包加到Tomcat的lib文件夹下

 一、配置全局的JNDI

(1)在tomcat的conf文件夹下的context.xml配置文件中的 "Context" 标签内加入如下代码

[html] view plaincopyprint?
  1. <Resource name="jndi/myJNDI"     
  2.             auth="iycao"     
  3.             type="javax.sql.DataSource"     
  4.             driverClassName="com.mysql.jdbc.Driver"     
  5.             url="jdbc:mysql://localhost:3306/ssh"     
  6.             username="root"     
  7.             password="root"     
  8.             maxActive="20"     
  9.             maxIdle="10"     
  10.             maxWait="10000"/>   

        (2)在要使用JNDI的项目中的web.xml文件中加如入下代码

[html] view plaincopyprint?
  1. <resource-ref>    
  2.       <description>JNDI DataSource</description>    
  3.       <res-ref-name>jndi/myJNDI</res-ref-name>    
  4.       <res-ref-type>javax.sql.DataSource</res-ref-type>    
  5.       <res-auth>iycao</res-auth>    
  6.   </resource-ref>   

       注:要保持res-ref-name值要和context.xml的name值一致


二、配置局部的JNDI方法1

       (1)在tomcat的server.xml的<host>标签内添加如下语句

[html] view plaincopyprint?
  1. <Context path="/Jndi" docBase="/Jndi"> <!--Jndi代表的是引用的项目名-->   
  2.             <Resource name="jndi/myJNDI"     
  3.                 auth="iycao"     
  4.                 type="javax.sql.DataSource"     
  5.                 driverClassName="com.mysql.jdbc.Driver"     
  6.                 url="jdbc:mysql://localhost:3306/ssh"     
  7.                 username="root"     
  8.                 password="root"     
  9.                 maxActive="20"     
  10.                 maxIdle="10"     
  11.                 maxWait="10000"/>   
  12.         </Context>  

        (2) 其它的步骤同上面的一样

三、配置局部的JNDI方法2

       (1) 在项目的META-INFO下面新建context.xml,代码如下

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <Context>    
  3.     <Resource name="jndi/myJNDI"     
  4.                 auth="iycao"     
  5.                 type="javax.sql.DataSource"     
  6.                 driverClassName="com.mysql.jdbc.Driver"     
  7.                 url="jdbc:mysql://localhost:3306/ssh"     
  8.                 username="root"     
  9.                 password="root"     
  10.                 maxActive="20"     
  11.                 maxIdle="10"     
  12.                 maxWait="10000"/>        
  13. </Context>  

总结:三种方法使用的频率:1》3》2