”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 快速浏览JNDI(Java命名和目录接口)

快速浏览JNDI(Java命名和目录接口)

发布于2024-11-16
浏览:728

Quick look of JNDI (Java Naming and Directory Interface)

简单的说,程序员可以使用同一个JNDI接口来查询以下内容

  • 查找应用服务器提供的资源,例如数据源
  • 搜索 LDAP 条目
  • 查找 DNS 记录

简单介绍就到这里

代码

应用程序服务器的资源放置在“java:comp/env”前缀下。假设数据源位于

java:/comp/env/jdbc/db1

获取该数据源

javax.naming.Context initialContext = new javax.naming.InitialContext();
javax.naming.Context subContext = (javax.naming.Context) initialContext.lookup("java:comp/env");
DataSource dataSource = (DataSource) subContext.lookup("jdbc/db1");

或者您可以通过提供完整路径直接获取实例

javax.naming.Context initialContext = new javax.naming.InitialContext();
DataSource dataSource = (DataSource) initialContext.lookup("java:comp/env/jdbc/db1");

Spring引导集成

只需在 application.properties
中添加一行

spring.datasource.jndi-name=java:/comp/env/jdbc/db1

相关bean由org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration创建

@Configuration(proxyBeanMethods = false)
@AutoConfigureBefore({ XADataSourceAutoConfiguration.class, DataSourceAutoConfiguration.class })
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@ConditionalOnProperty(prefix = "spring.datasource", name = "jndi-name")
@EnableConfigurationProperties(DataSourceProperties.class)
public class JndiDataSourceAutoConfiguration {

    @Bean(destroyMethod = "")
    @ConditionalOnMissingBean
    public DataSource dataSource(DataSourceProperties properties, ApplicationContext context) {
        JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
        DataSource dataSource = dataSourceLookup.getDataSource(properties.getJndiName());
        excludeMBeanIfNecessary(dataSource, "dataSource", context);
        return dataSource;
    }

    private void excludeMBeanIfNecessary(Object candidate, String beanName, ApplicationContext context) {
        for (MBeanExporter mbeanExporter : context.getBeansOfType(MBeanExporter.class).values()) {
            if (JmxUtils.isMBean(candidate.getClass())) {
                mbeanExporter.addExcludedBean(beanName);
            }
        }
    }

}
版本声明 本文转载于:https://dev.to/saladlam/quick-look-of-jndi-java-naming-and-directory-interface-13gi?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-11-16
  • 为什么 Java NullPointerException 缺少 StackTrace?
    为什么 Java NullPointerException 缺少 StackTrace?
    无法捕获 Java NullPointerException 中的 StackTrace,且没有可见错误在某些情况下,Java 代码捕获 NullPointerException 但无法记录 StackTrace,这让开发人员感到困惑,因为“显示“java.lang.NullPointerExcep...
    编程 发布于2024-11-16
  • 如何动态更新配置文件中的字符串?
    如何动态更新配置文件中的字符串?
    操作动态内容的配置文件在创建动态配置的上下文中,管理配置文件变得至关重要。要将配置文件中的特定字符串替换为动态变量,可以考虑以下几种方法:结构化数据格式:建议使用结构化数据格式,例如 CSV 、INI、XML、JSON 或 YAML。每种格式都提供自己的 API 用于读取和写入数据。通过利用这些 A...
    编程 发布于2024-11-16
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-16
  • 如何在 JavaScript 中优雅地删除查询字符串参数?
    如何在 JavaScript 中优雅地删除查询字符串参数?
    在 JavaScript 中优雅地删除查询字符串参数使用 URL 时,通常需要操作查询字符串参数。一项常见任务是删除特定参数。虽然正则表达式可以是一种解决方案,但它们可能容易出错且不灵活。更好的方法:解析和操作不要使用正则表达式,请考虑解析将查询字符串转换为对象,对其进行操作,然后重建 URL。这种...
    编程 发布于2024-11-16
  • 为什么一个线程在notify()或notifyAll()之后总是重新获取对象锁?
    为什么一个线程在notify()或notifyAll()之后总是重新获取对象锁?
    notify()和notifyAll()之间的微妙区别notify()和notifyAll()之间的主要区别在于它们唤醒的等待线程数量(一个与所有),这提出了另一个问题:为什么一个线程总是重新获取对象锁?一般来说这种情况下,notify()和notifyAll()都没有指定选择哪个等待线程重新获取锁...
    编程 发布于2024-11-16
  • 以下是一个符合文章内容的问答式英文标题:

How do I convert a NumPy array to a Python list?
    以下是一个符合文章内容的问答式英文标题: How do I convert a NumPy array to a Python list?
    Converting a NumPy Array to a Python ListNumPy arrays provide efficient data structures for numerical computations. However,有时需要将它们转换为Python列表以进行进一步的数...
    编程 发布于2024-11-16
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-16
  • Try-Except-Else 是 Python 中流量控制的有用工具吗?
    Try-Except-Else 是 Python 中流量控制的有用工具吗?
    在Python中使用Try-Except-Else有好处吗?在Python中,遇到的常见代码块是:try: try_this(whatever) except SomeException as exception: #Handle exception else: return so...
    编程 发布于2024-11-16
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为 bool 的主要场景:语句:if、w...
    编程 发布于2024-11-16
  • 什么时候应该使用 jmap 的 -F 选项进行堆转储?
    什么时候应该使用 jmap 的 -F 选项进行堆转储?
    jmap 操作期间无法打开套接字文件:-F 选项尝试使用 jmap 获取堆转储时遇到问题,导致错误消息:“无法打开套接字文件”。这表示 HotSpot JVM 未加载或目标进程无响应。为了解决这个问题,使用 -F 选项来利用一种不同的机制,称为 HotSpot Serviceability Agen...
    编程 发布于2024-11-16
  • 如何使 CSS 动画在 Webkit 中完成后保持原状?
    如何使 CSS 动画在 Webkit 中完成后保持原状?
    理解Webkit CSS动画持久性使用CSS3动画时,经常会遇到动画元素恢复到原始状态的情况动画完成。虽然此行为符合动画停止的标准逻辑,但在某些用例中似乎违反直觉。考虑提供的示例,其中使用 Webkit CSS 语法将“drop_box”元素设置为下降 100 像素的动画。动画完成后,框中的文本跳回...
    编程 发布于2024-11-16
  • 如何使用 Selenium 单击具有复杂 HTML 结构的按钮?
    如何使用 Selenium 单击具有复杂 HTML 结构的按钮?
    Selenium 单击具有复杂 HTML 结构的按钮当尝试使用 Selenium 单击具有复杂 HTML 结构的按钮时,您可能会遇到NoSuchElementException。当按钮的 HTML 包含多个具有 onclick 属性的类或元素时,可能会发生这种情况。要准确单击此类按钮,请按照下列步骤...
    编程 发布于2024-11-16
  • 如何删除 PHP 中特定子字符串之后的所有内容?
    如何删除 PHP 中特定子字符串之后的所有内容?
    如何删除 PHP 中特定子字符串之后的部分字符串您可以使用以下命令删除 PHP 中特定子字符串之后的所有内容substr() 函数。 substr()函数接受三个参数:输入字符串起始位置长度 要删除某个子字符串之后的所有内容,可以使用 strpos() 函数查找该子字符串在输入字符串中的位置。然后,...
    编程 发布于2024-11-16
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-11-16

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3