0

埋め込み DB を使用してユーザーの資格情報と設定を保存する Spring MVC アプリがあります。私の問題は、Tomcat のデプロイされた webapp フォルダー内に DB ファイルを動的に格納することにしたことです。今日、Tomcat を再起動するたびにこのフォルダーが削除されることに気付きました (またはそう思います)。私の質問は、Tomcat がフォルダーを削除しないようにする方法はありますか? そうでない場合、データベース ファイルはどこに保存できますか? アプリが Windows、Linux、および MacOS 向けである場合、どちらがより良い方法でしょうか?

4

2 に答える 2

1

Tomcat ディレクトリに保存するのは良い考えではありません。デプロイ中に削除する可能性があるため、Redis にそれを行うことをお勧めします http://www.springsource.org/spring-data/redis、または組み込み DB に保存する場合は、ディレクトリ ファイルを作成しますWindows と UNIX の両方を使用しているユーザーの家の中

System.getProperty("user.home");

または、Tomcat のホーム ディレクトリを取得できます。CATALINA_HOME が環境変数に設定されている場合

System.getProperty("catalina.base");

または、Spring Message バンドルを使用して絶対パスを使用できるため、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/

または、O を動的に見つけることに興味がある場合は、次のコードを使用して特定のディレクトリを取得できます。

   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 に答える