Я недавно перенес приложение 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?
Владение и разрешения обрабатываются правильно. Я ищу системное решение без внесения каких-либо изменений в код, так как тот же код работает на старом сервере.