У меня есть приложение Spring MVC, которое использует встроенную базу данных для хранения учетных данных и настроек пользователей. Моя проблема в том, что я решил динамически хранить файлы БД в развернутой папке webapp Tomcat. Сегодня понял, что эта папка удаляется при каждом перезапуске Tomcat (или мне так кажется). Мой вопрос: есть ли способ избежать Tomcat удаления папки? Если нет, то где я могу хранить файлы базы данных? Какой путь будет лучше, если приложение предназначено для Windows, Linux и MacOS?
Избегайте Tomcat для удаления папки развернутого веб-приложения
Ответы:
Это не очень хорошая идея хранить в каталоге 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;
}
Tomcat никогда не удаляет папки из веб-приложения при перезапуске. Он будет удален, если что-то особенное настроено в сценарии завершения работы / сценария запуска. Перезапуск tomcat — это просто повторное развертывание файлов, присутствующих в веб-приложении. Пожалуйста, проверьте, действительно ли ваша программа, которая создает файлы базы данных, хранит их, это означает, что проверьте файлы после завершения работы. Если они существуют, то в вашем сценарии запуска написано что-то, что может удалить эти файлы.
Кроме того, хранение файлов базы данных в веб-приложении tomcat не является хорошим вариантом, поскольку любое последующее развертывание удалит войну и повторно развернет ее, тем самым удалив все предыдущие данные.
Также в зависимости от размера данных вы можете хранить данные непосредственно в БД.