1

Web アプリケーションでいくつかのバージョン メタデータを表示しています。これは、プロパティ ファイルの 1 つを更新する Maven リソース フィルターを使用して行います。

    <resources>
        <resource>
            <directory>${basedir}/src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>build-info.properties</include>
            </includes>
        </resource>
        <resource>
            <directory>${basedir}/src/main/resources</directory>
            <filtering>false</filtering>
            <excludes>
                <exclude>build-info.properties</exclude>
            </excludes>
        </resource>
    </resources>

私のプロパティファイル

build.version = ${project.version}
build.number = ${BUILD_NUMBER}
build.commit = ${git.commit.id.abbrev}

これはすべてうまく機能し、アプリケーションをパッケージ化すると、適切な情報がリソースに追加されます。

${}私の問題は、Spring PropertyPlaceholderConfigurer を使用してバージョン情報を含む Bean を結び付けようとしたことですが、これは構文が気に入らないことです。醜い回避策なしでは、アプリケーションをローカルで実行できなくなりました。次の例外が発生します。

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'com.mycompany.abc.dm.system.BuildInfo 
... 
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'project.version' in string value "${project.version}"

とにかくPropertyPlaceholderConfigurerを使用してこれに関連していますか?

これは、Spring XML コンテキストからのスニペットです。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:build-info.properties</value>
        </list>
    </property>
    <property name="ignoreUnresolvablePlaceholders" value="true" />
    <property name="order" value="1000" />
</bean>
<bean class="com.mycompany.abc.dm.system.BuildInfo">
    <constructor-arg index="0" value="${build.version}"/>
    <constructor-arg index="1" value="${build.number}"/>
    <constructor-arg index="2" value="${build.commit}"/>
</bean>

"解決"

PropertyPlaceholderConfigurer を使用してこの問題を回避する方法は見つかりませんでした。私の解決策は、PropertyPlaceholderConfigurer を使用しないことでした。Spring マジックを使用していないだけで、まだプロパティ ファイルを読んでいます。

4

0 に答える 0