Хобрук: Ваш путь к мастерству в программировании

Spring 3.0 @Value считывается из файла свойств, получая исключение при развертывании

Я пытаюсь создать приложение Spring 3.0 версии 3.1.0.RELEASE , где я хочу прочитать из файла свойств и использовать аннотацию @Value, прочитанную из него в моем классе компонентов. Для этого я сделал изменения: в mvc-dispatcher-servlet.xml:

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

Класс компонента:

@Component

открытый класс SomeHelper {

@Value("${baseUri}")
private String baseUri;

public String getBaseUri() {
    return baseUri;
}

public void setBaseUri(String baseUri) {
    this.baseUri = baseUri;
}
}

Имущество:

baseUri:http://localhost:8080/

и я подключил этот вспомогательный класс к классу @service, используя аннотацию @Autowired. Когда я создаю и развертываю приложение, я получаю следующую ошибку:

java.lang.IllegalArgumentException: Could not resolve placeholder 'baseUri'
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287)

Есть ли что-то, чего мне не хватает, потому что я просто следовал стандартной процедуре.

Оцените любую помощь заранее.

-Вайбхав

12.09.2013

  • Где это свойство должно быть определено? 12.09.2013
  • в файле: mediamonitoring.properties 12.09.2013
  • кажется, что файл не находится в пути к классу. Кроме того, : можно использовать для назначения. Это я был виноват. 12.09.2013
  • это в пути к классам, потому что, если я укажу любое другое имя файла вместо вышеуказанного, это вызовет исключение filenotfound 12.09.2013
  • я вижу этот файл в WEB-INF/classes 12.09.2013
  • Вы пробовали предложения в моем ответе? 12.09.2013

Ответы:


1

Используйте = вместо : в качестве разделителя

baseUri=http://localhost:8080/
12.09.2013
  • Ваш файл не загружен (возможно, не в пути к классам) 12.09.2013
  • я вижу этот файл в WEB-INF/classes 12.09.2013
  • попробуйте без префикса classpath:, как описано в stackoverflow.com/questions/4779572/ 12.09.2013
  • удален путь к классам: org.springframework.beans.factory.BeanInitializationException: не удалось загрузить свойства; вложенным исключением является java.io.FileNotFoundException: не удалось открыть ресурс ServletContext [/mediamonitoring.properties] 12.09.2013
  • Попробуйте переместить <context:property-.../> в том же контексте вашего @Controller, что и в stackoverflow.com/questions/5275724/ 12.09.2013

  • 2

    не могу комментировать, нужно больше повторений, поэтому используйте вариант ответа. проверьте, куда вы поместили свои mediamonitoring.properties. Я имею в виду, проверьте, есть ли это в вашем пути к классам

    12.09.2013
  • он находится в папке src/main/resources, где хранятся файлы локализации и связанные с ними файлы, а также файл распознается, как когда я переименовал файл в контексте: свойство-заполнитель location=classpath:mediamonitoring.properties на какое-то запутанное имя, которое было выкидывание файла ошибки не найдено 12.09.2013

  • 3

    Вы должны экранировать специальные символы : и = со значением \ следующим образом:

    baseUri:http\://localhost\:8080/
    

    В противном случае синтаксический анализатор не сможет решить, где заканчивается ваше значение и начинается новый ключ.
    См. также файл свойств Java. спецификации

    12.09.2013
  • Вы пытались изменить значение ключа на что-то другое? baseUri потенциально может с чем-то конфликтовать. 12.09.2013
  • плохо попробую :) 12.09.2013

  • 4

    Предполагая, что вы следуете обычной практике использования ContextLoaderListener и DispatcherServlet, убедитесь, что <context:property-placeholder location="classpath:mediamonitoring.properties"/> находится в правильном контексте приложения. Он будет работать только с bean-компонентами в том же контексте приложения, а не с bean-компонентами в родительском или дочернем контексте.

    12.09.2013

    5

    Замените : на = и используйте # вместо $

    #{baseUri}
    

    Вы также можете попробовать использовать:

    <util:properties id="props"
        location="classpath:/yourproperties.properties" />
    

    И тогда:

    @Value("#{props['yourProperty']}")
    
    12.09.2013
    Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..