"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Visão rápida de JNDI (Java Naming and Directory Interface)

Visão rápida de JNDI (Java Naming and Directory Interface)

Publicado em 2024-11-16
Navegar:371

Quick look of JNDI (Java Naming and Directory Interface)

Simples de dizer, o programador pode usar a mesma interface JNDI para consultar o seguinte

  • recursos de pesquisa fornecidos pelo servidor de aplicativos, como fonte de dados
  • pesquisar entradas LDAP
  • pesquisar registros DNS

Uma breve introdução está aqui.

O código

Os recursos do servidor de aplicativos são colocados no prefixo "java:comp/env". Suponha que uma fonte de dados esteja ativada

java:/comp/env/jdbc/db1

Para obter essa fonte de dados

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

Ou você pode obter a instância diretamente, fornecendo o caminho completo

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

Integração de inicialização Spring

Basta adicionar uma linha em application.properties

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

O bean relacionado é criado por 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);
            }
        }
    }

}
Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/saladlam/quick-look-of-jndi-java-naming-and-directory-interface-13gi?1 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3