如何强制 Tomcat 不将数据(如日志、临时文件、ets)写入其自己的根文件夹?

How to force Tomcat doesn't write data (like logs, temp, ets) to its own root folder?

我想从我的 Java/Spring Web 应用程序创建一个桌面独立应用程序。我创建了 MSI 安装程序,将所有必需的文件复制到 C:\Program Files (x86)\App。但是 tomcat 没有权限,不能写入自己的文件夹。我如何配置 tomcat 以便将 all 应用程序特定数据写入其他文件夹?我不想将我的应用程序安装到 C:\App 或用户目录。

java.io.FileNotFoundException: C:\Program Files (x86)\App\tomcat\logs\catalina.2016-06-18.log (Access denied)

查找 "$CATALINA_BASE"/logs/catalina.out 的所有匹配项并将其更新为 catalina.sh 脚本中的自定义路径。

通过将环境变量 CATALINA_BASE 设置为 tomcat 启动脚本中的另一个目录,您可以将 Tomcat 配置为 read/put 工作数据、配置和内容 from/to 另一个位置。如果设置 CATALINA_BASE,Tomcat 将使用 %CATALINA_BASE%/bin%CATALINA_BASE%/conf%CATALINA_BASE%/logs%CATALINA_BASE%/temp 等文件夹作为 Tomcat。 高级配置 - Tomcat 根文件夹中的 RUNNING.txt 文件的多个 Tomcat 实例 部分对此进行了更详细的描述。

如果您计划将 Tomcat 与您的应用程序一起发布并将所有 Tomcat 文件放入某个用户可选择的文件夹,您应该将 CATALINA_HOME 设置到该文件夹​​。 Tomcat 然后将使用此文件夹作为所有内容的基本目录。

但是我认为,正如您提到要发布基于 Spring 的独立应用程序,您应该认真地看一下 Spring Boot。这将允许您发送包含 所有 应用程序依赖项(包括 Tomcat)的单个 fat jar。并且这个应用程序可以简单地通过执行jar文件来启动。


如果只是关于日志和临时文件,您可以在%CATALINA_BASE%/bin下的setenv.bat文件中设置Java系统属性java.util.logging.config.filejava.io.tmpdir ] 使 Tomcat 分别使用自定义日志记录配置和不同的临时目录。那就是文件看起来像这样:

set CATALINA_OPTS="-Djava.util.logging.config.file=file:///c:/path/to/log/config.properties"
set CATALINA_OPTS="%CATALINA_OPTS% -Djava.io.tmpdir=c:/path/to/temp/dir"