"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > نظرة سريعة على JNDI (واجهة تسمية جافا والدليل)

نظرة سريعة على JNDI (واجهة تسمية جافا والدليل)

تم النشر بتاريخ 2024-11-16
تصفح:817

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

يتم إنشاء الفول ذي الصلة بواسطة 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