配置服务器范围的 JNDI 引用

你的 {CATALINA_HOME}/conf/文件夹里面有一个 server.xmlcontext.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,我们可以跨应用程序引用相同的数据源,并在服务器级别为多数据库系统配置它。 (虽然它也适用于一个数据库)