• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:tomcat上でのpropertiesファイルの扱いについて)

tomcat上でのpropertiesファイルの扱いについて

このQ&Aのポイント
  • tomcat上でのpropertiesファイルの扱いについて調査しました。質問者はtomcat起動時にpropertiesファイルの内容を変更しても、有効にならない現象について疑問を持っています。
  • Servletからpropertiesファイルを読み込むプログラムを作成した質問者は、ファイルのキー値を編集して再度プログラムを実行しましたが、以前のキー値が返ってきてしまったという結果になりました。
  • 質問者はこれが仕様なのかについて知りたいと思っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • jicchi2
  • ベストアンサー率27% (5/18)
回答No.4

No2です。 クラスローダの名前は System.out.println(this.getClass().getClassLoader().class.getName()); でわかります。 あとはそのクラスの実装ですが、Tomcatであればソースコードが公開されているので、それを見ればわかります。 Tomcat未経験ですので、どのクラスローダが使用されているのかわかりませんが、Tomcat6.0.13のソースを見てみました。 例として WebappClassLoader というクラスを見ると、resourceEntries という名の HashMap のフィールドがありここに取得したリソースがキャッシュされています。getResourceAsStream からたどれば、初回取得時に resourceEntries に put され、2回目以降は resourceEntries から get していることがわかります。 こんな感じで調べてみてはいかがでしょう。

takahata99
質問者

お礼

ありがとうございました。 tomcat4.1を使用しておりまして、 WebappClassLoaderのソースをみたところ、同じような動きを しておりした。 ClassLoaderを使用しない方法を考えて見ます。

その他の回答 (3)

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.3

> properties.load(inputStream); ここで使われている、inputStream自身は毎回作られるのでしょうか?

takahata99
質問者

補足

回答ありがとうございます。 下記のソースプログラムが毎回呼ばれる形になっておりますので、 毎回作られています。 InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream( FILE_NAME );

  • jicchi2
  • ベストアンサー率27% (5/18)
回答No.2

tomcat未経験ですが。 一般的にクラスローダが取得したリソースは、初回取得時にキャッシュされます。したがって propaerties ファイルを変更したのであれば、アプリケーションサーバーの再起動が必要だと思われます。 しかし、実際のところその辺の動きは各クラスローダの実装によります。this.getClass().getClassLoader() で取得されるクラスローダがどのように実装しているか調べてみてはいかがでしょうか。

takahata99
質問者

お礼

初心者で申し訳ありません。 調べ方を教えていただけないでしょうか。

noname#49428
noname#49428
回答No.1

そんなことはないです。 コードがそうなってるのではないですか?

takahata99
質問者

補足

回答ありがとうございます。 コード自体は、毎回propertiesファイルを読み込むように なっています。 Properties properties = new Properties(); properties.load(inputStream); という感じでリクエストがくるたびにloadを呼ぶようにしております。

関連するQ&A