«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Быстрый просмотр JNDI (интерфейс именования и каталогов Java)

Быстрый просмотр JNDI (интерфейс именования и каталогов Java)

Опубликовано 16 ноября 2024 г.
Просматривать:356

Quick look of JNDI (Java Naming and Directory Interface)

Просто говоря, программист может использовать тот же интерфейс JNDI для запроса следующего

  • поиск ресурсов, предоставляемых сервером приложений, например источника данных
  • поиск записей LDAP
  • поиск записей DNS

Краткое введение здесь.

Код

Ресурсы сервера приложений размещаются под префиксом "java:comp/env". Предположим, что источник данных находится на

java:/comp/env/jdbc/db1

Чтобы получить этот источник данных

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

Или вы можете получить экземпляр напрямую, указав полный путь

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

Интеграция Spring Boot

Просто добавьте строку в application.properties

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

Связанный bean-компонент создается с помощью 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);
            }
        }
    }

}
Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/saladlam/quick-look-of-jndi-java-naming-and-directory-interface-13gi?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected] удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3