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}
Он не разрешает значение внутри файла свойств.
Мысли?
Ответы
Ответ 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