系统属性

目录

简介

以下章节列出了可以设置以修改 Tomcat 默认行为的系统属性。

属性替换

属性描述
org.apache.tomcat.util.digester.PROPERTY_SOURCE

将其设置为一个逗号分隔的类完全限定名列表,这些类实现了org.apache.tomcat.util.IntrospectionUtils.PropertySource。要求具有无参数的公共构造函数。

使用此属性添加属性源,当 Tomcat 解析的 XML 文件中发现 ${parameter:-default-value} 表示的参数(带可选默认值)时,将调用该属性源。

从指定属性源对 JVM 系统属性进行属性替换也可以使用 REPLACE_SYSTEM_PROPERTIES 系统属性完成。

org.apache.tomcat.util.digester.ServiceBindingPropertySource 可用于替换遵循 servicebinding.io 规范的任何 Kubernetes 服务绑定中的参数

org.apache.tomcat.util.digester.EnvironmentPropertySource 可用于替换来自进程环境变量的参数,例如容器化系统(如 OpenShift 或 Kubernetes)中注入的 ConfigMaps 或 Secret 对象。

org.apache.tomcat.util.digester.SystemPropertySource 使用系统属性进行替换。它始终启用,但也可以作为属性值的一部分进行指定。

org.apache.tomcat.util.digester.REPLACE_SYSTEM_PROPERTIES

将此布尔系统属性设置为 true,以使 digester 属性源对 JVM 系统属性进行属性替换。

表达式语言

属性描述
org.apache.el.BeanELResolver.CACHE_SIZE

EL 解析器将缓存的 jakarta.el.BeanELResolver.BeanProperties 对象的数量。

如果未指定,将使用默认值 1000

org.apache.el.ExpressionBuilder.CACHE_SIZE

EL 解析器将缓存的已解析 EL 表达式的数量。

如果未指定,将使用默认值 5000

org.apache.el.parser.COERCE_TO_ZERO

如果为 true,则在将 null 强制转换为 Number、Character 或 Boolean 类型的对象时,Number 和 Character 类型的结果将是 0,Boolean 类型的结果将是 false,这符合 EL 2.2 及更早版本的规范要求。如果此属性为 false,则强制转换的结果将为 null,这符合 EL 3.0 规范的要求。

如果未指定,将使用默认值 false

org.apache.el.parser.SKIP_IDENTIFIER_CHECK

如果为 true,则在解析表达式时,将不会检查标识符是否符合 Java 语言规范中 Java 标识符的要求。

如果未指定,将使用默认值 false

规范

属性描述
org.apache.catalina.STRICT_SERVLET_COMPLIANCE

此系统属性的默认值为 false

如果此属性为 true,则以下属性的默认值将从 false 更改为 true

  • 任何 Context 元素的 alwaysAccessSession 属性。
  • 任何 Context 元素的 contextGetResourceRequiresSlash 属性。
  • 任何 Context 元素的 dispatcherWrapsSameObject 属性。
  • 任何 Context 元素的 resourceOnlyServlets 属性。
  • 任何 Context 元素的 tldValidation 属性。
  • 任何 Context 元素的 useRelativeRedirects 属性。
  • 任何 Context 元素的 xmlNamespaceAware 属性。
  • 任何 Context 元素的 xmlValidation 属性。
  • 任何 Manager 元素的 sessionActivityCheck 属性。
  • 任何 Manager 元素的 sessionLastAccessAtStart 属性。

日志

属性描述
org.apache.juli.formatter

如果未指定日志配置 B 文件,也未通过 java.util.logging.config.classjava.util.logging.config.file 属性指定日志配置类,则默认日志框架 org.apache.juli 将为所有控制台输出使用默认的 java.util.logging.SimpleFormatter。为了简单地覆盖控制台输出格式化程序,可以使用此属性。示例:-Dorg.apache.juli.formatter=org.apache.juli.OneLineFormatter

org.apache.juli.AsyncMaxRecordCount

JULI AsyncFileHandler 将在内存中排队的最大日志记录数。新记录被添加到队列中,并由单个写入线程异步地从队列中移除并写入文件。当队列已满且正在记录新记录时,将根据 org.apache.juli.AsyncOverflowDropType 设置处理日志记录。

默认值为 10000 条记录。此数字表示全局记录数,而不是每个处理器的记录数。

org.apache.juli.AsyncOverflowDropType

当 JULI AsyncFileHandler 的日志记录队列已满时,新日志记录将根据以下设置进行处理

  • 1 - 队列中最新的记录将被丢弃,不予记录
  • 2 - 队列中最旧的记录将被丢弃,不予记录
  • 3 - 暂停日志线程,直到旧记录写入日志文件且队列不再满。这是唯一能确保消息不丢失的设置。
  • 4 - 丢弃当前日志记录

默认值为 1(丢弃队列中最新的记录)。

org.apache.juli.logging.UserDataHelper.CONFIG

用于处理由无效输入数据生成的错误的日志类型。选项包括:DEBUG_ALLINFO_THEN_DEBUGINFO_ALLNONE。当使用 INFO_THEN_DEBUG 时,错误以 DEBUG 而不是 INFO 记录的周期由系统属性 org.apache.juli.logging.UserDataHelper.SUPPRESSION_TIME 控制。

默认值为 INFO_THEN_DEBUG

目前使用此系统记录的错误包括

  • 无效的 Cookie;
  • 无效的参数;
  • 过多的头部、过多的参数(达到 connectormaxHeaderCountmaxParameterCount 限制)。
  • 无效的主机名
  • HTTP/2 流关闭

