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

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

Patricia Arquette
Libérer: 2024-10-22 06:12:02
original
942 Les gens l'ont consulté

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
Copier après la connexion

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");
Copier après la connexion

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");
Copier après la connexion

Intégration du démarrage à ressort

Ajoutez simplement une ligne dans application.properties

spring.datasource.jndi-name=java:/comp/env/jdbc/db1
Copier après la connexion

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

}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal