访问属性在settings.xml中设置为spring.xml

时间:2014-03-01 03:53:03

标签: java spring maven properties-file

我在user_directory/.m2文件夹中有一个settings.xml文件。我在settings.xml中设置了一个属性。我希望它在spring.xml中访问它。

setting.xml

<profiles>
    <profile>
    <id>default</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
        <testName>Test</testName>
    </properties>
    </profile>      
</profiles>

在pom.xml中我写过

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

我是否必须在src / main / resources文件夹中创建test.properties文件。

name = ${testName}

spring.xml我用它作为

<context:property-placeholder location="classpath:src/main/resources/test.properties"/>
<bean class="java.lang.String" id="nameTest">
    <constructor-arg value="name"/>
</bean> 

run.Exception是

  

线程“main”中的异常   org.springframework.beans.factory.BeanInitializationException:可以   不加载属性;嵌套异常是   java.io.FileNotFoundException:类路径资源   无法打开[src / main / resources / test.properties],因为它确实如此   不存在

出了什么问题。如何从settings.xmlspring.xml访问属性。

2 个答案:

答案 0 :(得分:0)

我看到几点:

  1. property-placeholder的位置属性是指类路径上的文件,但您想在文件系统上使用文件,因此它必须是这样的:

    <context:property-placeholder location="file:///user_directory/.m2/settings.properties"/>
    
  2. 您的设置文件是XML。默认情况下,实际上是Java属性格式的文件。可能有使用自定义XML的方法,但我不熟悉。因此,您的XML文件将转换为以下内容:

    profile.id = default
    profile.activation.activateByDefault = true
    profile.properties.testName = Test
    ...
    
  3. 稍后在spring.xml引用您的媒体资源时,您只需使用${profile.id}放置settings.properties文件中的ID值。

答案 1 :(得分:0)

您错误配置了财产占有者。 src / main / resource不在你的类路径中,你应该输入类似的东西:

<context:property-placeholder location="classpath:test.properties"/>

对于上下文的配置,您可以:

一个。直接过滤你的春天语境:

<bean class="java.lang.String" id="nameTest">
    <constructor-arg value="${testName}"/>
</bean> 

湾或者过滤test.properties配置文件,然后将其作为属性占位符注入spring.xml:

test.properties:

spring.testName=${testName}

spring.xml:

<context:property-placeholder location="classpath:test.properties"/>

<bean class="java.lang.String" id="nameTest">
    <constructor-arg value="${spring.testName}"/>
</bean>