プロパティファイルから構成パラメーターを読み取るTomcatデプロイメントを作成するために受け入れられているプラクティスは何ですか?
WARファイルを配信し、クライアントが特定のディレクトリでプロパティファイルを作成または編集するだけでよいことを指定できると便利です。これはやや定期的な方法ですか?これより良いアプローチはありますか?
多くの場合、WARとTomcat/conf/Catalina/localhost
ディレクトリに配置され、任意のパスからwebappをロードできるContext XMLファイルを提供することにより、webappを配布します。参考資料 here があります。これには次の利点があります。
プロパティファイルが本当に必要な場合は、プロパティXMLを指すコンテキストXMLファイルにパラメータを設定し、そのパラメータを ServletContextListener で読み取ってから、プロパティファイルで読み取ることができます。
これを処理する方法:
これは、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>
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>