web-dev-qa-db-ja.com

プロパティファイルを使用してDB接続情報をロードするようにTomcatを構成する

プロパティファイルから構成パラメーターを読み取るTomcatデプロイメントを作成するために受け入れられているプラ​​クティスは何ですか?

WARファイルを配信し、クライアントが特定のディレクトリでプロパティファイルを作成または編集するだけでよいことを指定できると便利です。これはやや定期的な方法ですか?これより良いアプローチはありますか?

31
jW.

多くの場合、WARとTomcat/conf/Catalina/localhostディレクトリに配置され、任意のパスからwebappをロードできるContext XMLファイルを提供することにより、webappを配布します。参考資料 here があります。これには次の利点があります。

  • コンテキストパラメータをここで設定し、ウェブアプリで読み取ることができます
  • ここでデータソースを定義および構成できます
  • WARは実際にはファイルシステムのどこにでも置くことができます。つまり、Tomcatがアップグレードされた場合、この単一の構成ファイルだけを新しいTomcatインストールに移動する必要があり、Webアプリケーションと他のファイルはどこにでもとどまることができます

プロパティファイルが本当に必要な場合は、プロパティXMLを指すコンテキストXMLファイルにパラメータを設定し、そのパラメータを ServletContextListener で読み取ってから、プロパティファイルで読み取ることができます。

14
Adam Batkin

これを処理する方法:

  1. 同意するリソース名を使用して、クライアントに GlobalNamingResources で接続プールを作成してもらいます。データベースドライバーはTomcatのクラスパスにある必要があります。
  2. Warファイルには、ステップ1で構成された接続プールへの ResourceLink リンクを含むMETA-INF/context.xmlファイルが含まれています。

これは、context.xml接続情報を直接変更するよりも少し前に行う作業ですが、時間が経つと成果が出るはずです。開発サーバーは、開発をポイントするGlobalNamingResources、テストをポイントするテストサーバーなどでセットアップされます。その後、何も編集せずに同じWARファイルを各サーバーにコピーできます。

これはプロパティファイルを使用していませんが、同じ目的を達成していると思います。ユーザー/顧客がデータベース接続情報をセットアップできるようにします。

GlobalNamingResourceの例:

<Resource name="jdbc/dbconnection" auth="Container"
type="javax.sql.DataSource" driverClassName="Oracle.jdbc.driver.OracleDriver"
url="jdbc:Oracle:thin:@127.0.0.1:1546:SID"
username="scott" password="tiger" maxActive="8" maxIdle="4"
validationQuery="select 1 from dual"
testOnBorrow="true"/>

Warファイルのcontext.xmlの例:

<Context path="/MyWebApp" docBase="MyWebApp" debug="5" reloadable="true">
    <ResourceLink name="jdbc/dbconnection" global="jdbc/dbconnection" 
          type="javax.sql.DataSource"/>
</Context>
9
Steve K

Warゾーンの外に構成を保存することをお勧めします。 WARには、プロパティファイルを検索するデフォルトの場所があります。デフォルトが機能しない場合は、JVMパラメータまたはconf/Catalina/[Host]ディレクトリのコンテキストフラグメントで定義されているコンテキストパラメータを使用して場所を指定できます。例えば、

<Context docBase="/server/app.war"
    swallowOutput="true" unpackWAR="false" useNaming="false">

    <Parameter name="config-file" value="/config/db.properties" override="true" />
</Context>
8
ZZ Coder