0

私の Java EE アプリケーションには多くのサブプロジェクトが含まれており、単一の構成ファイルを使用してデータベースに接続する必要があります。Java クラスを作成し、それを独立した jar にして、からデータベース接続パラメータを読み取りますdatasource.xml。これは、独立した jar のパスに配置されます。

私が聞きたい質問:

  1. の絶対パスを動的に取得する方法はdatasource.xml?
  2. 最初の質問の解決策は、UNIX などのすべてのオペレーティング システムで機能しますか?
4

3 に答える 3

2

最初に対処しなければならない問題は、そのファイルを保存する場所です。

あなたの質問によると、実際のアプリケーション パッケージの外部で、ファイル システムのどこかにファイルを保存する予定です。したがって、ファイルにアクセスするには、ファイルが実際にファイル システムのどこにあるかを絶対に知っておく必要があります。ファイルの場所をコードに指示する環境変数を使用しない限り、事前に結論を出すことはできません。

より良い方法は、XML ファイルを JAR でパッケージ化することです。そうすれば、もう絶対パスを気にする必要はありません。を使用Thread.currentThread().getContextClassLoader().getResource()して、パッケージ スタイルのリソースへのパスを指定するだけで、リソースが見つかった場所への参照を取得できます。

ファイルを JAR と一緒にパッケージ化できない場合は、それをファイル システムのディレクトリに格納し、そのディレクトリをサーバーのクラスパス ルックアップ シーケンスに追加できる場合があります。一部のアプリケーション サーバーはそれをサポートしています。その後、リソースの絶対位置を知らなくても、クラスローダーを使用してリソースを検索できます。

于 2012-11-22T03:39:40.163 に答える
0

これはどうですか?実行時に相対パスを絶対パスに変換します。これはすべての環境で機能するはずです。

File a = new File("/some/abs/path");
File parentFolder = new File(a.getParent());
File b = new File(parentFolder, "../some/relative/path");
String absolute = b.getCanonicalPath(); // may throw IOException

よろしく

于 2012-11-22T03:11:33.263 に答える
0

環境変数を利用できます

String path = System.getEnv("MYVARIABLE");
File datasource = path + "/datasource.xml";

または、一定の場所で利用可能なプロパティファイルから場所を読み込みます

Properties props = new Properties();
try {
    props.load("MyFixed.properties");
} catch(Exception e) {
    e.printStackTrace(); // Can do better
}
String path = props.getProperty("datasource.path");
File datasource = path + "/datasource.xml";

または、-DでJarを開始するときに、VM引数を渡します

String path = System.getProperty("datasource.path");
File datasource = path + "/datasource.xml";

と電話します

java -jar -Ddatasource.path=/my/path/to/datasource.xml my.jar
于 2012-11-22T03:11:38.707 に答える