Доступ к свойствам, установленным в settings.xml, в spring.xml

У меня есть файл settings.xml в папке user_directory/.m2. Я установил свойство в settings.xml. Я хочу, чтобы он получил к нему доступ в spring.xml.

настройка.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>

Должен ли я создать файл test.properties внутри папки src/main/resources.

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

Исключение в потоке «основной» org.springframework.beans.factory.BeanInitializationException: не удалось загрузить свойства; вложенным исключением является java.io.FileNotFoundException: ресурс пути к классу [src/main/resources/test.properties] не может быть открыт, поскольку он не существует

Что происходит не так. Как я могу получить доступ к свойствам от settings.xml до spring.xml.


person user3364704    schedule 01.03.2014    source источник


Ответы (2)


Вы неправильно настроили заполнитель свойства. 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:

тест.свойства:

spring.testName=${testName}

весна.xml:

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

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

Я вижу несколько моментов:

  1. Свойство location 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.

person ced-b    schedule 01.03.2014