WedX - журнал о программировании и компьютерных науках

Избегайте Tomcat для удаления папки развернутого веб-приложения

У меня есть приложение Spring MVC, которое использует встроенную базу данных для хранения учетных данных и настроек пользователей. Моя проблема в том, что я решил динамически хранить файлы БД в развернутой папке webapp Tomcat. Сегодня понял, что эта папка удаляется при каждом перезапуске Tomcat (или мне так кажется). Мой вопрос: есть ли способ избежать Tomcat удаления папки? Если нет, то где я могу хранить файлы базы данных? Какой путь будет лучше, если приложение предназначено для Windows, Linux и MacOS?

10.09.2013

Ответы:


1

Это не очень хорошая идея хранить в каталоге tomcat, во время развертывания может быть удалено, что я рекомендовал Redis сделать это https://www.springsource.org/spring-data/redis, или, если вы хотите хранить во встроенной БД, создайте файл каталога внутри дома пользователя, который использует как Windows, так и Unix,

System.getProperty("user.home");

Или вы можете получить домашний каталог tomcat. Если CATALINA_HOME установлен в переменной среды с помощью

System.getProperty("catalina.base");

Или вы можете использовать абсолютный путь с использованием пакета Spring Message, поэтому вы можете добавить файл dir.properties и добавить в конфигурацию spring:

  <bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="/WEB-INF/dir" />
    <property name="defaultEncoding" value="UTF-8" />

and inside file dir.properties ,add path:

    storage:/var/lib/tomcat6/

Или, если вы заинтересованы в динамическом поиске ОС, вы можете использовать этот код для получения определенного каталога:

   public class FindOS {

private static final boolean osIsMacOsX;
private static final boolean osIsWindows;
private static final boolean osIsWindowsXP;
private static final boolean osIsWindows2003;
private static final boolean osIsWindowsVista;
private static final boolean osIsLinux;

static {
String os = System.getProperty("os.name");
if (os != null)
os = os.toLowerCase();  
osIsMacOsX = "mac os x".equals(os);
osIsWindows = os != null && os.indexOf("windows") != -1;
osIsWindowsXP = "windows xp".equals(os);
osIsWindows2003 = "windows 2003".equals(os);
osIsWindowsVista = "windows vista".equals(os);
osIsLinux = os != null && os.indexOf("linux") != -1;
}

public static boolean isMacOSX() {
return osIsMacOsX;
}

public static boolean isWindows() {
return osIsWindows;
    }

public static boolean isWindowsXP() {
return osIsWindowsXP;
}

public static boolean isWindows2003() {
return osIsWindows2003;
}

public static boolean isWindowsVista() {
return osIsWindowsVista;
}

public static boolean isLinux() {
return osIsLinux;
}

//TODO
String getHelperDirectory(){    
    if(isLinux())return "~/";       
    if(isWindows()) return "c:/";
    if(osIsWindowsVista) return "c:/";
    return null;

}
12.09.2013
  • И кто будет пользователем в средах unix? Кот? Я спрашиваю об этом, потому что у tomcat нет дома в дистрибутивах unix. 12.09.2013

  • 2

    Tomcat никогда не удаляет папки из веб-приложения при перезапуске. Он будет удален, если что-то особенное настроено в сценарии завершения работы / сценария запуска. Перезапуск tomcat — это просто повторное развертывание файлов, присутствующих в веб-приложении. Пожалуйста, проверьте, действительно ли ваша программа, которая создает файлы базы данных, хранит их, это означает, что проверьте файлы после завершения работы. Если они существуют, то в вашем сценарии запуска написано что-то, что может удалить эти файлы.

    Кроме того, хранение файлов базы данных в веб-приложении tomcat не является хорошим вариантом, поскольку любое последующее развертывание удалит войну и повторно развернет ее, тем самым удалив все предыдущие данные.

    Также в зависимости от размера данных вы можете хранить данные непосредственно в БД.

    10.09.2013
  • Спасибо за Ваш ответ. Я проверю это. И да, я храню данные непосредственно в БД, но это встроенная БД, и ее файлы находятся в этой папке (я использовал ее, потому что это было легко. Мне не нужно было проверять разрешения). 10.09.2013
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]