使用 Apache Tomcat Web 服务器时适用于 Java 的数据源配置
数据源是一个指定的数据库连接。您必须在 Web 应用程序服务器中指定数据源,才能将要素服务发布到 ArcGIS Spatial Data Server for Java Platform。数据源对象配置有一个基于 Java 命名和目录接口 (JNDI) API 的命名服务。
安装并配置 Tomcat 后,请执行以下操作以便其可与 ArcGIS Spatial Data Server 配合使用:
将 JDBC 驱动程序放置在 Tomcat 主目录下
必须将 DBMS 的 JDBC 驱动程序放到 $CATALINA_HOME 的 lib 目录下。
更改 Tomcat 的 context.xml 文件
如果使用 Apache Tomcat Web 服务器,则必须在默认的 Web 配置文件 context.xml 中指定数据源。要编辑 context.xml,请执行以下步骤:
- 导航至 Tomcat 安装目录中的 conf 目录。
- 创建 context.xml 文件的备份副本。
- 在文本编辑器中打开 context.xml 文件。
- 更改<资源名称>元素中的信息以将其用于您的站点。(本主题中提供了多个示例。)<Resource name> 元素嵌套在 <Context> 元素中。
<Context> 元素中可以包含其他元素,但请确保 <Resource name> 元素处于 <Context> 元素的下一级且未嵌套在某个其他元素中。
- 保存并关闭 context.xml 文件。
- 重新启动 Tomcat 服务器。
如果您未向 context.xml 文件添加数据源,或 <Resource name> 元素属性前不带有 jdbc/,则您将收到以下错误消息:
Name jdbc is not bound in this Context
示例
以下是在 Tomcat context.xml 文件中为每种支持的数据库进行数据源配置的相关示例。针对每种数据库的两种类型的连接池的示例分别为:数据库连接池 (DBCP) 和 JDBC 连接池。

Apache 建议使用 JDBC 连接池。有关详细信息以及 <Resource name> 元素中可用属性的相关说明,请参阅 Apache Tomcat 文档。
PostgreSQL
以下是使用 DBCP 的 PostgreSQL <Resource> 元素的示例。用 X 表示的值代表您将要提供的站点的特定信息。
<Context> <Resource name="jdbc/X" auth="Container" type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://X:X/X" username="X" password="X" maxActive="X" maxIdle="X" maxWait="X"/> </Context>
在此示例中,资源名称是 jdbc/pgservername,数据源是服务器 pgservername 上监听端口 5432 的 PostgreSQL 数据库 (pgdbname)。
<Context> <Resource name="jdbc/pgservername_pgdbname_pgusername" auth="Container" type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://pgservername:5432/pgdbname" username="pgusername" password="pgpassword246" maxActive="20" maxIdle="10" maxWait="-1"/> </Context>
以下仍是 PostgreSQL 数据库的示例,但使用了 JDBC 连接池:
<Context> <Resource type="javax.sql.DataSource" name="jdbc/pgservername_pgdbname_pgusername" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://pgservername:5432/pgdbname" username="pgusername" password="pgpassword246" initialSize="0" maxActive="80" maxIdle = "30" minIdle="20" timeBetweenEvictionRunsMillis="30000" minEvictableIdleTimeMillis="60000" testOnBorrow="true" validationQuery="SELECT 1" validationInterval="30000" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true" abandonWhenPercentageFull="60" jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"/> </Context>
Oracle
以下是 Oracle <Resource> 元素的示例。用 X 表示的值代表您将要提供的站点的特定信息。
<Context> <Resource name="jdbc/X" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@X:X:X" username="X" password="X" maxActive="X" maxIdle="X" maxWait="X"/> </Context>
在此示例中,资源名称是 jdbc/oraservername,数据源是服务器 oraservername 上监听数据库端口 1521 的 Oracle 数据库。Oracle SID 是 osid。必须在注册数据源之前配置 Oracle SID。
<Context> <Resource name="jdbc/oraservername_osid_orausername" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@oraservername:1521:osid" username="orausername" password="0rapassword123" maxActive="20" maxIdle="10" maxWait="-1"/> </Context>
以下仍是相同 Oracle 数据库的示例,但使用了 JDBC 连接池:
<Context> <Resource type="javax.sql.DataSource" name="jdbc/oraservername_osid_orausername" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@oraservername:1521:osid" username="orausername" password="0rapassword123" initialSize="0" maxActive="80" maxIdle = "30" minIdle="20" timeBetweenEvictionRunsMillis="30000" minEvictableIdleTimeMillis="60000" testOnBorrow="true" validationQuery="SELECT 1 FROM DUAL" validationInterval="30000" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true" abandonWhenPercentageFull="60" jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"/> </Context>
DB2
以下是 DB2 <Resource> 元素的示例。用 X 表示的值代表您将要提供的站点的特定信息。
<Context> <Resource name="jdbc/X" auth="Container" type="javax.sql.DataSource" driverClassName="com.ibm.db2.jcc.DB2Driver" url="jdbc:db2://X:X/X" username="X" password="X" maxActive="X" maxIdle="X" maxWait="X"/> </Context>
在此示例中,资源名称是 jdbc/db2servername,DB2 服务器是 db2servername,数据库端口是 60000,登记数据库是 db2dba。
<Context> <Resource name="jdbc/db2servername_db2dba_db2username" auth="Container" type="javax.sql.DataSource" driverClassName="com.ibm.db2.jcc.DB2Driver" url="jdbc:db2://db2servername:60000/db2dba" username="db2username" password="db2password975" maxActive="20" maxIdle="10" maxWait="-1"/> </Context>
以下仍是相同 DB2 数据库的示例,但使用了 JDBC 连接池:
<Context> <Resource type="javax.sql.DataSource" name="jdbc/db2servername_db2dba_db2username" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" driverClassName="com.ibm.db2.jcc.DB2Driver" url="jdbc:db2://db2servername:60000/db2dba" username="db2username" password="db2password975" initialSize="0" maxActive="80" maxIdle = "30" minIdle="20" timeBetweenEvictionRunsMillis="30000" minEvictableIdleTimeMillis="60000" testOnBorrow="true" validationQuery="VALUES 1" validationInterval="30000" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true" abandonWhenPercentageFull="60" jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer"/> </Context>