Heim > Java > javaLernprogramm > Hauptteil

Kurzer Blick auf JNDI (Java Naming and Directory Interface)

Patricia Arquette
Freigeben: 2024-10-22 06:12:02
Original
815 Leute haben es durchsucht

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
Nach dem Login kopieren

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");
Nach dem Login kopieren

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");
Nach dem Login kopieren

Spring-Boot-Integration

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

spring.datasource.jndi-name=java:/comp/env/jdbc/db1
Nach dem Login kopieren

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

}
Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage