我有一个Spring MVC应用程序,它使用嵌入式数据库来存储用户凭据和设置。我的问题是我决定动态地将数据库文件存储在Tomcat的已部署webapp文件夹中。今天我意识到每次重启Tomcat时都会删除这个文件夹(或者我认为是这样)。我的问题是,有没有办法避免Tomcat删除文件夹?如果没有,我在哪里可以存储数据库文件?如果应用程序针对Windows,Linux和MacOS,那么哪条路会更好?
答案 0 :(得分:3)
Tomcat永远不会在重新启动时从webapp中删除文件夹。如果在关闭脚本/启动脚本中配置了任何特殊内容,它将删除。重新启动tomcat只是重新部署webapp中的文件。请检查创建数据库文件的程序是否实际存储相同,请关闭后检查文件。 如果它们存在,那么在您的启动脚本中写入了可能正在删除这些文件的内容
同样在tomcat webapp中存储数据库文件不是一个好选择,因为任何后续部署都将删除战争并重新部署它,从而删除所有先前的数据。
另外,根据您可以选择将数据直接存储到数据库的数据大小。
答案 1 :(得分:1)
在tomcat目录中存储并不是一个好主意,在部署期间可能会删除它 我建议Redis执行此操作http://www.springsource.org/spring-data/redis,或者如果您希望在嵌入式数据库中存储,请在用户的主页内创建一个目录文件,该文件同时使用windows和unix
System.getProperty("user.home");
或者你可能得到tomcat主目录如果在环境变量中设置了CATALINA_HOME 通过
System.getProperty("catalina.base");
或者您可以使用spring message bundle使用绝对路径,因此您可以添加dir.properties文件并添加spring config:
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/dir" />
<property name="defaultEncoding" value="UTF-8" />
并在文件dir.properties中添加路径:
storage:/var/lib/tomcat6/
或者,如果您有兴趣动态查找Os,可以使用此代码获取特定目录:
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;
}