3

コンテナーapplication.propertiesを使用してサーブレット アプリケーションからファイルを読み取る必要があります。Tomcatファイルを my に含めるwarことはできないため、webapps またはTomcatルート フォルダーの下に置くことはできません。ファイルはフォルダー内のどこかにある必要があります。FileInputStreamプロパティファイルの読み取りにも使用できません。私が持っている唯一のオプションはJNDI、フォルダー/ディレクトリの名前を定義し、JNDI実行時にそのプロパティを調べて、ファイルを読み取るフォルダーの場所を見つけることです。そこに実例はありますか?

4

2 に答える 2

3

次の同様の投稿や記事を読んで、自分で解決策を見つけました。

コンテキスト コンテナ

JNDI を使用して tomcat からグローバル変数を読み取る。例が機能しない

java:comp/env がバインドされていません

次のように、\conf\Catalina\localhost\mywebapp.xml の下の Web アプリケーションのコンテキスト内に環境を定義しました....

    <Environment name="propertiesfilelocation" value="E:\\tmp\\application.properties"
     type="java.lang.String" override="false"/>

次に、JNDI ルックアップを使用してプロパティ ファイルにアクセスし、ファイル名を取得しました。

   Context ctx  = new InitialContext();
   Context envCtx = (Context)ctx.lookup("java:comp/env");
   String propertiesFileLocation = (String) envCtx.lookup("propertiesfilelocation");
   LOGGER.info("String property === " + propertiesFileLocation);

   properties.load(new FileInputStream(propertiesFileLocation));

@home : はい、そうです FileInputStream が関係しています。ただし、Java コード内にフォルダーの場所をハードコーディングする必要がなくなったため、このソリューションに満足しています。これにより、アプリの移植性が向上します。

于 2013-10-12T16:26:33.127 に答える
1

私は同様の問題に対して少し異なるアプローチをしています。JNDI のアイデアも試してみましたが、これは少しやり過ぎであることがわかりました。

BalusC による別の記事を見つけました。Tomcat インストールに関連するフォルダーを指定し、そこにすべてのプロパティ ファイルをデプロイできます。したがって、構成はアプリケーションの外部に保持しますが、すべてのアプリのすべてのプロパティ ファイルに個別の構成は必要ありません。

ここにリンクがあります: サーブレットベースのアプリケーションで構成リソースファイルを配置する場所と読み取る方法は?

好ましい選択は次のとおりです。

ClassLoader#getResourceAsStream()クラスパス相対パスでロードできるように、クラスパスに入れ ます。

Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("filename.properties"));

ここでfilename.propertiesは、webapp のデフォルトのクラスパス (例: webapp/WEB-INF/libwebapp/WEB-INF/classesappserver/libまたは) によってカバーされるルートの 1 つに配置する必要がありますJRE/lib

プロパティ ファイルが webapp 固有の場合は、.xml に配置するのが最適です WEB-INF/classes。IDE でプロジェクトを開発している場合は、プロジェクトを src フォルダー (プロジェクトのソース フォルダー) にドロップすることもできます。

または、デフォルトのクラスパスの外に配置して、そのパスをアプリサーバーのクラスパスに追加することもできます。shared.loaderたとえばTomcatでは、のプロパティ として構成できますtomcat/conf/catalina.properties

これが役立つことを願っています。

アラン

于 2014-09-02T08:50:32.800 に答える