带有Maven属性的Spring PropertyPlaceholderConfigurer

时间:2016-04-15 03:22:59

标签: java spring maven properties property-placeholder

我在我的网络应用程序中显示了一些版本元数据,我使用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>

&#34;溶液&#34;

我从未使用PropertyPlaceholderConfigurer找到解决此问题的方法。我的解决方案是不使用PropertyPlaceholderConfigurer。我还在阅读属性文件,而不是使用Spring魔法。

0 个答案:

没有答案