Heim  >  Artikel  >  Java  >  Kurzer Blick auf JNDI (Java Naming and Directory Interface)

Kurzer Blick auf JNDI (Java Naming and Directory Interface)

Patricia Arquette
Patricia ArquetteOriginal
2024-10-22 06:12:02721Durchsuche

Quick look of JNDI (Java Naming and Directory Interface)

Einfach ausgedrückt: Programmierer können dieselbe JNDI-Schnittstelle verwenden, um Folgendes abzufragen

  • Vom Anwendungsserver bereitgestellte Suchressourcen, z. B. Datenquelle
  • LDAP-Einträge durchsuchen
  • DNS-Einträge suchen

Eine kurze Einführung finden Sie hier.

Der Code

Ressourcen des Anwendungsservers werden unter dem Präfix "java:comp/env" platziert. Gehen Sie davon aus, dass eine Datenquelle aktiviert ist

java:/comp/env/jdbc/db1

Um diese Datenquelle zu erhalten

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

Oder Sie können die Instanz direkt erhalten, indem Sie den vollständigen Pfad angeben

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

Spring-Boot-Integration

Fügen Sie einfach eine Zeile in application.properties
ein

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

Die zugehörige Bean wird von org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration
erstellt

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

}

Das obige ist der detaillierte Inhalt vonKurzer Blick auf JNDI (Java Naming and Directory Interface). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn