连接器和 API 手册  / 第 3 章 MySQL Connector/J 开发人员指南  /  3.12 在 Tomcat 中使用连接器/J

3.12 在 Tomcat 中使用连接器/J

以下说明基于 Tomcat-5.x 的说明,可从 http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html获得 ,该文件在撰写本文时是最新的被写了。

首先,将.jarConnector/J自带的文件$CATALINA_HOME/common/lib安装进去,这样容器中安装的所有应用程序都可以使用它。

$CATALINA_HOME/conf/server.xml接下来,通过在定义 Web 应用程序的上下文中 添加声明资源来配置 JNDI 数据源:

  <Context ....>
  ...
  <Resource name="jdbc/MySQLDB"
               auth="Container"
               type="javax.sql.DataSource"/>
  <ResourceParams name="jdbc/MySQLDB">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>10</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>5</value>
    </parameter>
    <parameter>
      <name>validationQuery</name>
      <value>SELECT 1</value>
    </parameter>
    <parameter>
      <name>testOnBorrow</name>
      <value>true</value>
    </parameter>
    <parameter>
      <name>testWhileIdle</name>
      <value>true</value>
    </parameter>
    <parameter>
      <name>timeBetweenEvictionRunsMillis</name>
      <value>10000</value>
    </parameter>
    <parameter>
      <name>minEvictableIdleTimeMillis</name>
      <value>60000</value>
    </parameter>
    <parameter>
     <name>username</name>
     <value>someuser</value>
    </parameter>
    <parameter>
     <name>password</name>
     <value>somepass</value>
    </parameter>
    <parameter>
       <name>driverClassName</name>
       <value>com.mysql.cj.jdbc.Driver</value>
    </parameter>
    <parameter>
      <name>url</name>
      <value>jdbc:mysql://localhost:3306/test</value>
    </parameter>
  </ResourceParams>
</Context>

Connector/J 引入了一种工具,通过该工具,可以使用 值设置为 ,而不是使用 validationQuery值。这会向服务器发送一个 ping,然后服务器返回一个伪造的结果集。这是一个重量更轻的解决方案。它还有一个优点,如果使用 或 类型连接,ping 将发送到所有活动连接。以下 XML 片段说明了如何选择此选项: SELECT 1validationQuery/* ping */ReplicationConnectionLoadBalancedConnection

<parameter>
 <name>validationQuery</name>
 <value>/* ping */</value>
</parameter>

请注意,/* ping */必须准确指定。

通常,请按照您的 Tomcat 版本附带的安装说明进行操作,因为您在 Tomcat 中配置数据源的方式会不时发生变化,如果您在 XML 文件中使用了错误的语法,您很可能会以异常结束类似于以下内容:

Error: java.sql.SQLException: Cannot load JDBC driver class 'null ' SQL
state: null

请注意,自动加载具有 META-INF/service/java.sql.DriverJDBC 4.0 及更高版本中的类的驱动程序会导致 Windows 上 Tomcat 中的 Connector/J 驱动程序不正确地取消部署。即,Connector/J jar 保持锁定状态。这是一个与驱动程序无关的初始化问题。可能的解决方法(如果可行)如下:使用“ antiResourceLocking=true”作为 Tomcat 上下文属性,或删除 META-INF/目录。