Ho seguente file di configurazione:primavera @Configuration con PropertyPlaceholderConfigurer fagioli non risolve annotazione @Value
@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;
}
}
corro la mia applicazione con seguente opzione VM:
-Dproperty=propertyValue
quindi mi piacerebbe come la mia applicazione per caricare un file di proprietà specifico all'avvio. Ma per qualche ragione in questa fase le annotazioni non vengono elaborate e la proprietà è null
. D'altra parte se ho configurato tramite file xml - tutto funziona perfettamente come previsto. esempio di file 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>
Se provo a iniettare valore della proprietà in un altro file di configurazione primavera - sia correttamente iniettato. Se trasferisco la mia creazione di bean PropertyPlaceholderConfigurer
a quel file di configurazione, il valore del campo è di nuovo nullo.
Come soluzione alternativa, io uso questa riga di codice:
System.getProperties().getProperty("property", "defaultValue")
che è anche funziona, ma mi piacerebbe sapere perché tale comportamento è si verifica e forse è possibile riscrivere in altro modo, ma senza xml?
Innanzitutto suggerisco fortemente l'uso di 'ProperySourcesPlaceholderConfigurer' e uso un' @ PropertySource' sulla classe. Secondo, il bean deve essere 'static'. –
@ M.Deinum '@ PropertySource' funziona perfettamente per me, ma cosa succede se ho un'implementazione personalizzata di' ProperySourcesPlaceholderConfigurer'? –
Perché avresti bisogno di un'implementazione personalizzata. –