Mam następujący plik konfiguracyjny:Wiosna @Configuration z PropertyPlaceholderConfigurer fasoli nie rozwiąże @Value adnotacji
@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;
}
}
uruchomię mojej aplikacji z następujących opcji VM:
-Dproperty=propertyValue
Więc ja jak moja aplikacja do ładowania określonego pliku właściwości podczas uruchamiania. Jednak z jakiegoś powodu na tym etapie adnotacje nie są przetwarzane, a właściwość to null
. Z drugiej strony, jeśli mam skonfigurowany PropertyPlaceholderConfigurer
poprzez plik xml - wszystko działa idealnie zgodnie z oczekiwaniami. Przykładowy plik 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>
Gdyby spróbować wstrzyknąć wartości nieruchomości w innym pliku konfiguracyjnym Wiosna - to jest właściwie wstrzykiwany. Jeśli przeniesię moje tworzenie fasoli PropertyPlaceholderConfigurer
do tego pliku konfiguracyjnego - wartość pola ma wartość zerową.
Jako obejście, używam tej linii kodu:
System.getProperties().getProperty("property", "defaultValue")
który również działa, ale chciałbym wiedzieć, dlaczego takie zachowanie jest występuje i może to jest możliwe, aby przerobić go w inny sposób, ale bez xml?
Najpierw gorąco polecam użycie 'ProperySourcesPlaceholderConfigurer' i użycie' @ PropertySource' na twojej klasie. Po drugie, fasola musi być "statyczna". –
@ M.Deinum '@ PropertySource' działa idealnie dla mnie, ale co jeśli mam niestandardową implementację' ProperySourcesPlaceholderConfigurer'? –
Dlaczego potrzebujesz niestandardowej implementacji. –