Java命名与目录接口(JNDI)查找变量资源

浅辰小哥_5529

浅辰小哥_5529

2026-05-07

981人浏览

原创

JNDI通过名称查找容器管理的运行时资源,核心是“名字到对象”映射;常见类型包括env-entry、resource-ref、resource-env-ref和ejb-ref;查找须遵循java:comp/env/等命名规则,且部署端需在web.xml、context.xml或standalone.xml中完成对应配置。

java命名与目录接口(jndi)查找变量资源

JNDI 查找变量资源,核心是通过名称定位运行时配置的对象,比如数据源、环境参数或EJB引用。它不直接存数据,而是提供一个统一的“名字到对象”的映射机制,由应用服务器在启动时完成绑定。

变量资源常见类型

这些资源通常不是硬编码在代码里,而是由容器管理、供组件按需查找:

  • 环境条目(env-entry):如字符串、数字、布尔值等简单配置,例如 maxRetries=3 或 logLevel=DEBUG
  • 资源引用(resource-ref):最常见的是 javax.sql.DataSource,用于数据库连接池
  • 资源环境引用(resource-env-ref):如 JMS 连接工厂、邮件会话(javax.mail.Session)
  • EJB 引用(ejb-ref / ejb-local-ref):指向同一应用或外部部署的会话 Bean

查找路径的关键规则

JNDI 名称不是随意写的,必须匹配容器约定的命名空间结构:

  • java:comp/env/xxx:组件私有环境,只在当前 Web 模块或 EJB 内部可用,例如 java:comp/env/jdbc/myDS 或 java:comp/env/mail/Session
  • java:global/xxx:全应用范围可访问,格式通常是 java:global/[app-name]/[module-name]/[bean-name],适合跨模块调用
  • java:jboss/datasources/xxx(JBoss/WildFly 特有)或 java:openejb/Resource/xxx(TomEE 特有):厂商扩展命名空间,需查对应文档

注意:直接写 jdbc/myDS 通常失败;漏掉 java:comp/env/ 前缀是初学者最常见的 lookup 失败原因。

标准查找代码写法

使用 InitialContext 是基础方式,无需额外依赖(JDK 自带):

Java 接口排错助手
Java 接口排错助手

在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。

下载
try {
    Context ctx = new InitialContext();
    // 查找数据源
    DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/myDS");
    // 查找环境变量(String 类型)
    String apiKey = (String) ctx.lookup("java:comp/env/api/key");
    // 查找邮件会话
    Session mailSession = (Session) ctx.lookup("java:comp/env/mail/Session");
} catch (NamingException e) {
    // 必须处理此异常,说明名称不存在、类型不匹配或上下文不可达
}

如果在 EJB 或 Servlet 容器中运行,InitialContext() 构造无参即可;若在独立 Java 程序中远程调用,需传入 Properties 指定工厂类和提供者地址。

部署端必须配合的配置

仅写 lookup 代码不够,资源必须已在服务器中注册并绑定到对应 JNDI 名称:

  • Web 应用(web.xml):声明 或 ,否则容器不会把该名称注入到 java:comp/env 下
  • Tomcat:在 context.xml 中配置 标签,并确保 name 属性与 lookup 路径后半段一致(如 name="jdbc/myDS" → lookup "java:comp/env/jdbc/myDS")
  • WildFly/JBoss:通过管理控制台或 standalone.xml 的 配置,其 jndi-name 即为查找名

没有正确配置,lookup 会抛出 NameNotFoundException 或 NoInitialContextException,而不是空指针。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

11957

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

9042

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

7732

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1264

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

1008

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1516

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

3129

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20371

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1375

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习