使用Tomcat设置JNDI连接池

本教程将指导读者完成在Tomcat6中设置OracleJNDI连接池以及如何从geoserver中检索它所需的过程。在最后一节中,用PostGIS和SQLServer描述了其他两个配置示例。

Tomcat设置

为了设置连接池,Tomcat需要一个JDBC驱动程序和必要的池配置。

首先,您需要为您的数据库找到JDBC驱动程序。大多数情况下,它是在您的DBMS提供商的网站上分发的,或者在您安装的数据库版本中提供。例如,在Linux系统上安装Oracle XE时提供的驱动程序位于 /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/jdbc/lib/ojdbc14.jar ,并且需要将该文件移到Tomcat共享库目录中, TOMCAT_HOME/lib

备注

当复制到Tomcat共享libs时,请小心从geoserver web-inf/lib文件夹中删除JDBC驱动程序,以避免JNDI数据存储使用中出现问题。

完成后,Tomcat配置文件 {TOMCAT_HOME}/conf/context.xml 需要编辑才能设置连接池。对于本地Oracle XE,设置可能如下所示:

<Context>
   ...
   <Resource name="jdbc/oralocal"
      auth="Container"
      type="javax.sql.DataSource"
      driverClassName="oracle.jdbc.driver.OracleDriver"
      url="jdbc:oracle:thin:@localhost:1521:xe"
      username="xxxxx" password="xxxxxx"
      maxActive="20"
      initialSize="0"
      minIdle="0"
      maxIdle="8"
      maxWait="10000"
      timeBetweenEvictionRunsMillis="30000"
      minEvictableIdleTimeMillis="60000"
      testWhileIdle="true"
      poolPreparedStatements="true"
      maxOpenPreparedStatements="100"
      validationQuery="SELECT SYSDATE FROM DUAL"
      maxAge="600000"
      rollbackOnReturn="true"
      />
 </Context>

该示例设置了一个连接到本地Oracle XE实例的连接池。池配置显示的是相当成熟的:

  • 最多20个活动连接(最多可并行使用的连接数)

  • 池中最多保留3个未使用的连接

  • 准备好的语句池(对于良好的性能非常重要)

  • 池中最多100个已准备好的报表

  • 在实际使用连接之前,重复检查连接是否仍处于活动状态的验证查询(如果保证连接不会断开,则无需执行此操作,因为服务器强制关闭连接,或者由于网络/维护问题)。

警告

只有当您真正知道自己在做什么时,才修改以下设置。使用的值太低 removedAbandonedTimeoutminEvictableIdleTimeMillis 可能导致连接失败,如果是,请尝试设置 logAbandonedtrue 检查你的 catalina.out 日志文件。

设置连接池的其他参数:

  • TimeBetweenictionRunsMillis(默认值为-1)空闲对象evictor线程运行之间休眠的毫秒数。当非正值时,将不会运行空闲的对象收回器线程。

  • numtestsperevictionrun(默认值3)每次运行空闲对象收回线程时要检查的对象数(如果有)。

  • MinEvicableIdleTimeMillis(默认为1000 * 60 * 30)在对象有资格被空闲对象逐出器(如果有的话)逐出之前,对象可以在池中空闲的最短时间。

  • removeBandoned(默认为false)标志,用于在放弃的连接超过removeBandonedTimeout时删除这些连接。如果设置为“真”,则连接被视为已放弃,并且如果空闲时间长于removeBandonedTimeout,则可以删除连接。将此设置为true可以从写得不好的应用程序恢复数据库连接,这些应用程序无法关闭连接。

  • 在删除放弃的连接之前,RemoveBandOnedTimeout(默认为300)超时(以秒为单位)。

  • 日志放弃(默认为假)标志,记录放弃语句或连接的应用程序代码的堆栈跟踪。

有关可能的参数及其值的更多信息,请参阅 DBCP documentation .

地理服务器设置

登录到geoserver web管理界面并配置数据存储。

首先,选择 甲骨文(JNDI) 数据存储并为其命名:

../../_images/oracle_start.png

选择启用JNDI的数据存储

然后,配置连接参数,使JNDI路径与Tomcat配置中指定的路径匹配:

../../_images/oracle_conf.png

配置JNDI连接

当你这样做的时候,确保 图式 是正确设置的,或者数据存储将列出它可以在其可以访问的架构中找到的所有表。在Oracle中,模式通常是用户名,大写。

一旦数据存储被接受,geoserver的使用将正常进行。

其他示例

配置PostgreSQL连接池

在本例中,将配置PostgreSQL连接池。

要配置JNDI池,您需要移动Postgres JDBC驱动程序(应该命名为 postgresql-XX.X.X.jar )从地球服务器 WEB-INF/lib 文件夹并将其放入 TOMCAT_HOME/lib 文件夹。

然后,必须将以下代码添加到Tomcat配置文件 TOMCAT_HOME/conf/context.xml 在上下文标签内。

<Context>
        <Resource name="jdbc/postgres"
      auth="Container"
      type="javax.sql.DataSource"
      driverClassName="org.postgresql.Driver"
      url="jdbc:postgresql://localhost:5432/test"
      username="xxxxx" password="xxxxxx"
      maxActive="20"
      initialSize="0"
      minIdle="0"
      maxIdle="8"
      maxWait="10000"
      timeBetweenEvictionRunsMillis="30000"
      minEvictableIdleTimeMillis="60000"
      testWhileIdle="true"
      validationQuery="SELECT 1"
      maxAge="600000"
      rollbackOnReturn="true"
    />
</Context>

地理服务器设置

登录到geoserver web管理界面。

首先,选择 PostGIS(JNDI) 数据存储并为其命名:

../../_images/postgis_start.png

然后配置相关参数。JndiReferenceName的值对应于中给出的资源名称 TOMCAT_HOME/conf/context.xml

../../_images/postgis_conf.png

配置SQLServer连接池

要为sqlserver配置连接池,需要按照中的说明配置sqlserver驱动程序。 Microsoft SQL Server 部分并将jar文件放入 {TOMCAT_HOME}/lib 文件夹。

然后必须在Tomcat配置文件中写入以下代码 {TOMCAT_HOME}/conf/context.xml

<Context>
   ...
      <Resource name="jdbc/sqlserver"
      auth="Container"
      type="javax.sql.DataSource"
      driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
      url="jdbc:sqlserver://localhost:1433;databaseName=test;user=admin;password=admin;"
      username="admin" password="admin"
      maxActive="20"
      initialSize="0"
      minIdle="0"
      maxIdle="8"
      maxWait="10000"
      timeBetweenEvictionRunsMillis="30000"
      minEvictableIdleTimeMillis="60000"
      testWhileIdle="true"
      poolPreparedStatements="true"
      maxOpenPreparedStatements="100"
      validationQuery="SELECT 1"
      maxAge="600000"
      rollbackOnReturn="true"
      />
</Context>

备注

请注意,数据库名称、用户名和密码必须直接在URL中定义。

地理服务器设置

登录到geoserver web管理界面。

首先,选择 Microsoft SQL Server(JNDI) 数据存储并为其命名:

../../_images/sqlserver_start.png

然后配置关联的参数:

../../_images/sqlserver_conf.png