>Java >java지도 시간 >JNDI(Java Naming and Directory Interface) 간략히 살펴보기

JNDI(Java Naming and Directory Interface) 간략히 살펴보기

Patricia Arquette
Patricia Arquette원래의
2024-10-22 06:12:02839검색

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

스프링 부트 통합

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

}

위 내용은 JNDI(Java Naming and Directory Interface) 간략히 살펴보기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.