首页 > Java > java教程 > 正文

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

Patricia Arquette
发布: 2024-10-22 06:12:02
原创
720 人浏览过

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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!