未来版本可能会将由无效输入数据触发的其他错误添加到此系统。

org.apache.juli.logging.UserDataHelper.SUPPRESSION_TIME

org.apache.juli.logging.UserDataHelper.CONFIG 使用 INFO_THEN_DEBUG 时,此系统属性控制消息在以 INFO 级别记录后,以 DEBUG 级别记录多长时间。一旦此周期结束,下一条消息将以 INFO 级别记录,然后进入一个新的抑制周期,消息将以 DEBUG 级别记录,依此类推。该值以秒为单位。

0 等同于 org.apache.juli.logging.UserDataHelper.CONFIG 使用 INFO_ALL

负值表示无限抑制期。

默认值为 86400(24 小时)。

JAR 扫描

属性描述
tomcat.util.scan.StandardJarScanFilter.jarsToSkip

一个逗号分隔的文件名模式列表,用作标准 JarScanFilter 实现的 pluggabilitySkiptldSkip 属性的默认值。

代码中默认值为空,但在默认的 Tomcat 安装中,此系统属性通过 $CATALINA_BASE/conf/catalina.properties 文件设置。

tomcat.util.scan.StandardJarScanFilter.jarsToScan

一个逗号分隔的文件名模式列表,用作标准 JarScanFilter 实现的 pluggabilityScantldScan 属性的默认值。

代码中默认值为空,但在默认的 Tomcat 安装中,此系统属性通过 $CATALINA_BASE/conf/catalina.properties 文件设置。

Websockets

属性描述
org.apache.tomcat.websocket.DEFAULT_BUFFER_SIZE

Websockets 容器中使用的缓冲区默认大小。

默认值为 8192,相当于 8 KiB。

org.apache.tomcat.websocket.DEFAULT_ORIGIN_HEADER_VALUE

客户端在升级握手期间将发送的源头部默认值。

默认值为 null,因此不会发送源头部。

org.apache.tomcat.websocket.DEFAULT_PROCESS_PERIOD

周期性处理(特别是会话过期检查)之间的周期性间隔数。

默认值为 10,相当于 10 秒。

其他

属性描述
catalina.useNaming

如果此属性为 false,它将覆盖所有 Context 元素的 useNaming 属性。

javax.sql.DataSource.Factory

用于创建 javax.sql.DataSource 类型资源的工厂类名。如果未指定,则使用默认的 org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory,它是 Apache Commons DBCP 2 的包重命名(以避免冲突)副本。

jakarta.mail.Session.Factory

用于创建 jakarta.mail.Session 类型资源的工厂类名。如果未指定,则使用默认的 org.apache.naming.factory.MailSessionFactory

catalina.config

加载 catalina.properties 配置文件的位置。这可以是一个绝对 URL、一个相对(相对于当前工作目录)URL,或者一个备用文件名,在这种情况下 Tomcat 将尝试从 $CATALINA_BASE/conf/ 的默认位置加载文件。

tomcat.util.buf.StringCache.byte.enabled

如果为 true,则为 ByteChunk 启用字符串缓存。

如果未指定,将使用默认值 false

tomcat.util.buf.StringCache.char.enabled

如果为 true,则为 CharChunk 启用字符串缓存。

如果未指定,将使用默认值 false

tomcat.util.buf.StringCache.trainThreshold

在激活缓存之前,toString() 必须被调用的次数。

如果未指定,将使用默认值 20000

tomcat.util.buf.StringCache.cacheSize

字符串缓存的大小。

如果未指定,将使用默认值 200

org.apache.tomcat.util.buf.UriUtil.WAR_SEPARATOR

在 Tomcat 提供的自定义 WAR 方案中,用于分隔 WAR 文件和 WAR 内容部分的 WAR URL 的字符。这等同于 JAR URL 中 ! 的用法。

如果未指定,将使用默认值 *

tomcat.util.buf.StringCache.maxStringSize

将被缓存的字符串的最大长度。

如果未指定,将使用默认值 128

org.apache.tomcat.util.http.FastHttpDateFormat.CACHE_SIZE

用于缓存解析和格式化日期值的大小。

如果未指定,将使用默认值 1000

org.apache.tomcat.util.openssl.LIBRARY_NAME

指定 OpenSSL 的库名称。

如果未指定,将使用默认值 ssl,但 MacOS 除外,在 MacOS 上将使用版本化的 dylib 名称,形式为 ssl.v,其中 v 是版本号。

org.apache.tomcat.util.openssl.USE_SYSTEM_LOAD_LIBRARY

使用 System.loadLibrary 加载 OpenSSL,而不是 FFM 库加载代码。

如果未指定,将使用默认值 false

org.apache.catalina.startup.EXIT_ON_INIT_FAILURE

如果为 true,则在服务器初始化阶段发生异常时,服务器将退出。为了支持此功能,此系统属性用作 Connector 的 throwOnFailure 属性的默认值。

如果未指定,将使用默认值 false

org.apache.catalina.startup.RealmRuleSet.MAX_NESTED_REALM_LEVELS

CombinedRealm 允许嵌套 Realm。此属性控制允许的最大嵌套级别数。

如果未指定,将使用默认值 3

org.apache.catalina.startup.CredentialHandlerRuleSet.MAX_NESTED_LEVELS

NestedCredentialHandler 允许嵌套 CredentialHandlers。此属性控制允许的最大嵌套级别数。

如果未指定,将使用默认值 3

org.apache.catalina.tribes.io.BufferPool.DEFAULT_POOL_SIZE

Tribes 使用的缓冲区池大小,以字节为单位。

如果未指定,将使用默认值 100*1024*1024(100 MiB)。