1

Java 1.6 と Spring 3.1.1 を使用しています。外部プロパティ ファイルを Spring コンテキストに読み込もうとしています。問題点は次のとおりです。最初のプロパティ ファイルには、次のプロパティ ファイルへのパスが含まれています。例:

${user.home} の最初のプロパティ ファイル:

resource.dir=C:/users/smith
config.dir=${resource.dir}/configuration

2 番目のプロパティ ファイル ${config.dir} (最初のプロパティ ファイルで定義):

datasource.name=jdbc:mysql://dbserver:3306/test
datasource.prop1=etc
datasource.prop2=etc

したがって、最初のファイルを読み取り、それらのプロパティを処理し、それらを使用して 2 番目のファイルを取得する必要があります。

Spring PropertyPlaceholderConfigurer を使用すると、最初のファイルにしか到達しません。アプリのコンテキストで PropertyPlaceholderConfigurer を 1 つしか持てないことを読みましたが、それは本当のようです。[編集: 説明については、 https ://jira.springsource.org/browse/SPR-6428 を参照してください。]

これを行う最良の方法を知っている人はいますか?

編集: Ant でビルドを実行している場合、これは明らかに簡単です。残念ながら、私のプロジェクトでは Maven を使用しています。PROPERTY タグを使用して最初のステップを実行すると、次のステップのためにすべてが「自動的に」解析され、クラスパスを ${cfg.dir} ディレクトリなどに設定できるようになります。これらのディレクトリ。SpringまたはMavenで同じ機能を使用できることを望んでいましたが、まだ答えが見つかりません...

ANT の例:

<property file="${user.home}/global.properties" />

<target name="run-some-stuff">
    <java classname="com.mystuff.App" failonerror="true" fork="yes">
        <classpath>
            <path location="${cfg.dir}" />
            <path location="${resource.dir}" />
        </classpath>
        </java>
    </target>
4

1 に答える 1

1

リソースディレクトリが単にユーザーのホームディレクトリである場合は、xmlで次のことを実行できます...

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

  <context:property-placeholder location="file:${user.home}/configuration"/>
</beans>

@PropertySourceまたは、コードでこれを行う場合は、アノテーションを使用することもできます

これが機能するのは、Spring 3.1では、PropertySource抽象化により、システムプロパティ、環境変数、およびプロパティファイルからプロパティが統合されるためです。user.homeはシステムプロパティです。

于 2012-08-14T20:36:30.527 に答える