通过JNDI数据源获取数据库连接对象

本文介绍了JNDI(Java Naming and Directory Interface)的基本概念及其在Java EE环境中的作用,特别是用于数据库连接。通过JNDI,应用可以使用逻辑名字查找和访问数据源,提供了一种灵活的资源管理方式。详细阐述了如何在Tomcat中配置数据源,包括在context.xml和web.xml文件中的设置,并展示了如何通过JNDI查找和获取数据库连接。
摘要由CSDN通过智能技术生成
  1. 什么是JNDI

JNDI(Java Naming and Directory Interface)是SUN公司提供的一种标准的是Java命名和目录接口,它提供了一种通过名字来访问各种资源和服务的Java API。在Java EE(Java Enterprise Edition)环境中,JNDI主要用于查找和访问企业级资源,如数据库连接池、消息队列、邮件服务等。

JNDI工作于客户端和服务提供者之间,允许客户端通过逻辑名字查找服务或资源,而不需要知道服务的具体位置或细节。这种抽象层使得应用程序可以在不修改代码的情况下更换服务提供者。

命名服务。JNDI提供统一的命名服务,允许客户端通过名字来查找对象或服务,而不是对象的物理ID。这些名字存储在命名目录中,如LDAP(轻量级目录访问协议)、DNS(域名系统)等。如在tomcat中查找JDBC数据源不是通过数据源的直接引用查找,而是通过JNDI与数据源绑定的名称查找;通过DNS可以使用域名来访问Web应用,而不是直接通过输入Web服务器的IP地址来访问,这里的数据源的引用和IP地址都可以看作是资源的物理ID。

目录服务。JNDI不仅能查找对象,还能浏览和修改目录中的信息。这对于需要管理大量资源属性的应用程序特别有用。

JNDI最常用的就是配置数据源,对于Tomcat容器,一般可以在tomcat/conf/context.xml中配置,也可以在项目文件的WETA-INF目录下创建context.xml文件进行配置。

  1. 2.JNDI数据源配置

数据源(DataSource)是一种允许程序获取数据库连接的机制。在企业级应用中,数据源通常通过连接池实现,以提高资源利用率和应用性能。

JNDI配置数据源的步骤如下。

(1).在应用服务器上配置数据源,并提供数据库的连接信息。在项目的 META-INF/context.xml 中添加Resource(资源)定义,示例代码如下。

  1. <Resource name="jdbc/MyAppDB"
             auth="Container"
             type="javax.sql.DataSource"
             driverClassName="com.mysql.cj.jdbc.Driver"
             url="jdbc:mysql://localhost:3306/ MyAppDB?useSSL=false&amp;serverTimezone=UTC"
             username="dbuser"
             password="dbpassword"
             maxTotal="20"
             maxIdle="10"
             maxWaitMillis="-1"/>

     

此配置定义了一个名为“jdbc/MyAppDB”的数据源,指向MySQL数据库“ MyAppDB ”。

注意:文件名一定是context.xml,不可更改。

<Resource>标签属性说明

属性

说明

示例

name

连接池名称,自定义。

jdbc/MyAppDB

auth

设定控制权 ,固定值。

Container

type

数据类型,固定值。

javax.sql.DataSource

maxTotal

最大活动连接数。当前数据源支持的最大并发数。自定义。

20

maxIdle

最大空闲连接数。连接池中保留最大数目的闲置连接数。自定义。

10

maxWaitMillis

最大空闲时间。当连接池中无连接时的最大等待毫秒数,在等当前设置时间过后还无连接则抛出异常。自定义。

 

userName

访问数据库的用户名,自定义。

root

password

访问数据库的密码,自定义。

123456

dirverClassName

驱动的全路径类名。固定值。

mySql6以后使用:

com.mysql.cj.jdbc.Driver

url

指定数据库连接IP和数据库名称。

MySQL6.0及之后版本需要指定服务器时区属性,设定useSSL属性等,多个属性之间用&连接。jdbc:mysql://127.0.0.1:3306/databaseName?serverTimeZone=GMT%2B8&useSSL=false

(2) 在Web应用的“WEB-INF/web.xml”文件中,声明对JNDI资源的引用,代码如下。

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

<resource-ref>标签:资源引用,通常是个对象工厂,数据源,JavaMail或者自定义对象工厂配置。这里是数据源。其中,<res-ref-name>标签的值必须与context.xml文件中定义的资源名称一致。<res-type>标签与<res-auth>标签均为固定值。

(3)JNDI查找数据源: 应用程序通过JNDI查找逻辑名称对应的数据源,而不需要知道数据库的具体连接信息。这样,当数据库的配置发生变化时,只需要在应用服务器上更新数据源配置,无需修改应用程序代码。

InitialContext 在web初始化部署时配置,并且对web应用只读访问。所有资源都放在 “java:comp/env ”下。查找数据源代码如下。

//初始化JNDI上下文
Context ctx = new InitialContext();
//查找数据源
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/MyAppDB");

(4).获取数据库连接: 一旦查找到数据源,应用程序就可以从数据源获取数据库连接。获取数据库连接代码如下。

Connection conn = ds.getConnection();

获取连接后,进一步可以执行SQL语句或其他数据库操作。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值