Где/как хранить персистентные данные с котом?

Я рекомендовал бы Scott Hanselman еженедельные статьи исходного кода , он делает точно, что Ваше предложение, которое читается больше исходного кода для поправлений. Это стоит чтения.

12
задан nos 24 November 2009 в 20:27
поделиться

5 ответов

Наш команда делает это много. Общее правило, которому мы следуем, находится вне веб-приложения и вне Tomcat.

Наш системный администратор создал на нашем сервере каталог, на который пользователь Tomcat имеет разрешения rw (например, / var / tomcat / persist ). У нас есть встроенная структура каталогов, которую Tomcat использует для хранения файлов, чтения файлов инициализации для конкретных приложений и т. Д.

Если вы не хотите использовать абсолютный путь в параметрах инициализации для вашего сервлета, рассмотрите возможность установки системное свойство при запуске tomcat. Хорошо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Плохо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Вы можете установить свойство с именем base.persist.dir и построить под ним подкаталоги для каждого приложения. Мы устанавливаем системные свойства в скрипте setenv.sh в каталоге bin / в переменной среды CATALINA_OPTS.

У нас есть встроенная структура каталогов, которую Tomcat использует для хранения файлов, чтения файлов инициализации для конкретных приложений и т. Д.

Если вы не хотите использовать абсолютный путь в параметрах инициализации для вашего сервлета, рассмотрите возможность установки системное свойство при запуске tomcat. Хорошо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Плохо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Вы можете установить свойство с именем base.persist.dir и построить под ним подкаталоги для каждого приложения. Мы устанавливаем системные свойства в скрипте setenv.sh в каталоге bin / в переменной среды CATALINA_OPTS.

У нас есть встроенная структура каталогов, которую 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.

Плохо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Вы можете установить свойство с именем base.persist.dir и построить под ним подкаталоги для каждого приложения. Мы устанавливаем системные свойства в скрипте setenv.sh в каталоге bin / в переменной среды CATALINA_OPTS.

Плохо то, что каждое приложение, работающее под управлением tomcat, будет иметь к нему доступ. Вы можете установить свойство с именем base.persist.dir и построить под ним подкаталоги для каждого приложения. Мы устанавливаем системные свойства в скрипте setenv.sh в каталоге bin / в переменной среды CATALINA_OPTS.

10
ответ дан 2 December 2019 в 18:19
поделиться

Хранение файлов в каталоге webapp в домашнем каталоге пользователя, запускающего Tomcat, - хороший и удобный вариант. Он находится за пределами Tomcat, что означает, что он переживет повторное развертывание, и обычно это каталог с возможностью записи (поскольку он создается в домашнем каталоге пользователей). Но всегда полезно разрешить переопределение местоположения такого каталога через системное свойство.

4
ответ дан 2 December 2019 в 18:19
поделиться

Отвечая на заголовок вопроса, как насчет использования базы данных, DataSource и JDNI? Даже в контексте сети, запись в файлы с использованием java.io на самом деле не рекомендуется из-за проблем параллелизма, потоковой передачи, безопасности, кластеризации и переносимости. Некоторые из этих проблем можно «обойти», но, тем не менее, это не лучшая практика. Стандартный подход заключается в использовании базы данных, и я бы предложил пересмотреть этот вариант, добавив "файловую" легковесную базу данных, такую ​​как HSQLBD или JavaDB, в смесь.

(EDIT: по неизвестной причине база данных не является вариантом .Использование JNDI или параметров контекста или параметров инициализации для передачи абсолютного пути - которые являются менее худшими вариантами IMHO - также исключено. Для относительного пути, возможно, затем посмотрите user.home или user.dir - или любое другое системное свойство, которое вы можете передать в командной строке. Мне это не нравится, я бы не стал этого делать, и это не решает ранее упомянутые проблемы, но в конце концов это ваш выбор.)

5
ответ дан 2 December 2019 в 18:19
поделиться

Generally, this would go to the database. But since the OP insists on not using a database, I'd try a different approach:

  • Filesystem path which is known: ${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.
  • Store the configurable filesystem path in a configuration repository such as the database or perhaps Java Preferences (if you don't like to use servlet init params). Commercial applications such as Atlassian JIRA use a configurable (but absolute) filesystem path where they store issue attachments. If they don't know a better way, i don't know who does :)
1
ответ дан 2 December 2019 в 18:19
поделиться

Обычно я предлагаю использовать базу данных для хранения постоянных данных и предоставлять их через DataSource.

Если вы не хотите этого делать, я думаю, вы могли бы рассмотреть возможность использования " user.home "системное свойство (я видел это в нескольких случаях). Но ... нет никаких гарантий, что ваш сервлет будет запущен с разрешением на запись, если вы не настроите это самостоятельно.

0
ответ дан 2 December 2019 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: