Я рекомендовал бы Scott Hanselman еженедельные статьи исходного кода , он делает точно, что Ваше предложение, которое читается больше исходного кода для поправлений. Это стоит чтения.
Наш команда делает это много. Общее правило, которому мы следуем, находится вне веб-приложения и вне Tomcat.
Наш системный администратор создал на нашем сервере каталог, на который пользователь Tomcat имеет разрешения rw (например, / var / tomcat / persist
). У нас есть встроенная структура каталогов, которую Tomcat использует для хранения файлов, чтения файлов инициализации для конкретных приложений и т. Д.
Если вы не хотите использовать абсолютный путь в параметрах инициализации для вашего сервлета, рассмотрите возможность установки системное свойство при запуске tomcat. Хорошо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Плохо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Вы можете установить свойство с именем base.persist.dir
и построить под ним подкаталоги для каждого приложения. Мы устанавливаем системные свойства в скрипте setenv.sh в каталоге bin / в переменной среды CATALINA_OPTS.
Если вы не хотите использовать абсолютный путь в параметрах инициализации для вашего сервлета, рассмотрите возможность установки системное свойство при запуске tomcat. Хорошо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Плохо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Вы можете установить свойство с именем base.persist.dir
и построить под ним подкаталоги для каждого приложения. Мы устанавливаем системные свойства в скрипте setenv.sh в каталоге bin / в переменной среды CATALINA_OPTS.
Если вы не хотите использовать абсолютный путь в параметрах инициализации для вашего сервлета, рассмотрите возможность установки системное свойство при запуске tomcat. Хорошо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Плохо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Вы можете установить свойство с именем base.persist.dir
и построить под ним подкаталоги для каждого приложения. Мы устанавливаем системные свойства в скрипте setenv.sh в каталоге bin / в переменной среды CATALINA_OPTS.
base.persist.dir
и построить под ним подкаталоги для каждого приложения. Мы устанавливаем системные свойства в скрипте setenv.sh в каталоге bin / в переменной среды CATALINA_OPTS. Если вы хотите использовать абсолютный путь в ваших параметрах инициализации для вашего сервлета, рассмотрите возможность установки системного свойства при запуске tomcat. Хорошо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Плохо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Вы можете установить свойство с именем base.persist.dir
и построить под ним подкаталоги для каждого приложения. Мы устанавливаем системные свойства в скрипте setenv.sh в каталоге bin / в переменной среды CATALINA_OPTS. Плохо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Вы можете установить свойство с именем base.persist.dir
и построить под ним подкаталоги для каждого приложения. Мы устанавливаем системные свойства в скрипте setenv.sh в каталоге bin / в переменной среды CATALINA_OPTS. Плохо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Вы можете установить свойство с именем base.persist.dir
и построить под ним подкаталоги для каждого приложения. Мы устанавливаем системные свойства в скрипте setenv.sh в каталоге bin / в переменной среды CATALINA_OPTS. Хранение файлов в каталоге webapp в домашнем каталоге пользователя, запускающего Tomcat, - хороший и удобный вариант. Он находится за пределами Tomcat, что означает, что он переживет повторное развертывание, и обычно это каталог с возможностью записи (поскольку он создается в домашнем каталоге пользователей). Но всегда полезно разрешить переопределение местоположения такого каталога через системное свойство.
Отвечая на заголовок вопроса, как насчет использования базы данных, DataSource
и JDNI? Даже в контексте сети, запись в файлы с использованием java.io
на самом деле не рекомендуется из-за проблем параллелизма, потоковой передачи, безопасности, кластеризации и переносимости. Некоторые из этих проблем можно «обойти», но, тем не менее, это не лучшая практика. Стандартный подход заключается в использовании базы данных, и я бы предложил пересмотреть этот вариант, добавив "файловую" легковесную базу данных, такую как HSQLBD или JavaDB, в смесь.
(EDIT: по неизвестной причине база данных не является вариантом .Использование JNDI или параметров контекста или параметров инициализации для передачи абсолютного пути - которые являются менее худшими вариантами IMHO - также исключено. Для относительного пути, возможно, затем посмотрите user.home
или user.dir
- или любое другое системное свойство, которое вы можете передать в командной строке. Мне это не нравится, я бы не стал этого делать, и это не решает ранее упомянутые проблемы, но в конце концов это ваш выбор.)
Generally, this would go to the database. But since the OP insists on not using a database, I'd try a different approach:
${user.home}/.myapp
. Applications sometimes use this for e.g. search indices which can be recalculated based on data in the database. Might be okay for your use case to use the user's home.Обычно я предлагаю использовать базу данных для хранения постоянных данных и предоставлять их через DataSource.
Если вы не хотите этого делать, я думаю, вы могли бы рассмотреть возможность использования " user.home "системное свойство (я видел это в нескольких случаях). Но ... нет никаких гарантий, что ваш сервлет будет запущен с разрешением на запись, если вы не настроите это самостоятельно.