避免使用Tomcat删除已部署的webapp文件夹

时间:2013-09-10 10:12:43

标签: tomcat spring-mvc

我有一个Spring MVC应用程序,它使用嵌入式数据库来存储用户凭据和设置。我的问题是我决定动态地将数据库文件存储在Tomcat的已部署webapp文件夹中。今天我意识到每次重启Tomcat时都会删除这个文件夹(或者我认为是这样)。我的问题是,有没有办法避免Tomcat删除文件夹?如果没有,我在哪里可以存储数据库文件?如果应用程序针对Windows,Linux和MacOS,那么哪条路会更好?

2 个答案:

答案 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;

}