」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 快速瀏覽JNDI(Java命名和目錄介面)

快速瀏覽JNDI(Java命名和目錄介面)

發佈於2024-11-16
瀏覽:728

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引導集成

只需在 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]刪除
最新教學 更多>
  • 為什麼 Java NullPointerException 缺少 StackTrace?
    為什麼 Java NullPointerException 缺少 StackTrace?
    無法捕獲Java NullPointerException 中的StackTrace,且沒有可見錯誤在某些情況下,Java 程式碼擷取NullPointerException 但無法記錄StackTrace,這讓開發人員感到困惑,因為「顯示「java.lang.NullPointerExceptio...
    程式設計 發佈於2024-11-16
  • 如何動態更新設定檔中的字串?
    如何動態更新設定檔中的字串?
    操作動態內容的設定檔在建立動態設定的上下文中,管理設定檔變得至關重要。要將設定檔中的特定字串替換為動態變量,可以考慮以下幾種方法:結構化資料格式:建議使用結構化資料格式,例如CSV 、INI、XML、JSON 或YAML。每種格式都提供自己的 API 用於讀取和寫入資料。透過利用這些 API,您可以...
    程式設計 發佈於2024-11-16
  • 如何在 JavaScript 中優雅地刪除查詢字串參數?
    如何在 JavaScript 中優雅地刪除查詢字串參數?
    在 JavaScript 中優雅地刪除查詢字串參數使用 URL 時,通常需要操作查詢字串參數。一項常見任務是刪除特定參數。雖然正規表示式可以是一種解決方案,但它們可能容易出錯且不靈活。 更好的方法:解析與操作不要使用正規表示式,請考慮解析將查詢字串轉換為對象,對其進行操作,然後重建URL。這種方法有...
    程式設計 發佈於2024-11-16
  • 為什麼一個執行緒在notify()或notifyAll()之後總是重新取得物件鎖?
    為什麼一個執行緒在notify()或notifyAll()之後總是重新取得物件鎖?
    notify()和notifyAll()之間的微妙區別notify()和notifyAll()之間的主要區別在於它們喚醒的等待線程的數量(一個與所有),這提出了另一個問題:為什麼一個線程總是重新獲取對象lock? 一般情況下,notify()和notifyAll()都沒有指定選擇哪個等待執行緒重新取...
    程式設計 發佈於2024-11-16
  • 以下是一個符合文章內容的問答式英文標題:

How do I convert a NumPy array to a Python list?
    以下是一個符合文章內容的問答式英文標題: How do I convert a NumPy array to a Python list?
    Converting a NumPy Array to a Python ListNumPy arrays provide efficient data structures for numerical computations. However,有時需要將它們轉換為 Howeverical Pyt...
    程式設計 發佈於2024-11-16
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-16
  • Try-Except-Else 是 Python 中流量控制的有用工具嗎?
    Try-Except-Else 是 Python 中流量控制的有用工具嗎?
    在Python中使用Try-Except-Else有好處嗎? 在Python中,遇到的常見程式碼區塊是:try: try_this(whatever) except SomeException as exception: #Handle exception else: return...
    程式設計 發佈於2024-11-16
  • 什麼時候應該使用 jmap 的 -F 選項進行堆轉儲?
    什麼時候應該使用 jmap 的 -F 選項進行堆轉儲?
    jmap 操作期間無法開啟套接字檔案:-F 選項嘗試使用jmap 取得堆轉儲時遇到問題,導致錯誤訊息:「無法開啟套接字檔案」。這表示 HotSpot JVM 未載入或目標程序無回應。 為了解決這個問題,使用 -F 選項來利用一種不同的機制,稱為 HotSpot Serviceability Agen...
    程式設計 發佈於2024-11-16
  • 如何讓 CSS 動畫在 Webkit 完成後保持原狀?
    如何讓 CSS 動畫在 Webkit 完成後保持原狀?
    理解Webkit CSS動畫持久性使用CSS3動畫時,經常會遇到動畫元素恢復到原始狀態的情況動畫完成。雖然此行為符合動畫停止的標準邏輯,但在某些用例中似乎違反直覺。 考慮提供的範例,其中使用 Webkit CSS 語法將「drop_box」元素設定為下降 100 像素的動畫。動畫完成後,框中的文字跳...
    程式設計 發佈於2024-11-16
  • 如何使用 Selenium 點選具有複雜 HTML 結構的按鈕?
    如何使用 Selenium 點選具有複雜 HTML 結構的按鈕?
    Selenium 點擊具有複雜HTML 結構的按鈕當您嘗試使用Selenium 點擊具有複雜HTML 結構的按鈕時,您可能會遇到NoSuchElementException。當按鈕的 HTML 包含多個具有 onclick 屬性的類別或元素時,可能會發生這種情況。 若要精確按一下此類按鈕,請依照下列...
    程式設計 發佈於2024-11-16
  • 如何刪除 PHP 中特定子字串之後的所有內容?
    如何刪除 PHP 中特定子字串之後的所有內容?
    如何刪除PHP 中特定子字串之後的部分字串您可以使用下列指令刪除PHP 中特定子字串之後的所有內容substr() 函數。 substr()函數接受三個參數:輸入字串起始位置長度 要刪除某個子字串之後的所有內容,可以使用strpos() 函數來找出該子字串在輸入字串中的位置。然後,您可以使用 sub...
    程式設計 發佈於2024-11-16
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-16
  • 我們如何計算 JavaScript 物件的大致記憶體佔用量?
    我們如何計算 JavaScript 物件的大致記憶體佔用量?
    確定 JavaScript 物件的記憶體佔用在 JavaScript 中,了解物件的記憶體消耗對於優化效能和避免記憶體洩漏至關重要。本文解決了獲取 JavaScript 物件大小的查詢,深入研究了估計此類物件所佔用的大致記憶體的解決方案。 確定物件大小In JavaScript 中沒有專門設計的內建...
    程式設計 發佈於2024-11-16
  • 如何使用 CSS 設定圖片地圖區域的樣式?
    如何使用 CSS 設定圖片地圖區域的樣式?
    您可以使用 CSS 在圖片映射上設定滑鼠懸停樣式嗎? 圖像映射用於描繪圖像中的可單擊區域。預設顯示為簡單幾何形狀的這些區域的樣式可以用作視覺互動介面。人們可能會想知道這對 CSS 是否可行,CSS 是網站美觀不可或缺的工具。雖然 CSS 無法直接設定圖像映射區域的樣式,但有一些巧妙的解決方法可以實現...
    程式設計 發佈於2024-11-16
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-16

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3