2012-09-05 3 views
11

アプリケーションの設定ファイルを読み込むためのベストプラクティスは何ですか? Tomcatサーバーのどのフォルダが "クラスパス上にある"か。tomcatからプロパティを読み取る

設定ファイルをTOMCAT_HOME\confに配置しようとしましたが、サーブレットから読み込めませんでした。

は(confの中app.propertiesファイルがある)、これを使用してみました:

this.getClass().getClassLoader().getResourceAsStream("/app.properties"); 

私はこれが問題になることはありません考え出し多分10-15を多くの特性を有していません。私はjbossを使用していたときにこれがこれほど問題ではなかったことを覚えています。

私のアプリでは、私もDB接続スプリングをcontext.xmlに指定していますが、どういうわけかそこに自分のプロパティを指定することはできますか?または、これはtomcatとどのように機能しますか?

私は自分の戦争/解体戦争とは別に自分の財産を維持したいと思います。私のアプリが展開される場所、私は私の知る限り、あなたはまた、Tomcatの中でdatasourceを設定することができます知っている(どの場所で)

答えて

18

あり、多くの異なる方法があるが、それはあなたのニーズによって異なります。

this.getClass().getClassLoader().getResourceAsStream(...)のようにクラスローダが(ちょうどことができますので、あなたがjava.io.Fileオブジェクトを使用してアクセスする必要があります$TOMCAT_HOME/confディレクトリからプロパティファイルをロードするには。(WEB-INF/classesWEB-INF/libまたは$TOMCAT_HOME/lib下)あなたのクラスパスからロード・ファイル(およびクラス)

Tomcatのconfigディレクトリからファイルをロードするための最も簡単な例は次のようになります。

File configDir = new File(System.getProperty("catalina.base"), "conf"); 
File configFile = new File(configDir, "myconfig.properties"); 
InputStream stream = new FileInputStream(configFile); 
Properties props = new Properties(); 
props.load(stream); 

この方法は、コードをTomcatに依存させることに注意してください(読み込みメカニズムはTomcatのシステムプロパティが利用可能であるという事実に依存します)。 はお勧めしませんので、のプロパティファイルをクラスパスのフォルダに移動すると、試行した方法でロードしてアプリケーションをどのコンテナにも展開できるはずです。

また、プロパティをJNDIリソースとして構成することもできますが、アクセスするのは面倒です。

+0

これは、アプリケーションのプロパティが存在する場所ではありません。 –

+3

私は知っていますが、もし彼がそれらを置くことを望むなら、私は彼にそれを手に入れる手がかりを与えています。クラスパスを利用可能なフォルダに移動するように勧めています –

+0

これで問題ありません。 –

0

を知らないので、これを尋ねるため

更新

理由です。 DataSource in Tomcat

この後、datasourceをアプリケーションで使用できます。

+0

感謝。私はデータソースを必要としません。私はその部分を既に設定しました。追加のプロパティが必要です。 –

+0

あなたがしていることは何でもいいと思います。アプリケーションがどこに展開されていても、抽出されたファイルのディレクトリ構造は同じです。したがって、app.propertiesがdeployableで適切に出荷されていれば、問題は発生しません。 –

1

ファイルをwebappのWEB-INF/classesに入れてください。これがデフォルトのクラスパスディレクトリです。 conf(Tomcat内部のみの場合)。

0

PITAかもしれませんが、おそらくどこに配備されるのかわからない機能です。あなたはその事実に自分自身を "カップル"することはできません!

Javaスタックの残りの部分によっては、通常、Tomcatとは独立した方法が最適です。あなたが春を使用している場合は、たとえば言うことができます。Java Configを、別の例として使用して

new ClassPathResource("**/myFile.properties") 

または場合:

@PropertySource("classpath:META-INF/MyWeb.properties") 

プレーンJavaでのあなたが言うことができます。

InputStream stream = loader.getResourceAsStream(resourceName); 

場所ローダーはClassLoaderのインスタンスです

1

特定の構成ファイルの場所を参照するのではなく、 JNDIバインディング構成を使用して、アプリケーションを構成データとJava EE標準のみに依存するようにします。あなただけのプロパティファイルで構成エントリの適度な数を持っている場合は、それらをEnvironment Entriesにすることを検討し、あなたのアプリケーションでJNDI経由でそれらにアクセス、

  1. :私は2つのオプションを見ることができます。

  2. また、プロパティを別々のプロパティファイルに保存する場合は、プロパティを表すBean、プロパティファイルを使用してBeanを初期化するファクトリ(JNDIにバインドする) Resource Definitionとなります。
    これにより、アプリケーションを再起動したり、さまざまな設定やその他の要件を切り替えることなく、定期的にプロパティファイルを再読み込みすることさえできるかもしれません。

この構成を使用してWebアプリケーションのそれぞれは、その中Resource Reference構成ビーンを参照するweb.xmlだ含める必要があります(または各ENVを参照。エントリオプション1が使用される場合)。

0

のapache-tomcatの-7.0.78 \ confフォルダ内の.propertiesファイルを追加します。応答のための

File configDir = new File(System.getProperty("catalina.base"), "conf"); 
File configFile = new File(configDir, "dashboardiframes.properties"); 
InputStream stream = new FileInputStream(configFile);Properties properties = new Properties(); 
properties.load(stream);