JavaEE规范之JNDI

前言:在学习数据源的使用时,了解到可以通过JNDI方式配置数据源。于是,便想深入理解JNDI是什么。在网上查阅了许多资料,发现讲解不是很全面,现将网上查阅的资料总结如下文。本文主要讲解:JNDI是什么,有什么作用。如何在Tomcat中通过JNDI方式配置数据源。

一、JNDI简介

1、JNDI是什么

JNDI(Java Naming and Directory Interface,Java 命名和目录接口)是一组在Java应用中访问命名服务和目录服务的API。其中,JavaEE要求Web容器(如:tomcat)必须实现JNDI规范。

2、命名服务和目录服务

context: 上下文或容器,用于存储命名服务建立的映射关系。

命名服务:建立名称和对象之间的映射,以便可以通过名称访问到对象

目录服务:目录服务是命名服务的扩展,目录服务的对象不单有名称,还有属性,既可以通过名称查找对象,也可以通过属性查找到一批对象然后筛选出自己需要的对象

参考链接

3、使用JNDI好处

      以JNDI配置数据源为例,当数据源变更(如:更换数据库类型,更改用户名或密码,更改连接的URL等),只需要web服务器管理员去修改JNDI数据源的配置文件即可,不需要开发人员去修改程序代码,从一定程度上达到了程序解耦的目的。同时,不特数据源如此,对于程序使用其他 外部资源的情况,也可以使用JNDI配置.

二、JNDI应用:配置数据源

1、Tomcat服务器

第一步:向tomcat安装目录下的lib中添加JDBC驱动程序

如图所示,我这里使用的mysql数据库的驱动程序
在这里插入图片描述
第二步:在与WEB-INf同级的目录下新建META-INF/context.xml并配置
对于IDEA开发工具,生成META-INF/context.xml可通过如下图所示方式:
在这里插入图片描述
在META-INF/context.xml中配置如下代码:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/">
    <Resource name="jdbc/mysql"
              auth="Container"
              type="javax.sql.DataSource"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/comment"
              username="root" password="root"
              maxActive="20" maxIdle="10"
              maxWait="10000"/>
</Context>

属性说明:
maxActive:同一时刻可以自数据库连接池中被分配的最大活动实例数。
maxIdle : 同一时刻数据库连接池中处于非活动状态的最大连接数。
maxWait:当连接池中没有可用连接时,连接池在抛出异常前将等待的最大时间,单位毫秒。
auth:由容器进行授权及管理,指的用户名和密码是否可以在容器上生效
type:此名称所代表的类型,现在为javax.sql.DataSource

第三步:配置WEB-INF/web.xml文件
添加如下代码:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
      version="3.1">

    <resource-ref>
       <res-ref-name>jdbc/mysql</res-ref-name>
       <res-type>javax.sql.DataSource</res-type>
       <res-auth>Container</res-auth>
   </resource-ref>
   
</web-app>

元素说明:
resource-ref:用于对外部资源引用的声明,即告诉阅读web.xml文件的人,此web应用使用了外部资源,名字是什么,类型是什么。即使不在web.xml中添加此元素程序也可以正常使用,其作用类似注释,起说明作用。

2、spring框架

通过JNDI服务获取数据源注册到spring容器中

<beans>
	<bean id="dataSource"  class="org.springframework.jndi.JndiObjectFactoryBean">  
        <property name="jndiName" value="java:comp/env/jdbc/oracleDb"/>  
    </bean> 
</beans>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月几时有666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值