开发者学堂课程【JDBC 数据库开发进阶:JNDI配置】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/32/detail/688
JNDI配置
内容简介:
一、Tomcat 配置 JNDI 资源
二、获取资源
一、Tomcat 配置 JNDI 资源
JNDl (Java Naming and Directory Interface ),Java 命名和目录接口。
JNDl 的作用
在服务器上配置资源,然后通过统一的方式来获取配置的资源。
我们这里要配置的资源是连接池,这样项目中就可以通过统一的方式来获取连接池对象了。
1. Tomcat 中配置资源的格式如下:
…
type="com.mycompany.MyBean"
factory="org.apache.naming.factory.BeanFactory"
bar="23"/>
…
配置JNDI资源需要到 元素中配置 子元素:
① name :指定资源的名称,这个名称可以随便给,在获取资源时需要这个名称;
② factory :用来创建资源的工厂,这个值基本上是固定的,不用修改﹔
③ type :资源的类型,我们要给出的类型当然是我们连接池的类型了﹔
④ bar :表示资源的属性,如果资源存在名为 bar 的属性,那么就配置 bar 的值。对于DBCP 连接池而言,你需要配置的不是 bar ,因为它没有 bar 这个属性,而是应该去配置 url、username 等属性。
2.按照给出文件配置资源
factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
jdbcUrl="jdbc.mysql:// localhost : 3306 / mydb3 "
driverClass=" com. mysgl.jdbc.Driver"
user="root"
password="123"
acquireIncrement="5"
initialPoolSize="10"
/>
Dbcp 的配置
type="org.apache.tomcat.dbcp.dbcp.BasicDataSource"
factory="org.apache.naming.factory.BeanFactory"
username="root"
password="123"
driverClassName="com.mysal.jdbc.Driver"
url="jdbc:mysql://127.0.0.1/mydb1"
maxldle="3"
maxWait="5000"
maxActive="5"
initialSize="3" />
c3p0 的配置
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"
acquirelncrement="2"/>
二、获取资源
配置资源的目的是为了获取资源,只要启动 Tomcat ,就可以在项目中通过 JNDI 获取资源的方式来获取资源。
1.获取资源的格式如下
下面一段代码与上面的配置资源是对应的。
Context initCtx =new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
MyBean bean =(MyBean) envCtx.lookup ( "bean/MyBeanFactory");
writer.println ( "foo= " + bean.getFoo () + ", bar = " +
bean.getBar ());
获取资源:
①Context : jaxax.naming.Context ;
②InitialContext: jaxax.naming.InitialContext;
③lookup(String):获取资源的方法,其中 "java.:comp/enx” 是资源的入口(这是固定的名称),获取过来的还是一个 Context ,这说明需要在获取到的 Context 上进一步进行获取。 "bean/MyBeanFactory" 对应 中配置的 name 值,这回获取的就是资源对象了。
2.按照配置获取资源
获取 JNDI 的资源
public class Aservlet extends HttpServlet {
public void doGet (HttpServletRequest
request,HttpServletResponse response)
throws ServletException,IOException {
①创建JND工的上下文对象
try {
Context cxt = new InitialContext( );
②查询出入口
Context envContext =(Context) cxt.lookup ( "java:comp/env");
③再进行二次查询,找到我们的资源,使用的是名称与元素的name对应
Datasource dataSource =(DataSource)envContext.lookup ("jdbc/dataSource");
connection con = dataSource.getConnection ( ) ;
System.out.println (con) ;
con.close() ;
}catch(Exception e) {
throw new RuntimeException (e) ;
}
}
}