Maison  >  Article  >  Java  >  Aperçu rapide de JNDI (Java Naming and Directory Interface)

Aperçu rapide de JNDI (Java Naming and Directory Interface)

Patricia Arquette
Patricia Arquetteoriginal
2024-10-22 06:12:02816parcourir

Quick look of JNDI (Java Naming and Directory Interface)

Simple à dire, le programmeur peut utiliser la même interface JNDI pour interroger les éléments suivants

  • ressources de recherche fournies par le serveur d'applications, telles que la source de données
  • rechercher des entrées LDAP
  • rechercher des enregistrements DNS

Une brève introduction est ici.

Le code

Les ressources du serveur d'applications sont placées sous le préfixe "java:comp/env". Supposons qu'une source de données soit activée

java:/comp/env/jdbc/db1

Pour obtenir cette source de données

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 vous pouvez obtenir l'instance directement en fournissant le chemin complet

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

Intégration du démarrage à ressort

Ajoutez simplement une ligne dans application.properties

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

Le bean associé est créé par 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);
            }
        }
    }

}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn