单个 web 应用程序重新加载会获取修改后的 Tomcat setenv.sh 吗?

frh*_*rhd 2 java tomcat

是否可以修改 Tomcat 环境变量并让它们在不重新启动整个服务器的情况下由单个重新加载的 web 应用程序获取?

假设我们有 webapp A 和 B,以及 a setenv.sh

#!/bin/bash

BASE_DIR=/var/srv
JAVA_HOME=/opt/java/jdk1.8.0_45
TOMCAT_DIR=/opt/apache-tomcat-8.0.18
TOMCAT_PORT=8080
SOME_PROPERTY=SOMETHING
Run Code Online (Sandbox Code Playgroud)

如果我们SOME_PROPERTY只更改并重新加载 A,它会捕获新值,还是需要重新启动 Tomcat?

dot*_*vav 5

setenv.sh不仅仅是读取的配置文件。它是在tomcat JVM 启动之前执行的脚本,用于为tomcat JVM 进程(底层OS 的进程)设置环境。一旦该进程启动,它就会在具有此环境变量的上下文中运行。

Java 可以访问和改变系统属性(-DJVM 命令行的参数,不要与 env 变量混淆)System.getPropertySystem.setProperty但它本身无法解析和解释使用的 shell 脚本在主机操作系统上启动 JVM 进程。

我的建议是创建一个配置文件,在 env 变量/系统属性中传递此配置文件的路径,并在应用程序启动时重新加载此文件。