Подтвердить что ты не робот

Spring @Value не разрешает значение из файла свойств

У меня это работало в каком-то другом проекте раньше, я просто повторю то же самое, но по какой-то причине он не работает. Spring @Value не читается из файла свойств, а вместо этого принимает значение буквально

AppConfig.java

@Component
public class AppConfig
{
    @Value("${key.value1}")
    private String value;

    public String getValue()
    {
        return value;
    }
}

applicationContext.xml:

<context:component-scan
    base-package="com.test.config" />
<context:annotation-config />

<bean id="appConfigProperties"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:appconfig.properties" />
</bean>

appconfig.properties

key.value1=test value 1

В моем контроллере, где у меня есть:

@Autowired
private AppConfig appConfig;

Приложение начинается просто отлично, но когда я делаю

appConfig.getValue()

он возвращает

${key.value1}

Он не разрешает значение внутри файла свойств.

Мысли?

4b9b3361

Ответ 1

Проблема возникает из-за проблемы в моем приложенииContext.xml vs spring -servlet.xml - проблема была связана с beans.

pedjaradenkovic любезно указал мне на существующий ресурс: Spring @Обозначить аннотацию в классе @Controller, не оценивая значение внутри файла свойств и Spring 3.0.5 не оценивает аннотацию @Value из свойств

Ответ 2

Я также обнаружил, что причина @value не работает, @value требует PropertySourcesPlaceholderConfigurer вместо PropertyPlaceholderConfigurer. я сделал те же изменения, и это сработало для меня, я использую spring 4.0.3 выпуск. Я сконфигурировал это, используя код ниже в моем файле конфигурации -

@Bean 
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}

Ответ 3

В моем случае статические поля не будут вставляться.

Ответ 4

для пользователя Sprig-boot и PropertyPlaceholderConfigurer, и новый PropertySourcesPlaceholderConfigurer, добавленные в Spring 3.1. так что это просто для доступа к файлу свойств. просто ввести

Примечание: убедитесь, что ваша собственность не должна быть Static

@Value("${key.value1}")
private String value;

Ответ 5

Я использовал загрузку spring, и для меня обновление версии от 1.4.0.RELEASE до 1.5.6.RELEASE решило эту проблему.

Ответ 6

Прочитайте комментарий педжараденкович.

В дополнение к ссылке, которую он предоставляет, причина, по которой это не работает, заключается в том, что для обработки @Value требуется PropertySourcesPlaceholderConfigurer вместо PropertyPlaceholderConfigurer.

Ответ 7

В моем случае мне не хватало фигурных скобок. У меня было @Value("foo.bar") String value вместо правильной формы @Value("${foo.bar}") String value