2015-01-05 2 views
3

Я использую Spring Boot.Невозможно импортировать значение свойства при использовании заполнителя

Я объявлял свойства во внешнем файле вне пути к классам.

Я добавил, что один из моих файлов XML:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="ignoreUnresolvablePlaceholders" value="true" /> 
    <property name="ignoreResourceNotFound" value="true" /> 
    <property name="locations"> 
     <list> 
      <value>file:///d:/etc/services/pushExecuterService/pushExecuterServices.properties</value> 
     </list> 
    </property> 
</bean> 

Однако, я все еще получаю эту ошибку:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'configuration.serviceId' in string value "${configuration.serviceId}" 
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174) 

я добавил точку останова в PropertiesLoaderSupport классе в этом методе:

public void setLocations(Resource... locations) { 
    this.locations = locations; 
} 

Я обратил внимание, что этот метод вызывается несколько раз, и в одном из них я заметил локализацию ns param населен с:

URL [file:/d:/etc/services/pushExecuterService/pushExecuterServices.properties] 

Тем не менее, я все еще получаю эту ошибку.

  • я дважды проверил в моем проекте, и я не имею никаких дополнительных бобы PropertyPlaceholderConfigurer (проверка Didnt на внешних зависимости)

  • Я выбежал мое приложение с жестким кодом в Params внутри XML я могу видеть в весной -boot журналы:

    2015-01-05 18:56:52.902 INFO 7016 --- [   main] 
    o.s.b.f.c.PropertyPlaceholderConfigurer: Loading properties file from 
    URL [file:/d:/etc/services/pushExecuterService/pushExecuterServices.properties]` 
    

Так что я не уверен, что происходит. любые выводы?

спасибо.

+0

Одна вещь, которую вы должны сделать, это переписывайте свой заголовок, чтобы он был полным предложением и исправил e вопросы правописания и форматирования (хотя я вижу только пару на первый взгляд) в вопросе. –

+0

Готово. Спасибо. – rayman

+1

Просто заметили, что вы используете Spring Boot, вы должны просто добавить свои свойства в 'application.properties', вы сражаетесь с каркасом, а не работаете с ним. –

ответ

5

Spring Boot поддерживает конфигурацию на основе Java. Чтобы добавить свойства конфигурации, мы можем использовать аннотацию @PropertySource вместе с аннотацией @Configuration.

Свойства могут храниться в любом файле. Значения свойств можно вводить непосредственно в бобах с помощью @value аннотацию:

@Configuration 
@PropertySource("classpath:mail.properties") 
public class MailConfiguration { 
    @Value("${mail.protocol}") 
    private String protocol; 
    @Value("${mail.host}") 
    private String host; 
} 

@ значение атрибута PropertySource указывают местоположение ресурсов (s) из файла свойств должен быть загружен. Например, «classpath: /com/myco/app.properties» или «file:/path/to/file»

Но Spring Boot предоставляет альтернативный метод работы со свойствами, который позволяет строго типизированным компонентам управлять и проверять конфигурация приложения: @ConfigurationProperties

Смотреть это сообщение в блоге с примером использования @ConfigurationProperties: http://blog.codeleak.pl/2014/09/using-configurationproperties-in-spring.html

для примера @PropertySource вы можете проверить эту статью: http://blog.codeleak.pl/2014/09/testing-mail-code-in-spring-boot.html

+0

Но вы можете использовать @PropertySource для файлов вне classpath, как указано в моем вопросе? – rayman

+0

Да. Как я писал в ответ: «атрибут атрибута @ PropertySource указывает местоположение (и) ресурса загружаемого файла свойств. Например,« classpath: /com/myco/app.properties »или« file:/path/to/file " –

+0

ok еще одна вещь, о которой я забыл упомянуть. Я вводил свойство applicationContext.xml, а не в какой-либо java-класс. Я попытался @PropertySource (« файл ..) по-прежнему такая же ошибка – rayman

Смежные вопросы