„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Kurzer Blick auf JNDI (Java Naming and Directory Interface)

Kurzer Blick auf JNDI (Java Naming and Directory Interface)

Veröffentlicht am 16.11.2024
Durchsuche:970

Quick look of JNDI (Java Naming and Directory Interface)

Einfach ausgedrückt kann der Programmierer 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 sich eine Datenquelle auf
befindet.

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

}
Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/saladlam/quick-look-of-jndi-java-naming-and-directory-interface-13gi?1 Bei Verstößen wenden Sie sich bitte an [email protected] um es zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3