0

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

4

2 回答 2

4

Tomcat 不会在重启时从 webapp 中删除文件夹。如果在关闭脚本/启动脚本中配置了任何特殊内容,它将被删除。重新启动 tomcat 只是重新部署 webapp 中存在的文件。请检查您正在创建数据库文件的程序是否实际上存储了相同的文件,即请在关闭后检查文件。如果它们存在,那么您的启动脚本中可能会删除这些文件。

此外,将数据库文件存储在 tomcat webapp 中也不是一个好的选择,因为任何后续部署都会删除战争并重新部署它,从而擦除所有先前的数据。

此外,根据数据的大小,您可以选择将数据直接存储到 DB。

于 2013-09-10T12:49:12.220 回答
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 配置:

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

}
于 2013-09-12T08:55:50.613 回答