JNDI(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。
没有使用JNDI时我用要这样连接数据库:
- Connection conn=null;
- try {
- Class.forName("com.mysql.jdbc.Driver");
- conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/ssh");
- ......
传统做法的缺点:
(1) 链接的数据库名称、用户名、密码、驱动字符串写在源码里,修改时要进行二次编译; 写在配置文件里容易暴露给他人。
(2) 改用其它产品的数据库时,要在源码上更改驱动名及驱动连接数据库字符串及更换数据库驱动。
(3) 随着实际使用终端的增加,原配置的连接池参数可能需要调整。
(4) ......
用了JNDI又是什么样子的呢.....
首先:把mysql的驱动包加到Tomcat的lib文件夹下
一、配置全局的JNDI
(1)在tomcat的conf文件夹下的context.xml配置文件中的 "Context" 标签内加入如下代码
- <Resource name="jndi/myJNDI"
- auth="iycao"
- type="javax.sql.DataSource"
- driverClassName="com.mysql.jdbc.Driver"
- url="jdbc:mysql://localhost:3306/ssh"
- username="root"
- password="root"
- maxActive="20"
- maxIdle="10"
- maxWait="10000"/>
(2)在要使用JNDI的项目中的web.xml文件中加如入下代码
- <resource-ref>
- <description>JNDI DataSource</description>
- <res-ref-name>jndi/myJNDI</res-ref-name>
- <res-ref-type>javax.sql.DataSource</res-ref-type>
- <res-auth>iycao</res-auth>
- </resource-ref>
注:要保持res-ref-name值要和context.xml的name值一致
二、配置局部的JNDI方法1
(1)在tomcat的server.xml的<host>标签内添加如下语句
- <Context path="/Jndi" docBase="/Jndi"> <!--Jndi代表的是引用的项目名-->
- <Resource name="jndi/myJNDI"
- auth="iycao"
- type="javax.sql.DataSource"
- driverClassName="com.mysql.jdbc.Driver"
- url="jdbc:mysql://localhost:3306/ssh"
- username="root"
- password="root"
- maxActive="20"
- maxIdle="10"
- maxWait="10000"/>
- </Context>
(2) 其它的步骤同上面的一样
三、配置局部的JNDI方法2
(1) 在项目的META-INFO下面新建context.xml,代码如下
- <?xml version="1.0" encoding="UTF-8"?>
- <Context>
- <Resource name="jndi/myJNDI"
- auth="iycao"
- type="javax.sql.DataSource"
- driverClassName="com.mysql.jdbc.Driver"
- url="jdbc:mysql://localhost:3306/ssh"
- username="root"
- password="root"
- maxActive="20"
- maxIdle="10"
- maxWait="10000"/>
- </Context>
总结:三种方法使用的频率:1》3》2