
内容)tomcat起動時にpropertiesファイルの内容を変更しても、有効にならないのは仕様でしょうか。
Servletから以下のコマンドを使用し、propertiesファイルを読み込む
プログラムを作成しました。
private static final String FILE_NAME = "test.properties";
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream( FILE_NAME );
プログラムを実行し、FILE_NAMEの各キー値をメモしました。
FILE_NAMEの各キーの値を編集後(tomcatの再起動はしていない)、
再度プログラムを実行したところ、以前のpropertiesファイルの
キー値が返ってきてしまいました。
これは仕様でしょうか。
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 していることがわかります。
こんな感じで調べてみてはいかがでしょう。
ありがとうございました。
tomcat4.1を使用しておりまして、
WebappClassLoaderのソースをみたところ、同じような動きを
しておりした。
ClassLoaderを使用しない方法を考えて見ます。
No.3
- 回答日時:
> properties.load(inputStream);
ここで使われている、inputStream自身は毎回作られるのでしょうか?
この回答への補足
回答ありがとうございます。
下記のソースプログラムが毎回呼ばれる形になっておりますので、
毎回作られています。
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream( FILE_NAME );
No.2
- 回答日時:
tomcat未経験ですが。
一般的にクラスローダが取得したリソースは、初回取得時にキャッシュされます。したがって propaerties ファイルを変更したのであれば、アプリケーションサーバーの再起動が必要だと思われます。
しかし、実際のところその辺の動きは各クラスローダの実装によります。this.getClass().getClassLoader() で取得されるクラスローダがどのように実装しているか調べてみてはいかがでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- PHP $filePath = './user_img/' . $file['name'];? 1 2022/12/10 07:29
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- その他(プログラミング・Web制作) セレクトボックスで選択された値をコントローラーで使用したい 2 2022/07/26 16:41
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クラスのプロパティに構造体を...
-
3年間同じクラスになる確率
-
配列の重複する値とその個数を...
-
数学の計算問題。 3年間同じク...
-
string formatについて
-
同じクラスにならない確率を教...
-
千代田区にできる三菱の総力を...
-
ATLとMFCの違いは何でしょうか?
-
進学校通ってたんですけど、眼...
-
SWING で Button? JButton?
-
pictureBoxの画素値取得法
-
私はクラスLINEにまだ入れてな...
-
main()を持つクラスが2つ以上...
-
CListCtrlクラスに初期化する関...
-
新しいクラスLINEでだいたいの...
-
ドキュメントクラスの取得方法
-
EclipseでJSPのコンパイルエラー
-
Java「デフォルトのパッケージ...
-
VBAもしくはVB6:クラスの中で...
-
「~も自分だって~」の意味
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同じクラスにならない確率を教...
-
配列の重複する値とその個数を...
-
java eclipse 型に解決できません
-
3年間同じクラスになる確率
-
どこからも呼ばれていない無意...
-
共通で使う関数を集めたクラス...
-
ページ遷移時にアコーディオン...
-
同じパッケージ、クラス名が含...
-
IPアドレスの3バイト目の呼び方
-
同一パッケージにあるクラスが...
-
EclipseでJSPのコンパイルエラー
-
コンボボックスのマウスホイー...
-
Cstring(日本語含む)をcharに...
-
dllと同じプロジェクトにする方法
-
VBAもしくはVB6:クラスの中で...
-
main()を持つクラスが2つ以上...
-
複数のクラスで共通した関数を...
-
重複エラーを解決するには
-
string formatについて
-
UMLのクラス図はmain()も含むん...
おすすめ情報