在 tomcat 9 中覆盖 maxWait

Override maxWait in tomcat 9

我有一个 tomcat 服务器并且在 tomcatFolder/conf/server.xml 我得到了这个标签 Resource

<Resource name="jdbc/TestDB"
      auth="Container"
      type="javax.sql.DataSource"
      factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
      testWhileIdle="true"
      testOnBorrow="true"
      testOnReturn="false"
      validationQuery="SELECT 1"
      validationInterval="30000"
      timeBetweenEvictionRunsMillis="30000"
      maxActive="100"
      minIdle="10"
      maxWait="10000"
      initialSize="10"
      removeAbandonedTimeout="60"
      removeAbandoned="true"
      logAbandoned="true"
      minEvictableIdleTimeMillis="30000"
      jmxEnabled="true"
      jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
        org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
      username="root"
      password="password"
      driverClassName="com.mysql.jdbc.Driver"
      url="jdbc:mysql://localhost:3306/mysql"/>

如何覆盖 setenv.sh 或 catalina.sh 运行 命令中的 maxWait 值??

我不确定如何 /override/,但您可以在 setenv.sh 中定义一个值并在配置文件中使用它。例如:

    # setenv.sh
    JAVA_OPTS="$JAVA_OPTS -Djdbc.maxWait=5000"
    <!-- server.xml or context.xml -->
    <Resource name=...
        ...
        maxWait="${jdbc.maxWait}"
        ...

更新:

Tomcat 版本 9.0.34 和 8.5.54 在配置文件中使用 ${...} 属性 替换时添加了对默认值的支持。对于 9.0.34 和 8.5.54,分隔符是冒号。例如

maxWait="${jdbc.maxWait:10000}"

对于 9.0.35 和 8.5.55,分隔符已更改为 :-。例如

maxWait="${jdbc.maxWait:-10000}"

(感谢 Piotr P. Karwasz 的评论)