当前位置: 首页 > 知识库问答 >
问题:

如何在Tomcat中配置当前工作目录?

刘弘济
2023-03-14

我最近将tomcat应用程序从一台Linux服务器迁移到另一台。从那以后,我在新服务器上面临一个新的文件创建问题。在新服务器中,当我尝试创建文件时失败,这在旧服务器中运行良好:

File convFile = new File(file.getOriginalFilename());
convFile.createNewFile(); //this FAILS
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();

为了调查这个问题,我使用以下工具打印了工作目录:

String cwd = new File("").getAbsolutePath();
System.out.println(cwd);

这个调试揭示了问题背后的根本原因:旧服务器返回:var/lib/tomcat,而新服务器返回:/(根目录),因为tomcat用户没有(也不应该)对根目录的写入权限,所以无法创建文件。

我的问题,哪个因素决定了Tomcat当前的工作目录,以及如何配置它?

这是我的Tomcat和java环境变量。

Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"

Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"

更新:我尝试了-Duser.dir来配置工作目录。使用它后,我从System.out.println(cwd);得到预期的结果。但是问题仍然存在,文件创建失败。显然,这不适用于FileOutputStreams

来源:在Java中更改当前工作目录?

所有权和权限处理正确。我正在寻找一个系统端解决方案,而无需更改任何代码,因为相同的代码在旧服务器中工作。

共有1个答案

薄烨
2023-03-14

我正在RHEL 8.3上启动systemd。

为此,我发现在ExecStart之前添加这一节得到了预期的结果:

工作目录=/data/desired/catalina_base

YMMV与其他口味和启动选项-只需使用绝对路径即可执行启动

全平台:

Server version name:   Apache Tomcat/9.0.54
Server built:          Sep 28 2021 13:51:49 UTC
Server version number: 9.0.54.0
OS Name:               Linux
OS Version:            4.18.0-240.22.1.el8_3.x86_64
Architecture:          amd64
Java Home:             /usr/lib/jvm/java-11-openjdk-11.0.10.0.9-4.el8_3.x86_64
JVM Version:           11.0.10+9-LTS
JVM Vendor:            Red Hat, Inc.
 类似资料:
  • 问题内容: 我想使用Java访问我当前的工作目录。 我的代码: 输出: 我的输出不正确,因为C驱动器不是我的当前目录。 如何获得当前目录? 问题答案: 代码: 这将打印从中初始化您的应用程序的当前目录的绝对路径。 说明: 从文档中: 软件包使用当前用户目录解析相对路径名。当前目录表示为系统属性,也就是从其中调用JVM的目录。

  • 问题内容: 我想用Go 实现命令: 但是当我在shell中运行时,它仍然不会切换到我的主目录。 那么如何通过运行go文件在shell中更改我的工作目录? 问题答案: 你做不到 每个子进程都有从父进程继承的自己的工作目录。在这种情况下,您将从其父级(您的shell)获取其工作目录。子进程无法更改父进程的目录或任何其他状态。 这是基本的过程分离。允许子进程影响其父进程将遇到各种安全性和可用性问题。 外

  • 问题内容: 最近,在使用PyCharm时,我无法在代码中使用相对路径。例如,一个简单的将不起作用- 因此,我确定该文件与正在运行的py文件位于同一级别。PyCharm将返回此错误。 FileNotFoundError:[错误2]没有这样的文件或目录: 在StackOverflow上在线阅读答案后,我尝试了多种选择,包括: 更改为 关闭项目,删除.idea文件夹,使用代码打开该文件夹。 重新安装以及

  • 我试图在远程服务器上使用pgAdmin中的psql控制台和sql转储文件恢复架构。我收到以下错误: 由于缺乏超级用户权限,我似乎无法打印目录列表。 是否有方法在psql控制台中标识或打印当前工作目录?默认目录是什么?

  • Iam正在将我的项目从log4j 1.2.17迁移到2.10.0。 提前道谢。

  • 本文向大家介绍pycharm设置当前工作目录的操作(working directory),包括了pycharm设置当前工作目录的操作(working directory)的使用技巧和注意事项,需要的朋友参考一下 曾经在使用pycharm的时候找到过这个设置,后来想用的时候怎么都找不到了,今天终于摸索出来,记录一下,防止再次忘记。 debug界面 中间可以设置要调试的脚本以及参数,下面Environ