web-dev-qa-db-ja.com

Spring、Maven、EclipseでXMLファイルのプロパティ値を処理する最良の方法

私は、Springプログラマーが知っているように、XMLファイルに多くのプロパティ値を持つSpring WebFlowプロジェクトに取り組んでいます。データベースのユーザー名、パスワード、URLなどがあります。

Spring WebFlowおよびMavenでEclipseを使用しています。 SAはビルドを行いますが、SAは値を変更するためにXMLファイルにアクセスすることを望みませんが、 、私たちは生産値を知りません。

16
techsjs2012

ほとんどのSAは.propertiesではなく.xmlファイルを処理する意思があり、自信があります。

Springは PropertyPlaceholderConfigurer を提供して、すべてを1つまたは複数の.propertiesファイルに定義し、applicationContext.xmlのプレースホルダーを置き換えます。

app.propertiesフォルダーの下にsrc/main/resources/を作成します。

... ...

# Dadabase connection settings:
jdbc.driverClassName=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost:5432/app_db
jdbc.username=app_admin
jdbc.password=password

... ...

そして、applicationContext.xmlでPropertyPlaceholderConfigurerを使用します:

... ...

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location">
    <value>app.properties</value>
  </property>
</bean>

... ...

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="${jdbc.driverClassName}" />
  <property name="url" value="${jdbc.url}" />
  <property name="username" value="${jdbc.username}" />
  <property name="password" value="${jdbc.password}" />
</bean>

詳細については、 Spring PropertyPlaceholderConfigurerの例 をご覧ください。

さらに、アプリケーションの展開の観点から、通常はアプリを何らかの実行可能形式でパッケージ化し、通常.propertiesファイルは実行可能warまたはearファイル内にパックされます。簡単な解決策は、PropertyPlaceholderConfigurer Beanを構成して、事前定義された順序で複数の場所からプロパティを解決することです。そのため、デプロイメント環境では、固定の場所または環境変数を使用してプロパティファイルを指定できます。 SAのデプロイ/構成タスクでは、通常、次のように単一の外部.propertiesファイルを使用してすべてのランタイム構成を定義します。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
    <list>
      <!-- Default location inside war file -->
      <value>classpath:app.properties</value>
      <!-- Environment specific location, a fixed path on server -->
      <value>file:///opt/my-app/conf/app.properties</value>
    </list>
  </property>
  <property name="ignoreResourceNotFound" value="true"/>
</bean>

お役に立てれば。

37
yorkw