간단히 말하면 프로그래머는 동일한 JNDI 인터페이스를 사용하여 다음을 쿼리할 수 있습니다
간략한 소개는 여기까지입니다
애플리케이션 서버의 리소스는 "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 중국어 웹사이트의 기타 관련 기사를 참조하세요!