配置伺服器範圍的 JNDI 引用
你的 {CATALINA_HOME}/conf/
資料夾裡面有一個 server.xml
和 context.xml
檔案。其中每個包含類似的程式碼,但引用 Tomcat 的不同部分來完成相同的任務
server.xml
是伺服器範圍的配置。你可以在此處設定 HTTPS,HTTP2,JNDI 資源等。
context.xml
特定於 Tomcat 中的每個上下文,取自 Tomcat 的文件,它很好地解釋了這一點:
Context 元素表示在特定虛擬主機中執行的 Web 應用程式。每個 Web 應用程式都基於 Web 應用程式歸檔(WAR)檔案或包含相應解壓縮內容的相應目錄,如 Servlet 規範(2.2 版或更高版本)中所述。有關 Web 應用程式歸檔的更多資訊,你可以下載 Servlet 規範 ,並檢視 Tomcat Application Developer’s Guide 。
基本上,它是特定於應用程式的配置。
為了正確操作,我們需要在 server.xml
中設定 Resource
,並在 context.xml
中設定對該資源的引用。
在 server.xml
的 <GlobalNamingResources>
元素中,我們將新增一個新的 <Resource>
,這將是我們的 JNDI 參考:
<GlobalNamingResources>
<!--
JNDI Connection Pool for AS400
Since it uses an older version of JDBC, we have to specify a validationQuery
to bypass errornous calls to isValid() (which doesn't exist in older JDBC)
-->
<Resource name="jdbc/SomeDataSource"
auth="Container"
type="javax.sql.DataSource"
maxTotal="100"
maxIdle="30"
maxWaitMillis="10000"
username="[databaseusername]"
password="[databasepassword]"
driverClassName="com.ibm.as400.access.AS400JDBCDriver"
validationQuery="Select 1 from LIBRARY.TABLE"
url="jdbc:as400://[yourserver]:[port]"/>
在這個例子中,我們使用了一個相當特殊的資料來源(IBMi - 執行 DB2),它需要一個 validationQuery
元素集,因為它使用的是舊版本的 JDBC。給出了這個例子,因為那裡有很少的例子,以及 JDBC 系統為你提供的互操作性的顯示,即使對於過時的 DB2 系統(如上所述)。對於其他流行的資料庫系統,類似的配置也是如此:
<Resource name="jdbc/SomeDataSource"
auth="Container"
type="javax.sql.DataSource"
username="[DatabaseUsername]"
password="[DatabasePassword]"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql:/[yourserver]:[port]/[yourapplication]"
maxActive="15"
maxIdle="3"/>
在 context.xml
內部,我們需要為我們的 jdbc 資料來源配置一個指標(我們使用 JNDI 引用):
<Context>
...
<ResourceLink name="jdbc/SomeDataSource"
global="jdbc/SomeDataSource"
type="javax.sql.DataSource" />
</Context>
利用 context.xml
內部的 ResourceLink
,我們可以跨應用程式引用相同的資料來源,並在伺服器級別為多資料庫系統配置它。 (雖然它也適用於一個資料庫)