У меня есть следующий файл конфигурации:
@Configuration
public class PropertyPlaceholderConfigurerConfig {
@Value("${property:defaultValue}")
private String property;
@Bean
public static PropertyPlaceholderConfigurer ppc() throws IOException {
PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
ppc.setLocations(new ClassPathResource("properties/" + property + ".properties"));
ppc.setIgnoreUnresolvablePlaceholders(true);
return ppc;
}
}
Я запускаю свое приложение со следующей опцией VM:
-Dproperty=propertyValue
Поэтому я хочу, чтобы мое приложение загрузило определенный файл свойств при запуске. Но почему-то на этом этапе аннотации @Value
не обрабатываются, а свойство null
. С другой стороны, если у меня PropertyPlaceholderConfigurer
настроено через xml файл - все работает отлично, как ожидалось. Пример файла XML:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true"/>
<property name="location">
<value>classpath:properties/${property:defaultValue}.properties</value>
</property>
</bean>
Если я попытаюсь ввести значение свойства в другой файл конфигурации Spring - он правильно вставляется. Если я переношу мое создание PropertyPlaceholderConfigurer
bean в этот файл конфигурации - значение поля снова равно null.
Как обходной путь, я использую эту строку кода:
System.getProperties().getProperty("property", "defaultValue")
Это тоже работает, но я хотел бы знать, почему такое поведение происходит, и, возможно, его можно переписать другим способом, но без xml?