"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Aperçu rapide de JNDI (Java Naming and Directory Interface)

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

Publié le 2024-11-16
Parcourir:120

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

}
Déclaration de sortie Cet article est reproduit sur : https://dev.to/saladlam/quick-look-of-jndi-java-naming-and-directory-interface-13gi?1 En cas de violation, veuillez contacter [email protected] pour le supprimer
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3