JNDI主要用于在容器中配置某些资源,让所有项目可以使用。
JNDI可以提供:
1:数据库连接池。
自定义连接池
第三方连接池
Dbcp
C3p0
JNDI
2:邮件服务器定义。
3:加载任意的类,让所有项目都可以使用。
JNDI:[定义在tomcat容器中,所有项目必须要通过查找的方式获取这个服务Javax.naming.Context 环境(ENV)上下文。
它的一个了类:InitialContext
配置JNDI,不用发布项目
1、配置tomcat/conf/server.xml
1 <Context path="/aaa" docBase="D:\Adnroid\Workspaces\day25\WebRoot"> 2 <Resource name="jdbc/mysql" auth="Container" //name--JNDI名称 auth--JNDI拥有者 3 type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" 4 url="jdbc:mysql:///bookstore?characterEncoding=UTF8" 5 username="root" password="mysql" maxActive="10" maxIdle="30" 6 maxWait="-1"/> 7 </Context> 8</Host>
2、将mysql-connection.jar放到tomcat/lib目录下
3、在java项目中引用 在代码中直接查询这个jndi:
1 //1、声明上下文环境 2 Context ctx=new InitialContext(); 3 //2、查找apache环境 4 ctx= (Context) ctx.lookup("java:/comp/env"); 5 //3、从环境中查找JNDI 6 Object obj= ctx.lookup("jdbc/mysql"); 7 /*第2,3步可以合成为obj=ctx.lookup("java:/comp/env/jdbc/mysql");*/ 8 //4、测试 9 DataSource ds=(DataSource) obj; 10 Connection conn=ds.getConnection(); 11 System.err.println(conn);
注:
一般来说不会修改/server.xml,会在
目录下新建“项目名称.xml”,在里面插入第1步中的代码
标准DBUtils的写法
1 public class DatasourceUtils { 2 private static DataSource ds; 3 static{ 4 try{ 5 Context ctx = new InitialContext(); 6 ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/mysql"); 7 }catch(Exception e){ 8 e.printStackTrace(); 9 } 10 } 11 public static DataSource getDs(){ 12 return ds; 13 } 14 }