首页  >  文章  >  Java  >  快速浏览JNDI(Java命名和目录接口)

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

Patricia Arquette
Patricia Arquette原创
2024-10-22 06:12:02721浏览

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);
            }
        }
    }

}

以上是快速浏览JNDI(Java命名和目录接口)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn