【问题标题】:Avoid Tomcat to delete deployed webapp folder避免 Tomcat 删除已部署的 webapp 文件夹
【发布时间】:2013-09-13 23:59:18
【问题描述】:

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

【问题讨论】:

    标签: tomcat spring-mvc


    【解决方案1】:

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

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

    还可以根据数据的大小选择将数据直接存储到 DB。

    【讨论】:

    • 感谢您的回答。我会检查的。是的,我将数据直接存储到数据库,但它是一个嵌入式数据库,它的文件在那个文件夹中(我使用它是因为它很简单。我没有检查权限)。
    【解决方案2】:

    存储在 tomcat 目录中不是一个好主意,在部署期间可能会删除该目录 我建议 Redis 这样做 http://www.springsource.org/spring-data/redis ,或者如果您想存储在嵌入式数据库中,请在使用 windows 和 unix 的用户家中创建一个目录文件

    System.getProperty("user.home");
    

    如果在环境变量中设置了 CATALINA_HOME,你可能会得到 tomcat 主目录 由

    System.getProperty("catalina.base");
    

    或者你可以使用spring消息包使用绝对路径,所以你可以添加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;
    
    }
    

    【讨论】:

    • Unix 环境中的用户是谁?雄猫?我问这个是因为 tomcat 在 unix 发行版中没有家。
    猜你喜欢
    • 1970-01-01
    • 2021-03-20
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    相关资源
    最近更新 更多