文档主页
MySQL Connector/J 开发者指南
相关文档 下载本手册
PDF (US Ltr) - 1.2Mb
PDF (A4) - 1.2Mb


MySQL Connector/J 开发者指南  /  将 Connector/J 与 Tomcat 一起使用

第 14 章 将 Connector/J 与 Tomcat 一起使用

以下说明基于 Tomcat-5.x 的说明,可在 https://tomcat.net.cn/tomcat-5.5-doc/jndi-datasource-examples-howto.html 获取,该说明在本文件编写时是最新的。

首先,在 $CATALINA_HOME/common/lib 中安装 Connector/J 附带的 .jar 文件,以便安装在容器中的所有应用程序都可以使用它。

接下来,通过在定义 Web 应用程序的上下文中向 $CATALINA_HOME/conf/server.xml 添加声明资源来配置 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://127.0.0.1:3306/test</value>
    </parameter>

  </ResourceParams>
</Context>

Connector/J 引入了一种机制,通过该机制,可以使用值为 /* ping */validationQuery,而不是使用 SELECT 1validationQuery 值。这会向服务器发送一个 ping 命令,然后服务器返回一个假的 结果集。这是一种更轻量级的解决方案。它还有一个优点,即如果使用 ReplicationConnectionLoadBalancedConnection 类型的连接,ping 命令将通过所有活动连接发送。以下 XML 代码段说明了如何选择此选项

<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

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