2009-05-18 10 views
6

データベース接続(プール)の詳細を含む私のweb/meta-inf /フォルダにcontext.xmlがあります。今私は自分のアプリケーションのデータベースの詳細を、エンドユーザーがいくつかのプロパティファイルとcontext.xmlで直接、ファイルに直接コーディングするのではなく、プロパティファイルからdb接続情報を読み込むようにしたいとします。Web/Meta-Inf/Context.xmlいくつかのプロパティファイルからTomcatで読み取ることができます

tomcatがいくつかのプロパティファイルのプレースホルダを置き換えることは可能ですか?

context-managerについては読んでいますが、どこに配置するのかは不明です。

入力してください。

おかげ アビシェーク

答えて

0

はのcontext.xmlにJNDIリソースを追加するには十分ではありません。 WEB-INF/web.xmlにもその使用方法を定義する必要があります。 thisをステップごとにチェックしてください。

+0

私のシステムでうまくいけば問題はありますが、問題は私のcontext.xmlがプロパティファイルからデータベースの詳細を読むことです。つまり、user = "sa"と書くのではなく、user = "$ { username} "とusername値はプロパティファイルで定義されます。 –

+0

@Abhishekはantまたはmavenを使用してプロパティファイルからフィルタリングします。私はtomcatにはフィルタリング機能がないとは思わない。 – sal

0

私が理解しているように、システム管理者がシステムを設定できるようにするには、アプリケーションの設定を.warの外部にすることが目的です。

これを達成する1つの方法は、.warファイルにcontext.xmlを配置せず、そのファイルを.warとともに配布することです。 このファイルは、CATALINA_HOME/conf/Catalina/HOSTNAME/APPLICATIONPATH.xml(CATALINA_HOME/conf/Catalina/localhost/myapp.xmlなど)に配置する必要があります。 このようにして、データベース接続情報を.warファイルを変更せずに外部コンテキスト構成ファイルで直接編集することができます。その場合、プレースホルダは必要ありません。 xmlファイルを編集する必要があるので、これはユーザーにとって最も快適な方法ではありませんが、ほとんどのシステム管理者にとっては実現可能なはずです...

tomcatコンテキスト設定の詳細については、tomcat.apache .org/tomcat-5.5-doc/config/context.html

0

プロパティファイルから詳細を読み込むことはできませんが、コンテキストではなく中央のserver.xmlファイルで詳細を確認できます。 xml。これを達成すれば、標準XMLエンティティ参照を使用して接続の詳細を外部化できます。

データベース接続の詳細をcontext.xmlに入れるのではなく、セクションのserver.xmlに配置し、contextLink.xml要素をcontext.xmlに追加します。これにより、グローバルデータソースとコンテキスト。

残念ながら、ドキュメントはあなたが達成しようとしているものに対してかなり弱いです。 (下半分の方法について)このページの「リソース定義」セクションの指示に従って、その下の(小さな)リソースリンクのセクションに特に注意を払う:

http://tomcat.apache.org/tomcat-5.5-doc/config/globalresources.html

0

私が持っていない場合ビルド時にデータベース接続情報を取得するには、リソース参照を設定し、管理者に接続プールに与える必要がある名前を伝えます。彼らはTomcat管理コンソールのすべてを設定することができ、私はそれについて知る必要はありません。これにより、データベース構成の詳細がWARの一部ではないため、単一のWARファイルを作成して複数の環境で使用することも容易になります。

も参照してください: Apache Tomcat 6.0 JNDI Resources

あなたがビルド時に詳細を知っているし、WARにそれらを焼くしたい場合は、Ant filtersを試してみてください。

+0

私の意見では、人間が管理コンソールにアクセスする必要があるため、この方法では展開を自動化するのは難しいです。 –

+0

@GuidoGarcíaそれは一度だけ起こる必要があります。サーバー上にデータソースが定義されたら、展開を完全に自動化できます。データソースの作成を自動化することさえできますが、それはあまり頻繁に起こらないため、私はそれをやっていません。 –

1

あなたはより良い方法でそれを行うことができます。 は、私たちのケースでは、UATは、事前PRODなどサポートしていたので、私はやった

が、私はそのデフォルトの場所<TOMCAT_HOME>/confで私のcontext.xmlを入れdevのように、異なるプロファイルの異なるデータベースを持っていました。

はのcontext.xmlのリソースの設定で次のように持っていた:私は3台のTomcatサーバに作成

<Resource name="jdbc/someDS" 
      auth="Container" 
      type="javax.sql.DataSource" 
      driverClassName="oracle.jdbc.OracleDriver" 
      url="${appName.db.url}" 
      username="${appName.db.user}" 
      password="${appName.db.password}" 
      maxActive="30" 
      maxIdle="10" 
      defaultAutoCommit="true" 
      maxWait="-1"/> 

- サーバー-devを、サーバー・UAT、サーバー・サポート をし、各データベース内の対応する値を渡します(下図のように)日食/ IntelliJののTomcatサーバの設定でのTomcatのVM引数:

-DappName.db.url=jdbc:oracle:thin:@<DB_SERVER>:1521:<SID> -DappName.db.user=DB_USER -appName.db.password=DB_PASSWORD 

利点があり、開発者は、データベースごとに、時間を変更する必要はありません、彼らはちょうど開始する必要があります特定のサーバー。これは非常に便利で、開発中に多くの時間を節約できました。

+2

jvmを使用せずに、プロパティファイルを使用してこれを行うことができます。また、 'TOMCAT_HOME/conf'のcontext.xmlにjndiルックアップがあります。変数を使用してプロパティファイルから読み込むことができるかどうか疑問に思っていましたか? –

関連する問題