「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > JNDI (Java Naming and Directory Interface) の概要

JNDI (Java Naming and Directory Interface) の概要

2024 年 11 月 16 日に公開
ブラウズ:104

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